MCS-51单片机的汇编语言指令系统课件.ppt

上传人:飞****2 文档编号:69497954 上传时间:2023-01-05 格式:PPT 页数:101 大小:655KB
返回 下载 相关 举报
MCS-51单片机的汇编语言指令系统课件.ppt_第1页
第1页 / 共101页
MCS-51单片机的汇编语言指令系统课件.ppt_第2页
第2页 / 共101页
点击查看更多>>
资源描述

《MCS-51单片机的汇编语言指令系统课件.ppt》由会员分享,可在线阅读,更多相关《MCS-51单片机的汇编语言指令系统课件.ppt(101页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第3章章 MCS-51单片机的汇编语言指令系统单片机的汇编语言指令系统3.1 指令格式及其符号说明指令格式及其符号说明单片机单片机汇编语言汇编语言:助记符语言:助记符语言单片机的单片机的指令指令:是:是CPU用于控制功能部件完成某一用于控制功能部件完成某一 指定动作的指示和命令指定动作的指示和命令 指令系统指令系统:单片机全部指令的集合:单片机全部指令的集合111条指令,实现条指令,实现51种基本操作种基本操作3.1.1 指令格式指令格式指令格式:指令的表示方法指令格式:指令的表示方法两部分两部分操作码:用来规定指令进行什么操作操作码:用来规定指令进行什么操作操作数:指令操作的对象操作数:指

2、令操作的对象汇编语言指令格式汇编语言指令格式标号标号:操作码助记符操作码助记符 目的操作数目的操作数,源操作数源操作数:注释注释指令的符指令的符号地址号地址 确定指令进确定指令进行何种操作行何种操作 指令操作指令操作的对象的对象 指令操作指令操作的对象的对象对指令功对指令功能的说明能的说明 注意:注注意:注释编写的时候要注意一定要以分号释编写的时候要注意一定要以分号“;”开始。开始。3.1.1 常用符号说明常用符号说明1、单字节指令、单字节指令指令的指令代码只有一个字节,操作码和操作数信息同指令的指令代码只有一个字节,操作码和操作数信息同在其中。在其中。如:如:INC DPTR1010 001

3、1MOV A,Rn1110 1rrr一字节指令一字节指令49条条3.1.3 指令的字节指令的字节 无操作数无操作数含有操作数含有操作数2、双字节指令、双字节指令包括二个字节,其中第一个字节为操作码,包括二个字节,其中第一个字节为操作码,第二个字节为操作数第二个字节为操作数如:如:MOV A,#data指令代码:指令代码:0111 0100 立即数立即数双字节指令共双字节指令共45条条3、三字节指令、三字节指令三三字节指令中,操作码占一个字节字节指令中,操作码占一个字节 操作数占两个字节操作数占两个字节操作数既可能是数据,也可能是地址操作数既可能是数据,也可能是地址如:如:ANL direct,

4、#data 0101 0011 直接地址直接地址 立即数立即数三三字节指令共字节指令共17条条3.2 单片机寻址方式单片机寻址方式寻址:就是如何得到操作数的所在单元的地址寻址:就是如何得到操作数的所在单元的地址3.2.1 立即寻址方式立即寻址方式操作数在指令中直接给出,操作数在指令中直接给出,出现在指令中的操作数称为立即数出现在指令中的操作数称为立即数如;如;MOV A,#data MOV A,#3AHMOV DPTR,#data163.2.2 直接寻址方式直接寻址方式操作数直接以单元地址的形式给出操作数直接以单元地址的形式给出如:如:MOV A,3AH寻址范围:寻址范围:(1)内部)内部RA

5、M低低128单元单元(2)特殊功能寄存器)特殊功能寄存器例如:例如:MOV A,50HMOV A,P1MOV A,90H上面指令中的上面指令中的50H、P1、90H均是直接寻址方式。均是直接寻址方式。3.2.3 寄存器寻址方式寄存器寻址方式操作数在寄存器中操作数在寄存器中MOV A,R0寻址范围:寻址范围:(1)工作寄存器:)工作寄存器:4组组R0R7(2)部分特殊功能寄存器:如部分特殊功能寄存器:如A、B、DPTR等等3.2.4 寄存器间接寻址方式寄存器间接寻址方式寄存器中存放的是操作数的地址,寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的即操作数是通过寄存器间接得到的如:如:

