版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 MCS-51单片机指令系 统及汇编语言程序设计,内容提要:,3-1 指令编码格式及常用符号,3-2 MCS51单片机的寻址方式,3-3 数据传送类指令,3-4 算术运算类指令,3-5 逻辑运算类指令,3-6 控制转移类指令,3-7 位操作类指令,高级语言:,3-1指令编码格式及常用符号,一、汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合。 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。,汇编语言:,机器语言:,程序设计语言:,用二进制代码表示指令和数据。,用助记符表示指令操作功能,用标号表示操作对象。,独立于机器,
2、面向过程,接近自然语言和数学表达式.,汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。 指令:CPU按照人们的意图来完成某种操作的命令。 指令 = 操作码 + 操作数 操作码表示了该指令所能执行的操作功能。 操作数表示参加操作的数的本身或操作数所在的地址。 MCS-51指令格式:,标号:,操作码助记符,第一操作数,,第二操作数,;注释,MCS51指令格式,LOOP: MOV A , R0 ;将R0的内容送A 标号 操作码 第一操作数 第二操作数 注释 (目的操作数) (源操作数) 注:黑色的内容不是必须的 指令按其编码的长短分为: 单字节指令 双字节指令 三字节指令,
3、MCS-51单片机汇编程序书写格式范例,二、MCS-51系列单片机的指令系统 111条指令,共分五大类: 数据传送类;(29条) 算术运算类;(24条) 逻辑运算类;(24条) 控制转移类;(17条) 位操作类。(17条),指令中操作数的描述符号: Rn 工作寄存器R0 R7 Ri 间接寻址寄存器R0、R1 Direct 直接地址,包括内部128B RAM单元地址、 26个SFR地址。 #data 8位常数 #data 16 16位常数 addr 16 16位目的地址 addr 11 11位目的地址 rel 8位带符号的偏移地址 DPTR 16位外部数据指针寄存器 bit 可直接位寻址的位,A
4、 累加器 B 寄存器B C 进、借位标志位,或位累加器 间接寄存器或基址寄存器的前缀 / 指定位求反 (x) x中的内容 (x) x中的地址中的内容 当前指令存放的地址,3-2 MCS51单片机的寻址方式,寻址方式:寻找(或确定)操作数所在单元地址的方式。 寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。 说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。,MCS51系列单片机指令系统分类 按寻址方式分为以下七种:按功能分为以下五种: 1、立即寻址 1、数据传送指令位操 2、直接寻址 2、算术运算指令 3、寄存器寻址 3、逻辑运算指令 4、寄存器间接寻址指令 4
5、、控制转移类指令 5、相对寻址 5、位操作指令 6、变址寻址 7、位寻址,3.2.1 寄存器寻址 操作数存放在工作寄存器R0 R7中,或寄存器B中。 MOV A,R0 ; A(R0),3.2.2 直接寻址 指令中直接给出操作数的地址。 MOV A,20H ; A(20H) MOV 30H,DPH,;书放在甲抽屉中 ;甲抽屉的钥匙放在乙抽屉中 ;取书,,A中,20H,MOV 30H,#20H,MOV R0,#30H,MOV A,R0,此例中,20H就当成是那本书;30H就当成是甲抽屉; R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。期间也经历了两次寻址,即间接寻址。,3.2.3
6、寄存器间接寻址 指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“”表示前缀。 例如: “一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?” 这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。而寄存器间接寻址也是同样。 例如:,3.2.3 寄存器间接寻址,MOV 20H, #30H MOV RO, #20H A(R0) MOV A, R0 注:只有R0,R1, DPTR,SP可用于寄 存器间接寻址。,3.2.4、立即数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀 MOV A,#20H,3.2.5、变
7、址寻址 操作数地址 = 变地址 + 基地址 基地址寄存器 DPTR 或 PC 变址寄存器 A 该寻址方式只用于访问程序存储器,查表;所以该寻址方式只有读操作而无写操作。 如 MOVC A,A + DPTR,3.2.5 变址寻址 MOVC A,A + DPTR,3.2.6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。主要用于实现程序的分支转移。 例如 “李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如 JC 60H ;设(PC) = 2000H为基址,相对偏移量为60H; ;
8、则当C = 1时,转移的目的地址 = 2000H + 2 + 60H,3.2.6 相对寻址方式,3.2.7位寻址方式,采用位寻址的指令的操作数是某个字节中的一位。 片内RAM中有:20H-2FH和高128字节地址能被8整除的SFR的相应位可以位寻址。 MOV A.1, PSW.7 MOV A.0, 20H.O,操作数寻址方式及有关空间,3.3 数据传送类指令,数据传送类指令,数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。 源操作数可
9、采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。,3.3.1 以A为目的操作数,如:MOV A,R2 MOV A,30H MOV A,R0 MOV A,#36H,3.3.1 以累加器A为目的操作数的指令,MOV A, data ; A data MOV A, Rn ; n=07, A (Rn) MOV A, Ri ; i=0,1 , A (Ri) MOV A, direct ; A (Rn) direct为内部RAM或SFR地址 注: MOV A, Ri ; 以Ri的内容为地址 ,把该地址中 的内容送到A中去。A (Ri)
10、MOV A, R0 ; 将R0的内容送到A去。 A (R0) MOV A, #20H ; (A) = 20H A的内容为20H MOV A, 20H ; (A) = (20H) A的内容为20H中的内容 注意以上两组指令的不同点,例: MOV R0, #30H MOV 30H, #60H MOV A, R0 (A)=?,3.3.2 以Rn为目的操作数,MOV Rn,A;Rn A MOV Rn,direct;Rn (direct) MOV Rn,#data;Rn #data 如:MOV R0,A MOV R3,30H MOV R7,#36H MOV R1,#30 MOV R6,#01101100
11、B,3.3.3 以直接地址为目的操作数,MOV direct, A ;direct (A) MOV direct, Rn ; direct (Rn) , n=07 MOV direct, Ri ; direct ( Ri ) ) , i=0,1 MOV direct, direct ;direct (direct) MOV direct, #data ;direct data 如:MOV 30H,A MOV P1,R2 MOV 38H,60H MOV TL0,R1 MOV 58H,#36H,3.3.4 以间接地址为目的操作数,MOV Ri,A;(Ri) A MOV Ri,direct;(Ri)
12、 (direct) MOV Ri,#data;(Ri) #data 如:MOV R0,A MOV R1,36H MOV R0,SBUF MOV R1,#48 MOV R0,#0D6H 例如:设(30H)=6FH,R1=40H,执行 MOV R1,30H后,30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。,3.3.5 以DPTR为目的操作数,MOV DPTR,#data16 ;DPTR #data16 (唯一的16位数据传送指令。) MOV DPTR, #2010H 相当于:MOV DPH, #20H MOV DPL, #10H 例如执行 MOV DPTR,#2000H 后
13、, (DPTR)= 2000H。 如:MOV DPTR,#2368H MOV DPTR,#35326,MOV指令在片内RAM的允许操作图 不允许的操作有: RiRi RnRn RiRn,3.3.6 访问外部数据RAM,MOVX A,Ri ;((Ri))A,且使/RD=0 MOVX A, DPTR ;(DPTR)A,且使/RD=0 MOVX Ri,A ;(A) (Ri) ,且使/WR=0 MOVX DPTR , A ;(A) (DPTR) ,且使/WR=0 说明: 1、第2、4两条指令以DPTR为片外RAM16位地址指针,寻址范围为64KB空间; 2、第1、3两条指令以R0或R1作低8位地址指针
14、,由P0口送出,寻址范围为256B空间(P2口仍可作通用I/O口)。,例3、试编写一程序段,实现将外RAM 0FAH单元中的内容传送到外RAM 04FFH单元中。,解: MOV DPTR,#04FFH MOV R0,#0FAH MOVX A,R0 MOVX DPTR, A,3.3.7 读程序存储器,MOVC A,A+DPTR;A ((A)+(DPTR)) MOVC A,A+PC;A ((A)+(PC)) 执行后会使/PSEN有效。 MOVC 含义是传送常数。 以DPTR 为基地址的指令,可在ROM 的64KB范围内查表; 而以PC为基地址的指令只能在(PC)+ 1为中心上、下256B范围内查表
15、。 例如已知A=30H,DPTR=3000H, 程序存储器单元(3030H)=50H,执行MOVC A, A+DPTR后,A=50H。,例、设(A)= 一个BCD码常数,试用查表法获得其相应的ASCII码。,解法II: MOVC A,A+PC TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H ,解法I: MOV DPTR,#TAB MOVC A,.A+DPTR TAB:DB 30H DB 31H DB 32H,33H,34H,35H ,例 近程查表 设程序中的数据表格为: 1010H:02H 1011H:04H 1012H:06H 1013H:08H 执行程序
16、: 1000H:MOV A,#0DH 1002H:MOVC A,A+PC ;(0DH+1003H)A 1003H:MOV R0,A ;(A) R0 结果为:(A)=02H,(R0)=02H,(PC)=1004H,例 远程查表 设程序中的数据表格为: 执行程序: 1000H:MOV A,#10H 1002H:PUSH DPH 1004H:PUSH DPL 1006H:MOV DPTR,#7000H 1009H:MOVC A,A+DPTR ;(10H+7000H)A 100AH: POP DPL 100CH:POP DPH 结果为:(A)=02H ,(PC)=100EH,(DPTR)=原值,701
17、0H:02H 7011H:04H 7012H:06H 7013H:08H,数据传送类指令,ROM和片外数据RAM传送类指令,ROM数据传送指令图,片外RAM数据传送指令,3.3.8 数据交换,l字节交换 XCH A,Rn;A Rn XCH A ,direct;A(direct) XCH A,Ri;A(Ri) l半字节交换 XCHD A,Ri;A03(Ri)03 SWAP A;A03A47 不影响任何标志位。,半字节交换指令 二低半字节交换指令 XCHD A,Ri ;(A03)(Ri)03 ) 如:设(A)=36H,(R1)=65H,(65H)=42H XCHD A,R1 ;(A)=32H,(6
18、5H)=46H,累加器A高、低半字节交换指令 SWAP A ;(A03)(A47 ) 如:设(A)=36H SWAP A ;(A)=63H 例: (A)=80H, (R7)=97H 执行:XCH A , R7 结果:(A)=97H, (R7)=80H 例:将片内RAM 60H单元与61H单元的数据交换。 XCH 60H,61H 对吗?,数据传送类指令,片内RAM数据传送及交换类指令,3.3.9 堆栈操作,所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令: PUSH direct;SP(SP+1),(SP)(di
19、rect) POPdirect;(direct)(SP),SP SP-1 PUSH是进栈(或称为压入操作)指令。指令执行过程如图3-7所示。,图3-7 指令PUSH操作示意图,图3-8 指令POP操作示意图,PUSH 40H,POP 30H,(2) (direct),栈操作指令 PUSH direct POP direct 不影响任何标志位。 PUSH direct 指令执行中,机器自动进行两步操作: (1) (SP)+ 1,例1、设(SP) = 09H,(DPTR)= 0123H,分析: 执行 PUSH DPL PUSH DPH 后,各单元中的内容。,(SP),(SP),POP direct
20、 指令执行中,机器也自动进行两步操作: (1)(direct) (SP) (2)(SP) (SP) 1 例2、设(SP)= 0BH,(0BH)= 01H,(0AH)= 23H 执行 POP DPH POP DPL 后,各单元中的内容。,堆栈操作指令,进栈指令 PUSH direct 如: (SP)=60H, (A)=30H ,(B)=70H 时,执行 PUSH Acc ;(SP)+1=61HSP, (A) 61H PUSH B ;(SP)+1=62HSP, (B) 62H 结果: (61H)=30H, (62H)=70H, (SP)=62H 退栈指令 POP direct 如: (SP)=62
21、H, (62H)=70H ,(61H)=30H 时,执行 POP DPH ;(SP) DPH, (SP)1=61HSP POP DPHL ;(SP) DPL, (SP)1=60HSP 结果: (DPTR)=7030H, (SP)=60H 堆栈的存储原则:先进后出,数据传送类指令,关于堆栈,结论:1)PUSH 与 POP 操作过程刚好相反; 2)进、出栈规则: 先进后出,后进先出。应注意指令书写先后顺序; 3)可用于“保护现场,恢复现场”。,【例3.1】 将片内RAM 30H单元与40H单元中的内容互换。,方法1(直接地址传送法): MOV31H,30H MOV30H,40H MOV40H,31
22、H SJMP$,方法2(间接地址传送法): MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$,方法3(字节交换传送法): MOVA,30H XCHA,40H MOV30H,A SJMP$,方法4(堆栈传送法): PUSH30H PUSH40H POP30H POP40H SJMP$,上述指令不影响任何标志位,但PSW的P位除外。 注意:MOV Rn,Rn MOV Ri, Ri MOV Rn, Ri MOV #data, A 等等指令是非法指令。,哇!好容易出错啊!,应用举例1,MOV P1, #0FEH ; 11111110
23、B 可以使P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,8段数码管显示,MOV P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1, #88H ; 显示 A,应用举例2,一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。,3.4 算术运算类指令,包括加、减、乘、除运算;第一操作数一般为A;一般影响标志位CY、AC、OV和P。 共24条指令,分成七个小类。 3.4.1 加法指令 一、不带进位加法指令(4条) ADD A,Rn ;(A)+(Rn)A ADD
24、 A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A ADD A,#data ;(A)+#dataA 无符号数相加时:若C = 1,说明有溢出(其值 255)。 带符号数相加时:若OV = D7cD6c = 1,说明有溢出。,例:(A)=0C3H,(R0)=0AAH 执行“ADD A,R0”的和为6DH,标志位CY=1,OV=1,AC=1。 OV=C7 C6 对第6、第7位的进位位C7、C6异或。,二、带进位加法指令(4条) ADDC A,Rn ;(A)+(Rn)+(C)A ADDC A,direct ;(A)+(direct)+(C)A ADDC A,Ri
25、 ;(A)+(Ri) +(C) A ADDC A,#data ;(A)+#data +C A 上述四条指令多用于多字节数相加。 例如,设A=20H,R0=21H,C=1,执行指令 ADDC,R0 后,A=42H。,三、加1指令(5条),INC A ;(A)+1 A INC Rn ;(Rn)+1 Rn INC direct ;(direct)+1 direct INC Ri ;(Ri)+1 (Ri) INC DPTR ;(DPTR)+1 DPTR 说明:此类指令不影响标志C、AC和OV,INC A ;(A) (A)+1 ; INC Rn INC direct INC Ri INC DPTR,例1
26、、设(R0)= 7FH; (7EH)= 40H 执行:INC R0 INC R0 INC R0 后,(R0)= 7FH;,(7EH)= 00H;,(7FH)= 41H,四、 DA A ;调整累加器内容为BCD码(压缩的) 说明: (1)此指令跟在ADD或ADDC指令之后,将A中的和调整为BCD码,并且ADD或ADDC的两个操作数是BCD码; (2)对标志的影响:若结果A99,则CY=1;不影响OV。,选择修正值的规则:,执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二十进制调整。,例2、
27、设(A) = 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1 执行 ADDC A,R3 DA A 结果为:124 注意:1)DA指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是BCD码数; 3)DA指令不能与减法指令配对使用,但可以实现对A中 压缩BCD数进行减一操作。 例3、设(A)=30H(压缩BCD码数),执行: ADD A,#99H DA A 后,便实现了30 1 = 29的操作。,例:A=65BCD,B=78BCD,C=0,执行下列语句 ADDA,B DAA 后,A=43 BCD,C=1。,例4、两个4位BCD码相加,一个存放在(31H)(30H);另一
28、个存放在(33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。 解: MOV R0,#30H MOV R1,#32H MOV A,R0 ADD A,R1 DA A MOV R0,A,INC R1 MOV A,R0 ADDC A,R1 DA A MOV R0,A,INC R0,3.4.2 减法指令 一、带借位减法指令(4条) SUBB A,Rn ;(A)- (C) -(Rn)A SUBB A,direct ;(A)- (C) -(direct)A SUBB A,Ri ;(A)- (C) -(Ri) A SUBB A,#data ;(A)- (C) - #data A 注意:减法
29、之前先清零C。 二、减1指令(4条) DEC A ;(A)-1 A DEC Rn ;(Rn)-1 Rn DEC direct ;(direct)-1 direct DEC Ri ;(Ri)-1 (Ri) 说明:此类指令不影响标志CY、AC和OV,例:设A=39H,R0=20H,(20H)=32H,C=1,执行指令 SUBB,R0后,A=06H 例:设(R0)=7FH,在内RAM中,(7EH)=00H, (7FH)=40H 执行: DEC R0 DEC R0 DEC R0 结果为 :(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。,3.4.3 乘法指令 乘法: MUL AB ;(A
30、)(B),积的低8位在A中,积的 ; 高8位在B中; C总为0。 说明:(1)为无符号乘法; (2)若结果的B0,则OV=1,若B=0,则OV=0;C=0。 例如,A=30H,B=60H,执行 MUL AB 后,A=00H,B=12H。,3.4.4 除法指令 DIV AB ;(A)(B),商在A中,余数在B中。 说明:(1)为无符号除法; (2)若除数B=0,则OV=1,若B 0,则OV=0;C=0。 例如,A=30H,B=07H,执行 DIV AB 后,A=06H,B=06H。,算术运算类指令,例、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单元,十位数和个位数压缩后存于3
31、0H单元中。,解: MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV 30H,A,【例】 试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。 解:参考程序如下: MOVA,R2;取第一个数的低8位 ADDA,R4;两数的低8位相加 MOVR6,A;保存和的低8位 MOVA,R1;取第一个数的高8位 ADDCA,R3;两数的高8位相加,并把低8位相加时的进位位加进来 MOVR5,A;把相加的高8位存入R5寄存器中 SJMP $,3.5 逻辑运算与循环类指令包括与、或、异或、清除、求反
32、、移位等操作。这类指令一般不影响标志位CY、AC和OV。共24条指令。,3.5.1 逻辑“与”指令(6条) ANL A,Rn ;(A) (Rn)A ANL A,direct ;(A) (direct)A ANL A,Ri ;(A) (Ri)A ANL A,#data ;(A) #data A ANL direct,A ;( direct ) (A)direct ANL direct,#data ;( direct ) #data direct 说明: (1)目的操作数只能是A或者direct; (2)前4条指令仅影响标志位P;后两条不影响标志位。 (3)或运算常用于使某些位置1。, “与” ,
33、 “有0即0,全1为1” 0000 0111 )1111 1101 0000 0101 B 05H 例、(P1)= 35H,使其高4位输出0,低4位不变。 解; ANL P1,#0FH 此做法称为“屏蔽”位。,3.5.2 逻辑“或”指令(6条) ORL A,Rn ;(A)(Rn)A ORL A,direct ;(A)(direct)A ORL A,Ri ;(A)(Ri)A ORL A,#data ;(A) #data A ORL direct,A ;( direct )(A)direct ORL direct,#data ;( direct ) #data direct 说明: (1)目的操作
34、数只能是A或者direct; (2)前4条指令仅影响标志位P;后两条不影响标志位。 (3)或运算常用于使某些位置1。, “或” , “有1即1,全0为0” 0000 0110 )0110 1101 0110 1111 B 6FH 例、将A中的低3位送入P1中,并且保持P1中高5位不变。 ANL A,#07H ANL P1,#0F8H ORL P1,A ;(P1)= P17P16P15P14P13A2A1A0 这称为“数位组合”。,3.5.3 逻辑“异或”指令(6条) XRL A,Rn ;(A)(Rn)A XRL A,direct ;(A)(direct)A XRL A,Ri ;(A)(Ri)A
35、 XRL A,#data ;(A) #data A XRL direct,A ;( direct )(A)direct XRL direct,#data ;( direct ) #data direct 说明: (1)目的操作数只能是A或者direct; (2)前4条指令仅影响标志位P;后两条不影响标志位。 (3)用1异或使对应位取反,用0异或使对应位不变,异或运算常用于使某些位取反。, “异或” , “相异为1,相同为0” 0000 0110 )0110 1101 0110 1011 B 6BH 例3、设(P1)= 0B4H = 10110100B,执行: XRL P1,#00110001B
36、 结果按# 0 0 1 1 0 0 0 1 取反,即: (P1)= 1 0 0 0 0 1 0 1 B = 85H 这称为“指定位取反”。,逻辑操作类指令操作图,例 ( A)=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何? XRL A,#0C0H;将累加器A的内容D7、D6取反 0 1 ORL A,#03H;将累加器A的内容D1、D0置1 1 1 0 1 0 0 0 0 ANL A,#0E7H;将累加器A的内容D4、D3清0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 解 :执行上述指令后,(A)=1000
37、11B。,习题1:如何将累加器A中的数据高4位清0,低位不变? 习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?,3.5.4 累加器A清0与取反指令(2条) 1、累加器A清 0 指令 CLR A ;0 A 说明:只影响标志位P。 2、累加器A取反指令(按位取反) CPL A ;(/A) A,相当于0FFH - A A 说明:不影响标志位。 如: (A)=56H CPL A ;结果为0A9H,3.5.5 移位指令(4条) 1、累加器A循环左移 RL A ; 2、累加器A循环右移 RR A ; 3、累加器A带进位位循环左移 RLC A ; 4、累加器A带进位位循环右移 RRC A ; 说明
38、: (1)各条指令每次只移动一位; (2)左移一位相当于乘以2;右移一位相当于除以2; (3)带进位位移动的影响标志位CY和P。,例 (A)6CH = 0110 1100B RL A; (A)=1101 1000B=0D8H (A)6CH = 0110 1100B, (C) =1 RLC A; (A)=1101 1001B=0D9H 例(A)6CH = 0110 1100B RR A; (A)=0011 0110B=36H (A)6CH = 0110 1100B, (C) =1 RRC A; (A)=1011 0110B=0B6H,逻辑运算类指令图解,在上述ANL、ORL、XRL操作中,用于端
39、口操作时,无论P0 P3是第一,还是第二操作数,都遵循“读修改写”端口锁存器的操作。,3.6 控制转移类指令,作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令; 返回指令。 共17条。 只有比较转移指令影响标志。,3.6.1 无条件转移指令(4条) 1、短转移(绝对转移)指令 AJMP addr11 ;先(PC)+2PC ;addr11PC100 ,(PC1511)不变 说明:(1)该指令执行前PC值为下一条指令的首地址; (2)转移范围:含有下一条指令首地址的同一个2KB范围,即高5位地址相同; (3)本指令有8种操作码。 如:AJMP
40、 FIRST,(PC),短转移,2、长转移指令 LJMP addr16 ;addr16PC 说明:转移范围: 64KB全程序空间任何单元。 如:LJMP NEXT,(PC),长转移,3、相对转移(短转移)指令 SJMP rel ;先(PC)+2PC,后(PC)+relPC 说明:(1)该指令执行前PC值为下一条指令的首地址; (2)转移范围:-128+127;对应rel值为:00H7FH(0+127)、80HFFH(-128-1); 如:SJMP FIRST 原地踏步指令的指令: SJMP $ ;无限循环执行本指令,rel=FEH WEIT: SJMP WEIT ;与上条指令相同,256B,0
41、,相对转移指令(正跳转),相对转移指令(负跳转),4、间接转移指令 JMP A+DPTR ;(A)+(DPTR)PC 说明:(1)具有多分枝转移功能,即散转功能,又叫散转指令; (2)转移范围:是以DPTR为首地址的256B。 例3-11 根据累加器A中的命令键键值,设计命令键操作程序入口跳转表。,CLR C RLC A MOV DPTR,#JPTAB JMP A+DPTR JPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2 :,间接转移指令,例、设A中为键值,试编写按键值处理相应事件的程序段。,解: MOV DPTR,#KYEG MOV B,#03H MUL AB JM
42、P A + DPTR KYEG: LJMP KYEG0 LJMP KYEG ,3.6.2 条件转移指令(8条) 均为相对寻址方式。 1、累加器A为零(非零)转移指令 JZ rel ;当A=0时,(PC)+rel(PC)转移; ;当A0时,顺序执行。 JNZ rel ;当A0时, (PC)+rel(PC)转移; ;当A=0时,顺序执行。,条件转移类指令 (判零转移指令 ),例、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。,解: MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1: MOVX A,
43、DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2: SJMP LOOP2,2、比较转移指令 4条,均为三字节指令。一般形式为: CJNE (目的操作数),(源操作数),rel CJNE A,direct,rel ;若A (direct) ,则(PC)+relPC,且0CY; ;若A #data ,则(PC)+relPC,且0CY; ;若A #data ,则(PC)+relPC,且1CY; ;若A = #data ,则顺序执行,且0CY。,CJNE Rn,#data,rel ;若(Rn) #data ,则(PC)+relPC,且0CY
44、; ;若(Rn) #data ,则(PC)+relPC,且0CY; ;若(Ri) #data ,则(PC)+relPC,且1CY; ;若(Ri) =#data ,则顺序执行,且0CY。,说明: (1)PC值为下一条指令第一个字节的地址,为本条 指令PC值加3,即(PC)+3(PC); (2)CY,实际是A-(direct)操作的借位值送CY; CY可以作为进一步操作的依据。 如:CJNE A,38H,FIRST CJNE A,#56H,SECOND CJNE R2,#32,THIRD CJNE R1,#48H,FOURTH,条件转移类指令 (比较转移指令 ),例、设P1口的P1.0 P1.3为
45、准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。,解: WAIT: MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 P1.3不为全1 时,返 回WAIT MOV A,R2 ,3、循环转移指令 DJNZ Rn,rel ;(Rn)-1Rn; ;若(Rn)0, 则(PC)+rel PC ; ;若(Rn) = 0, 则结束循环, 顺序执行 DJNZ direct,rel ;( direct )-1 direct ; ;若(direct)0,则(PC)+rel PC ; ;若(direct) = 0,则结束循环, 顺序执
46、行 说明: (1)PC的含义同上; (2) Rn、direct相当于控制循 环的计数器。,条件转移类指令 (减1非零转移指令 ),例、将8031内部RAM的40H 4FH单元置初值#A0H #AFH。,解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP: MOV R0,A INC R0 INC A DJNZ R2,LOOP ,比较LJMP、AJMP、SJMP、JMP转移的起点和范围:,条件转移指令图解,LCALL addr16 ;长调用 ACALL addr11 ;绝对调用,LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程:
47、 (PC) (PC) + 3 (SP) (SP)+ 1 (SP) (PC7 0), 保护断点地址低字节; (SP) (SP)+ 2 (SP) (PC15 8),保存断点地址高字节; (PC) addr16 ,目的地址送PC,转子程序。,3.6.3 调用指令,执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H, (PC)= 3456H,例 设(SP)=5FH,符号地址“SUBRTN”指向5678H,执行指令 0123H LCALL SUBRTN 0126H . 结果: 26H60H,(SP)+1SP,26H (SP) 01H61H,(SP)+1SP,01H (SP) 567
48、8H PC,转去执行“SUBRTN”子程序,转移范围与(PC)+ 2在同一个2KB内。不影响任何标志位,执行中机器自动完成下列过程: (PC) (PC)+ 2 (SP) (SP)+ 1 (SP) (PC7 0) (SP) (SP)+ 2 (SP) (PC15 8) (PC10 0) addr10 0,ACALL addr11 :,3.6.4 返回指令 从子程序返回主程序。 RET ;调用子程序返回; RETI ;中断子程序返回。,(PC15 8) (SP) (SP) 1 (PC7 0) (SP) (SP) (SP) 2,其机器自动操作过程如下:,比较两种返回指令含义上的异同点 结论:RET返回
49、地址事先已知,而RETI的返回地址在程序执行中产生的,不固定。不影响标志位,但PSW不能恢复到中断前的状态。,(SP),子程序调用与返回指令,3.6.5 空操作指令 NOP ;空操作 这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延迟。,地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址 0000 20 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 0030 C3 MAIN: CLR C ; MAIN为程序标号 0031 E6 LOOP: MOV A , R0 0032 37 ADDC A, R1 0033 08 INC R0 0034 DA FB DJNZ R1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 30208-2013航空航天液压、气动系统和组件图形符号》
- 深度解析(2026)《GBT 30103.3-2013冷库热工性能试验方法 第3部分:围护结构热流量检测》
- 深度解析(2026)《GBT 30060-2013 石油天然气输送管件用钢板》
- DB2104∕T 0013-2022 中华蜜蜂越夏技术管理规范
- 《GBT 3260.9-2013锡化学分析方法 第9部分:硫量的测定 高频感应炉燃烧红外吸收法》(2026年)合规红线与避坑实操手册
- 《FZT 90089.1-2021纺织机械铭牌 第1部分:型式、尺寸及技术要求》(2026年)合规红线与避坑实操手册
- 2026年室内儿童教育服务协议
- 贵州省铜仁市2025年中考一模英语试题(含答案)
- 某省市场与金融机构第9章商业银行运营
- 维生素D在辅助生殖助孕中的作用总结2026
- 2026中国芳纶纤维行业需求预测及发展前景趋势分析报告
- 2025护理学副高职称考试题库及答案
- (二模)河南五市2026年高三毕业年级第二次质量检测政治试卷(含答案及解析)
- 2026年天津市河东区中考一模道德与法治试卷和答案
- 九师联盟2026届高三下学期4月学业评估数学+答案
- 2026年天津市专业技术人员继续教育公需课答案
- 2026四川宜宾市公安局高新技术园区分局招聘警务辅助人员7人笔试模拟试题及答案解析
- SHS 01043-2019屏蔽泵维护检修规程
- 深度解析(2026)《YBT 6034-2022冶金轧机轴承座修复技术规范》
- 2025年江苏交控招聘笔试真题及答案
- 耳鼻喉科门诊工作制度及诊疗操作规范
评论
0/150
提交评论