6、MOV A,R0寻址范围:寻址范围:(1)内部)内部RAM低低128单元单元(2)外部)外部RAM 64KB 如如 MOVX A,DPTR(3)外部外部RAM的低的低256单元单元(4)堆栈操作指令()堆栈操作指令(PUSH、POP),),以堆栈作间址以堆栈作间址 寄存器的间接寻址方式寄存器的间接寻址方式如:如:MOV A,R03.2.5 变址寻址方式变址寻址方式变址寻址是为了访问程序存储器中的数据表格变址寻址是为了访问程序存储器中的数据表格如;如;MOVC A,A+DPTR把把DPTR和和A的内容相加,再把所得到的程序存储器地的内容相加,再把所得到的程序存储器地址单元的内容送址单元的内容送A

7、假定指令执行前(假定指令执行前(A)=02H,(,(DPTR)=0100H则操作数地址为则操作数地址为0100H+02H=0102H假定指令执行前(假定指令执行前(A)=02H,(,(DPTR)=0100H则操作数地址为则操作数地址为0100H+02H=0102H故指令执行的结果是故指令执行的结果是A的内容为的内容为38HROM寻址方式说明:寻址方式说明:(1)只能对程序存储器进行寻址,寻址范围)只能对程序存储器进行寻址,寻址范围64KB(2)变址寻址的指令只有变址寻址的指令只有3条:条:MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR(3)变址寻址的指令都是一字节指令

8、变址寻址的指令都是一字节指令3.2.6 相对寻址方式相对寻址方式为为解决程序转移而专门设置的,为转移指令所采用解决程序转移而专门设置的,为转移指令所采用目的地址目的地址=转移指令地址转移指令地址+转移指令字节数转移指令字节数+rel偏移量偏移量rel是一个带符号的是一个带符号的8位二进制补码数,表示的数位二进制补码数,表示的数的范围是:的范围是:-128+1273.2.7 位寻址方式位寻址方式位位处理功能,可以对数据位进行操作处理功能,可以对数据位进行操作如:如:MOV C,3AH把把3AH位的状态送进位位位的状态送进位位C寻址范围:寻址范围:(1)内部)内部RAM中的位寻址区中的位寻址区 单

9、元地址为单元地址为20H2FH,共共16个单元个单元128位,位地址位,位地址 是是00H7FH(2)专用寄存器的可寻址位专用寄存器的可寻址位 可供寻址的专用寄存器共有可供寻址的专用寄存器共有11个,实有寻址位个,实有寻址位83位位寻址位在指令中的寻址位在指令中的4种表示方法:种表示方法:(1)直接使用位地址。例如)直接使用位地址。例如PSW寄存器位寄存器位5地址为地址为0D5H(2)位名称表示方法。例如位名称表示方法。例如PSW寄存器位寄存器位5是是F0标志位标志位 用用F0表示表示(3)单元地址加位数的表示方法。例如)单元地址加位数的表示方法。例如,0D0H单元单元(即即PSW 寄存器寄存

10、器)位位5,为为0D0H.5(4)专用寄存器符号加位数的表示方法。例如专用寄存器符号加位数的表示方法。例如PSW寄存器寄存器 的位的位5,表示为,表示为PSW.53.3 MCS-51单片机指令系统单片机指令系统指令指令111条,分为五大类:条,分为五大类:数据传送类指令(数据传送类指令(29)条)条算术运算类指令(算术运算类指令(24条)条)逻辑运算及移位类指令(逻辑运算及移位类指令(24条)条)控制转移类指令(控制转移类指令(17条)条)位操作类指令(位操作类指令(17条)条)3.3.1 数据传送类指令(数据传送类指令(29条)条)MOV ,源源操作数:累加器操作数:累加器A、通用寄存器通用

11、寄存器Rn、直接地址直接地址 direct、间址寄存器和立即数间址寄存器和立即数 目的操作数:累加器目的操作数:累加器A、通用寄存器通用寄存器Rn、直接地址直接地址 direct、间址寄存器间址寄存器 1.普通传送指令普通传送指令1)片内数据存储器传送指令()片内数据存储器传送指令(16条)条)(1)以)以A为目的操作数的指令(为目的操作数的指令(4条)条)MOV A,#data ;A data MOV A,direct ;A(direct)MOV A,Rn ;A(Rn)MOV A,Ri ;A(Ri)例例3.1 指令:指令:MOV A,#40H ;A 40H 立即寻址立即寻址 MOV A,40

12、H ;A(40H)直接寻址直接寻址 MOV A,R0 ;A(R0)寄存器寻址寄存器寻址 MOV A,R0 ;A(R0)寄存器间接寻址寄存器间接寻址(2)以)以Rn为目的操作数的指令(为目的操作数的指令(3条)条)MOV Rn,#data ;Rn dataMOV Rn,direct ;Rn(direct)MOV Rn,A ;Rn(A)例例3.2 指令:指令:MOV R2,#7AH ;R2 7AH 立即寻址立即寻址MOV R2,7AH ;R2(7AH)直接寻址直接寻址MOV R3,A ;R3(A)寄存器寻址寄存器寻址(3)以直接地址为目的操作数的指令()以直接地址为目的操作数的指令(5条)条)MO

13、V direct,#data ;directdataMOV direct,direct ;direct(direct)MOV direct,A ;direct(A)MOV direct,Rn ;direct(Rn)MOV direct,Ri ;direct(Ri)例例3.3.3 指令:指令:MOV 02H,#80H ;02H80H 立即寻址立即寻址MOV 0E0H,80H ;0E0H(80H)直接寻址直接寻址MOV P2,A ;P2(A)寄存器寻址寄存器寻址MOV 60H,R2 ;60H(R2)寄存器寻址寄存器寻址MOV 40H,R0 ;40H(R0)寄存器间接寻址寄存器间接寻址(4)以寄存器

14、间接寻址为目的操作数的指令()以寄存器间接寻址为目的操作数的指令(3条)条)MOV Ri,#data ;(;(Ri)dataMOV Ri,direct ;(;(Ri)(direct)MOV Ri,A ;(;(Ri)(A)例例3.3.4 指令:指令:MOV R0,#70H ;(;(R0)70H 立即寻址立即寻址MOV R0,70H ;(R0)(70H)直接寻址直接寻址MOV R1,A ;(R0)(A)寄存器寻址寄存器寻址(5)16位数据传送指令(位数据传送指令(1条)条)MOV DPTR,#data16 ;DPTRdata16例例3.3.5 指令:指令:MOV DPTR,#1234H ;(;(D

15、PH)12H,;(;(DPL)34H 立即寻址立即寻址2)片外数据存储器传送指令()片外数据存储器传送指令(4条)条)(1)使用)使用DPTR进行间接寻址进行间接寻址(2)使用)使用Ri进行间接寻址进行间接寻址MOVX A,DPTR ;A(DPTR)MOVX DPTR,A ;(;(DPTR)AMOVX A,Ri ;A(Ri)MOVX Ri,A ;(;(Ri)A 说明:说明:(1)MCS-51指令系统中没有专用的存储器读写指令,指令系统中没有专用的存储器读写指令,实际上外部数据存储器数据传送指令就是外部实际上外部数据存储器数据传送指令就是外部 RAM的读写指令的读写指令(2)外部)外部RAM数据

16、传送指令与内部数据传送指令与内部RAM数据传送指数据传送指 令相比,在指令助记符中增加了令相比,在指令助记符中增加了“X”,“X”是是代代 表外部之意表外部之意(3)外部)外部RAM的数据传送,只能通过累加器的数据传送,只能通过累加器A进行进行例例3.6 要求把外部要求把外部RAM 60H单元中的数据单元中的数据8BH传送到内部传送到内部 RAM 50H中,试编程。中,试编程。解法解法1:MOV R0,#60H ;(;(R0)=60H MOVX A,R0 ;(;(A)=8BH MOV 50H,A ;(;(50H)=8BH解法解法2:MOV DPTR,#0060H ;(;(DPTR)=0060H

17、 MOVX A,DPTR ;(;(A)=8BH MOV 50H,A ;(;(50H)=8BH3)程序存储器传送指令()程序存储器传送指令(2条)条)2条访问存储器的查表指令条访问存储器的查表指令 MOVC A,A+DPTR ;A(A)+(DPTR)MOVC A,A+PC ;A(A)+(PC)例例3.7 已知程序存储器中以已知程序存储器中以TAB为起点地址的空间存放着为起点地址的空间存放着09 的的ASCII码,累加器码,累加器A中存放着一个中存放着一个09之间的之间的BCD码码 数据。要求用查表的方法获得数据。要求用查表的方法获得A中数据的中数据的ASCII码。码。解法解法1:MOV DPTR

18、,#TAB MOVC A,A+DPTR RET TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H解法解法2:INC A MOVC A,A+PC RET TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39Hb3b2b1b0b6b5b40000010100111001011101110000000100100011010001010110011110001001101010111100110111101111NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSIDLEDC1DC2DC3DC

19、4NAKSYNETBCANEMSUBESCFSGSRSUSSP!“#$%&()*+-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWSYZ_abcdefghijklmnopqrstuvwsyz|DEL(1)整字节交换指令)整字节交换指令 源操作数与累加器源操作数与累加器A进行进行8位数据交换,共有位数据交换,共有3条指令:条指令:XCH A,Rn ;(;(A)(Rn)XCH A,direct ;(;(A)(direct)XCH A,Ri ;(;(A)(Ri)(2)半字节交换指令)半字节交换指令 源操作数与累加器源操作数与累加器A进行低进行低4位的半字节数据交换,位的

20、半字节数据交换,只有只有1条指令:条指令:XCHD A,Ri ;(;(A)30 (Ri)30(3)累加器高低半字节交换指令)累加器高低半字节交换指令 累加器累加器A的高低半个字节进行数据交换,只有的高低半个字节进行数据交换,只有1条指令:条指令:SWAP A ;(;(A)30 (A)742.数据交换指令(数据交换指令(5条)条)例例3.8 已知(已知(A)=12H,(,(R1)=30H,内部内部RAM(30H)=34H,分析指令执行结果。,分析指令执行结果。XCH A,30H ;(A)=34H,(,(30H)=12H XCH A,R1 ;(A)=12H,(,(30H)=34H XCHD A,R

21、1 ;(A)=14H,(,(30H)=32H SWAP A ;(A)=41H3.堆栈操作指令堆栈操作指令入栈操作的过程是:先将堆栈指针自动加入栈操作的过程是:先将堆栈指针自动加1,然后数据,然后数据压入堆栈。压入堆栈。出栈操作与此相反,先从堆栈中将数据弹出,送给出栈操作与此相反,先从堆栈中将数据弹出,送给direct单元,然后指针自动减单元,然后指针自动减1。无论是入栈操作还是出栈操作,其操作对象只能是用无论是入栈操作还是出栈操作,其操作对象只能是用direct形式表示的内部数据存储空间地址(形式表示的内部数据存储空间地址(00H7FH)或某个特殊功能寄存器。或某个特殊功能寄存器。汇汇 编编

22、格格 式式机机 器器 语语 言言 格格 式式操操 作作 功功 能能字节数字节数周期数周期数PUSH direct1100 0000directSP(SP)+1(SP)(direct)22POP direct1101 0000directdirect(SP)SP(SP)-122设某主程序和子程序设某主程序和子程序SUB1中均要用到累加器中均要用到累加器A及地址及地址指针指针DPTR,则在子程序中可以使用下列方式实现对,则在子程序中可以使用下列方式实现对现场数据的保护和恢复。现场数据的保护和恢复。PUSH ACC ;保护现场保护现场PUAH DPHPUSH DPL ;子程序若干指令子程序若干指令P

23、OP DPL ;恢复现场;恢复现场POP DPHPOP ACC例例3.9 设(设(20H)=55H,(,(30H)=66H,试利用堆栈作为缓冲,试利用堆栈作为缓冲 器,编制程序交换器,编制程序交换20H和和30H单元中的内容。单元中的内容。解:解:MOV SP,#60H ;令栈底地址为;令栈底地址为60H,即,即SP=60H PUSH 20H ;SP(SP)+1,SP=61H,(,(61H)55H PUSH 30H ;SP(SP)+1,SP=62H,(,(62H)66H POP 20H ;20H66H,SP(SP)1,SP=61H POP 30H ;30H55H,SP(SP)1,SP=60H

24、执行结果:执行结果:SP=60H,(,(20H)=66H,(,(50H)=55H。3.3.2 算术运算类指令(共算术运算类指令(共24条)条)1、加法指令、加法指令1)不带进位的加法指令)不带进位的加法指令ADD A,#data ;A(A)+dataADD A,direct ;A(A)+(direct)ADD A,Rn ;A(A)+(Rn)ADD A,Ri ;A(A)+(Ri)加法运算的结果会影响程序状态字寄存器加法运算的结果会影响程序状态字寄存器PSW,其中包括:,其中包括:如果运算结果的最高位第如果运算结果的最高位第7位有进位,位有进位,则进位标志则进位标志CY置置“1”,反之,反之,CY

25、清清“0”;如果运算结果的第如果运算结果的第3位有进位,位有进位,则辅助进位标志则辅助进位标志AC置置“1”,反之,反之,AC清清“0”;如果运算结果的第如果运算结果的第6位有进位而第位有进位而第7位没有进位或者位没有进位或者 第第7位有进位而第位有进位而第6位没有进位,位没有进位,则溢出标志则溢出标志OV置置“1”(即(即OV=C7 C6),反之,),反之,OV清清“0”;奇偶标志奇偶标志P随累加器随累加器A中中1的个数的奇偶性而变化。的个数的奇偶性而变化。例例3.10 已知(已知(A)=97H,(,(R0)=89H,执行指令:,执行指令:ADD A,R0解:解:1001 0111 +100

26、0 1001 10010 0000 运算结果:(运算结果:(A)=20H,CY=1,AC=1,OV=1,P=1。若若97H和和89H是两个无符号数,则结果是正确的;是两个无符号数,则结果是正确的;反之,若反之,若97H和和89H是两个带符号数(即负数),则由于有是两个带符号数(即负数),则由于有溢出而表明相加结果是错误的,因为两个负数相加结果不溢出而表明相加结果是错误的,因为两个负数相加结果不可能是正数。可能是正数。2)带进位的加法指令)带进位的加法指令 ADDC A,#data ;A(A)+data+(CY)ADDC A,direct ;A(A)+(direct)+(CY)ADDC A,Rn

27、 ;A(A)+(Rn)+(CY)ADDC A,Ri ;A(A)+(Ri)+(CY)例例3.11 已知当前(已知当前(CY)=1,(,(A)=97H,(,(R0)=89H,执行指令:执行指令:ADDC A,R0解:解:1001 0111 1000 1001 +1 10010 0001 运算结果:(运算结果:(A)=21H,CY=1,AC=1,OV=1,P=0。例例3.12 利用利用ADDC指令可以进行多字节加法运算。设双字节指令可以进行多字节加法运算。设双字节 加法运算中,被加数放在加法运算中,被加数放在20H、21H单元,加数放在单元,加数放在 30H、31H单元,和放在单元,和放在40H、4

28、1H,进位放在,进位放在42H单单 元。数据的低字节放在低地址单元中,试编程实现。元。数据的低字节放在低地址单元中,试编程实现。解:程序如下:解:程序如下:MOV A,20H ADD A,30H MOV 40H,A MOV A,21H ADDC A,31H MOV 41H,A MOV A,#00H ADDC A,#00H MOV 42H,A3)加)加1指令指令INC A ;A(A)+1INC Rn ;Rn(Rn)+1INC direct ;direct(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;DPTR(DPTR)+1加加1指令的操作不影响程序状态字指令的操作不

29、影响程序状态字PSW的状态的状态只有只有“INC A”指令可以影响奇偶标志位指令可以影响奇偶标志位P 例例3.13 已知:(已知:(A)=0FFH,(,(R3)=0FH,(,(30H)=0F0H,(R0)=40H,(,(40H)=00H,(,(DPTR)=1234H,执行如下指令:执行如下指令:INC A INC R3 INC 30H INC R0 INC DPTR其结果为:(其结果为:(A)=00H,(,(R3)=10H,(,(30H)=0F1H,(R0)=40H,(,(40H)=01H,(,(DPTR)=1235H,PSW中仅中仅P改变。改变。2减法指令减法指令1)带借位的减法指令)带借位

30、的减法指令SUBB A,#data ;A(A)data(CY)SUBB A,direct ;A(A)(direct)(CY)SUBB A,Rn ;A(A)(Rn)(CY)SUBB A,Ri ;A(A)(Ri)(CY)减法运算的结果会影响程序状态字寄存器减法运算的结果会影响程序状态字寄存器PSW,其中包括:,其中包括:如果运算结果的最高位第如果运算结果的最高位第7位有借位,则进位标志位有借位,则进位标志CY置置“1”,反之,反之,CY清清“0”;如果运算结果的第如果运算结果的第3位有借位,则辅助进位标志位有借位,则辅助进位标志AC置置“1”,反之,反之,AC清清“0”;如果运算结果的第如果运算结

31、果的第6位有借位而第位有借位而第7位没有借位或者第位没有借位或者第7位有位有 借位而第借位而第6位没有借位,则溢出标志位没有借位,则溢出标志OV置置“1”(即(即OV=C7 C6),反之,),反之,OV清清“0”;奇偶标志奇偶标志P随累加器随累加器A中中1的个数的奇偶性而变化。的个数的奇偶性而变化。例例3.14 已知(已知(A)=0C9H,(,(R2)=54H,(,(CY)=1。执行指令:执行指令:SUBB A,R2解:解:1100 1001 0101 0100 1 0111 0100运算结果:(运算结果:(A)=74H,CY=0,AC=0,OV=1,P=0。若若C9H和和54H是两个无符号数

32、,则结果是两个无符号数,则结果74H是正确的;是正确的;反之,若为两个带符号数,则由于有溢出而表明结果是错误的,反之,若为两个带符号数,则由于有溢出而表明结果是错误的,因为负数减正数其差不可能是正数。因为负数减正数其差不可能是正数。2)减)减1指令组指令组4条减条减1指令:指令:减减1操作不影响操作不影响PSW的状态的状态,只有只有DEC A影响奇偶标志位影响奇偶标志位P只有数据指针只有数据指针DPTR加加1指令,而没有指令,而没有DPTR减减1指令,指令,如果要在程序设计中进行如果要在程序设计中进行DPTR-1运算,只有通过编运算,只有通过编程完成程完成DEC A ;A(A)1DEC Rn

33、;Rn(Rn)1DEC direct ;direct(direct)1DEC Ri ;(Ri)(Ri)1例例3.3.15 假如(假如(A)=0FH,(,(R7)=19H,(,(30H)=00H,(R1)=40H,(,(40H)=0FFH,执行指令:,执行指令:DEC A DEC R7 DEC 30H DEC R1结果:(结果:(A)=0EH,(,(R7)=18H,(,(30H)=0FFH,(R1)=40H,(,(40H)=0FEH。PSW中仅中仅P改变。改变。3 乘法指令乘法指令MUL AB16位乘积的低位字节放在位乘积的低位字节放在A中,高位字节放在中,高位字节放在B中中乘法运算影响乘法运算

34、影响PSW的状态:的状态:进位标志进位标志CY总是被清总是被清“0”,溢出标志位状态与乘积有,溢出标志位状态与乘积有关关OV=1 表示乘积超过表示乘积超过255,即乘积分别在,即乘积分别在B与与A中中0 表示乘积只在表示乘积只在A中,即乘积小于中,即乘积小于0FFH (即即B的内容为的内容为0)例例3.3.16 已知(已知(A)=80H(即十进制数(即十进制数128),),(B)=40H(即十进制数(即十进制数64),),执行指令:执行指令:MUL AB 执行结果:乘积为执行结果:乘积为2000H(十进制数为(十进制数为8192),(A)=00H,(,(B)=20H,CY=0,OV=1。4 除

35、法指令除法指令DIV AB被除数:被除数:A 除数:除数:B指令执行后,商存于指令执行后,商存于A中,余数存于中,余数存于B中中除法运算影响除法运算影响PSW的状态:的状态:进位标志位进位标志位CY总是被清总是被清“0”,溢出标志位溢出标志位OV状态则反映除数情况状态则反映除数情况OV=1 当除数为当除数为0(B=0)时时0 其它情况其它情况例例3.17 已知(已知(A)=80H(即十进制数(即十进制数128),),(B)=40H(即十进制数(即十进制数64),),执行指令:执行指令:DIV AB执行结果:商为执行结果:商为02H,余数为余数为00H,(,(A)=02H,(,(B)=00H,C

36、Y=0,OV=0。5 十进制调整指令十进制调整指令用于对用于对BCD码十进制数加法运算的结果进行修正。码十进制数加法运算的结果进行修正。DA A十进制调整的修正方法:十进制调整的修正方法:(1)累加器低)累加器低4位大于位大于9或辅助进位位或辅助进位位(AC)=1,则进行则进行 低低4位加位加6修正修正A (A)+06H(2)累加器高)累加器高4位大于位大于9或进位标志位或进位标志位(CY)=1,则进行则进行 高高4位加位加6修正修正A (A)+60H(3)累加器高)累加器高4位为位为9、低、低4位大于位大于9,则进行,则进行 高高4位和低位和低4位分别加位分别加6修正修正A (A)+66H例

37、例3.18 试编写程序,实现试编写程序,实现93+59的加法运算,并分析执行过程。的加法运算,并分析执行过程。解:加法运算程序为:解:加法运算程序为:MOV A,#93H ADD A,#59H DA A程序执行的过程分析:程序执行的过程分析:1001 0011 +0101 1001 1110 1100 0110 0110 ;加;加66H调整调整 1 0101 0010最终结果为最终结果为1 0101 0010(152)是正确的)是正确的BCD码。码。3.3.3 逻辑运算及移位类指令(逻辑运算及移位类指令(24条)条)1、逻辑与运算指令组、逻辑与运算指令组ANL A,#data ;A(A)dat

38、aANL A,direct ;A(A)(direct)ANL A,Rn ;A(A)(Rn)ANL A,Ri ;A(A)(Ri)ANL direct,#data ;direct(direct)dataANL direct,A ;direct(direct)(A)例例3.19 已知(已知(A)=86H,试分析下面指令执行的结果:,试分析下面指令执行的结果:(1)ANL A,#0FFH;(2)ANL A,#0F0H;(3)ANL A,#0FH;(4)ANL A,#1AH;解:(解:(1)A=86H;(2)A=80H;(3)A=06H;(4)A=02H。由上例可知,逻辑与指令可用于将指定位清由上例可知

39、,逻辑与指令可用于将指定位清0,方法:将要清零的位与方法:将要清零的位与0相与,把要保留的位与相与,把要保留的位与1相与。相与。2、逻辑或运算指令组、逻辑或运算指令组ORL A,#data ;A(A)dataORL A,direct ;A(A)(direct)ORL A,Rn ;A(A)(Rn)ORL A,Ri ;A(A)(Ri)ORL direct,#data ;direct(direct)dataORL direct,A ;direct(direct)(A)例例3.20 已知(已知(A)=86H,试分析下面指令执行的结果:,试分析下面指令执行的结果:(1)ORL A,#0FFH;(2)OR

40、L A,#0F0H;(3)ORL A,#0FH;(4)ORL A,#1AH;解:(解:(1)A=0FFH;(2)A=0F6H;(3)A=8FH;(4)A=9EH。由上例可知,逻辑或指令可用于将指定位置由上例可知,逻辑或指令可用于将指定位置1,方法是将要置方法是将要置1的位与的位与1相或,把要保留的位与相或,把要保留的位与0相或。相或。3、逻辑异或运算指令组、逻辑异或运算指令组XRL A,#data ;A(A)dataXRL A,direct ;A(A)()(direct)XRL A,Rn ;A(A)()(Rn)XRL A,Ri ;A(A)()(Ri)XRL direct,#data ;dire

41、ct(direct)dataXRL direct,A ;direct(direct)()(A)例例3.3.20 已知(已知(A)=86H,试分析下面指令执行的结果:,试分析下面指令执行的结果:(1)XRL A,#0FFH;(2)XRL A,#0F0H;(3)XRL A,#0FH;(4)XRL A,#1AH;解:(解:(1)A=79H;(2)A=76H;(3)A=89H;(4)A=9CH。4、累加器清、累加器清“0”和取反指令组和取反指令组累加器清累加器清“0”指令:指令:CLR A ;A 0累加器取反指令:累加器取反指令:CPL A ;A (A)例例3.3.22 已知(已知(A)=86H,试分

42、析下面指令执行的结果:,试分析下面指令执行的结果:(1)CLR A(2)CPL A解:(解:(1)()(A)=00H;(2)()(A)=79H。MOV R0,A ;A的内容暂存的内容暂存R0ANL A,#0FH ;屏蔽屏蔽A的高的高4位(低位(低4位不变)位不变)ANL P1,#0F0H ;屏蔽屏蔽P1口的低口的低4位(高位(高4位不变)位不变)ORL P1,A ;实现低实现低4位传送位传送MOV A,R0 ;恢复恢复A的内容的内容例:当需要只改变字节数据的某几位,而其余位不变时,例:当需要只改变字节数据的某几位,而其余位不变时,不能使用直接传送方法,只能通过逻辑运算完成。不能使用直接传送方法

43、,只能通过逻辑运算完成。如将如将累加器累加器A的低的低4位传送到位传送到P1口的低口的低4位,位,但但P1口的高口的高4位需保持不变,则:位需保持不变,则:5、移位指令组、移位指令组(1)累加器循环左移)累加器循环左移RL A ;An+1An,A0A7(2)累加器循环右移)累加器循环右移RR A ;AnAn+1,A7A0(3)带进位循环左移)带进位循环左移RLC A ;An+1An,CYA7,A0CY(4)带进位循环右移)带进位循环右移RRC A ;AnAn+1,A7CY,CYA0例例3.3.23 若累加器若累加器A中的内容为中的内容为1000 1011B,CY=0,则执行,则执行 RLC A

44、指令后累加器指令后累加器A中的内容为中的内容为0001 0110,CY=1。RL A RL A 左环移左环移RRC A RRC A 带进位位带进位位右环移右环移RR A RR A 右右环移环移RLC A RLC A 带进位位带进位位左环移左环移1001 0110001 0110 11001 011011 0010 110 11100 101103.3.4 控制转移类指令控制转移类指令无条件转移指令无条件转移指令有条件转移指令有条件转移指令1、无条件转移指令组、无条件转移指令组不规定条件的程序转移称为无条件转移不规定条件的程序转移称为无条件转移(1)长转移指令)长转移指令LJMP addr16

45、;PC addr16转移范围:转移范围:64KB是三是三字节指令,依次是字节指令,依次是 操作码操作码 高高8位地址位地址 低低8位地址位地址例例3.23 在单片机系统中,假设用户程序存放在程序存储器在单片机系统中,假设用户程序存放在程序存储器 的的0100H开始的空间中,试编写程序使之在开机后开始的空间中,试编写程序使之在开机后 能自动转到能自动转到0100H处执行程序。处执行程序。解:开机后解:开机后PC被复位为被复位为0000H,为使开机后能自动执行用户,为使开机后能自动执行用户 程序,可在程序存储器空间的程序,可在程序存储器空间的0000H处存放一条无条件处存放一条无条件 转移指令,即

46、:转移指令,即:0000H LJMP 0100H 0100H (2)绝对转移指令)绝对转移指令AJMP addr11 ;PC(PC)+2,PC100addr11二字节指令,指令格式为:二字节指令,指令格式为:指令功能:构造程序转移目的地址,实现程序转移指令功能:构造程序转移目的地址,实现程序转移以以指令提供的指令提供的11位地址去替换位地址去替换PC的低的低11位内容,形成位内容,形成新的新的PC值,即转移的目的地址值,即转移的目的地址注意:注意:PC是下一条指令的是下一条指令的PC值,是本条指令地址加值,是本条指令地址加2 以后的以后的PC值值例例3.25 程序存储器程序存储器1000H地址

47、单元有绝对转移指令:地址单元有绝对转移指令:1000H AJMP 0750H分析该指令的执行情况。分析该指令的执行情况。解:指令解:指令AJMP 0750H执行前,执行前,(PC)=1000H,取出该指令后取出该指令后PC当前值为当前值为1002H,指令执行的过程是将指令,指令执行的过程是将指令 中的中的11位地址位地址111 0101 0000B送入送入PC的低的低11位,位,得新的得新的PC值为值为0001 0111 0101 0000B=1750H,所以指令所以指令AJMP 0750H执行的结果就是转移到执行的结果就是转移到1750H 处执行程序。处执行程序。3、短转移指令、短转移指令S

48、JMP rel目的地址目的地址PC(PC)2relrel:是是 一个带符号的一个带符号的8位二进制补码数,因此所能实现位二进制补码数,因此所能实现 的程序转移是双向的的程序转移是双向的例例3.26 在在1000H地址上有指令地址上有指令 1000H SJMP 30H 则目的地址为则目的地址为 1000H+02H+30H=1032H程序向前转移程序向前转移 如果指令为如果指令为 1000H SJMP 0E7H rel=0E7H,是负数,是负数19H的补码,的补码,目的地址目的地址=1000H+02H-19H=0FE9H。程序向后转移。程序向后转移。例例3.3.27 在在2000H地址上有指令地址

49、上有指令 2000H SJMP DEST 2013H DEST:DEST为目的地址的标号,为目的地址的标号,则相对地址则相对地址rel=2013H-(2000H+02H)=11H 在单片机程序设计时,通常用到一条在单片机程序设计时,通常用到一条SJMP指令:指令:SJMP$或或 HERE:SJMP HERE以以$代表代表PC的当前值的当前值(4)变址寻址转移指令)变址寻址转移指令目的地址(目的地址(A)()(DPTR)以以DPTR内容为基址,以内容为基址,以A的内容作变址的内容作变址因此只要把因此只要把DPTR的值固定,而给的值固定,而给A赋以不同的值,赋以不同的值,即可实现程序的多分支转移即

50、可实现程序的多分支转移JMP A+DPTR ;PC(A)+(DPTR)例例3.28 设累加器设累加器A中存放着待处理命令的编号(中存放着待处理命令的编号(0n;n85),),程序存储器中存放着标号为程序存储器中存放着标号为PGTAB的转移表,则执行的转移表,则执行 以下程序,将根据以下程序,将根据A内命令编号转向相应的命令处理程序。内命令编号转向相应的命令处理程序。PG:MOV B,#3 MUL AB ;A(A)*3 MOV DPTR,#PGTB ;DPTR转移表首址转移表首址 JMP A+DPTR PGTB:LJMP PG0 ;转向命令转向命令0处理入口处理入口 LJMP PG1 ;转向命令

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