MCS-51单片机的汇编语言指令系统课件_第1页
MCS-51单片机的汇编语言指令系统课件_第2页
MCS-51单片机的汇编语言指令系统课件_第3页
MCS-51单片机的汇编语言指令系统课件_第4页
MCS-51单片机的汇编语言指令系统课件_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 MCS-51单片机的汇编语言指令系统3.1 指令格式及其符号说明单片机汇编语言:助记符语言单片机的指令:是CPU用于控制功能部件完成某一 指定动作的指示和命令 指令系统:单片机全部指令的集合111条指令,实现51种基本操作3.1.1 指令格式指令格式:指令的表示方法两部分操作码:用来规定指令进行什么操作操作数:指令操作的对象汇编语言指令格式标号: 操作码助记符 目的操作数 ,源操作数 :注释指令的符号地址 确定指令进行何种操作 指令操作的对象 指令操作的对象对指令功能的说明 注意:注释编写的时候要注意一定要以分号“;”开始。3.1.1 常用符号说明1、单字节指令指令的指令代码只有一个字

2、节,操作码和操作数信息同在其中。如: INC DPTR1010 0011MOV A,Rn1110 1rrr一字节指令49条3.1.3 指令的字节 无操作数含有操作数2、双字节指令包括二个字节,其中第一个字节为操作码, 第二个字节为操作数如:MOV A,#data指令代码:0111 0100 立即数双字节指令共45条3、三字节指令三字节指令中,操作码占一个字节 操作数占两个字节操作数既可能是数据,也可能是地址如: ANL direct , #data 0101 0011 直接地址 立即数三字节指令共17条3.2 单片机寻址方式寻址:就是如何得到操作数的所在单元的地址3.2.1 立即寻址方式操作数

3、在指令中直接给出,出现在指令中的操作数称为立即数如;MOV A,#data MOV A, #3AHMOV DPTR , #data163.2.2 直接寻址方式操作数直接以单元地址的形式给出如:MOV A,3AH寻址范围:(1)内部RAM低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 寄存器间接寻址方式寄存器中存放的是操作数的地址,即操作数是

4、通过寄存器间接得到的如: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假定指令执行前(A)=02H,(DPTR)=0100H则操作数地址为0100H+02H=0102H假定指令执行前(A)=02H,(DPTR)=0100H则操作数地址为0100H+02H

5、=0102H故指令执行的结果是A的内容为38HROM寻址方式说明:(1)只能对程序存储器进行寻址,寻址范围64KB(2)变址寻址的指令只有3条: MOVC A,A+DPTR MOVC A, A+PC JMP A+DPTR(3)变址寻址的指令都是一字节指令3.2.6 相对寻址方式为解决程序转移而专门设置的,为转移指令所采用目的地址=转移指令地址+转移指令字节数+ rel偏移量rel是一个带符号的8位二进制补码数,表示的数的范围是:-128+1273.2.7 位寻址方式位处理功能,可以对数据位进行操作如:MOV C,3AH把3AH位的状态送进位位C寻址范围:(1)内部RAM中的位寻址区 单元地址为

6、20H2FH,共16个单元128位,位地址 是00H7FH(2)专用寄存器的可寻址位 可供寻址的专用寄存器共有11个,实有寻址位83位寻址位在指令中的4种表示方法:(1)直接使用位地址。例如PSW寄存器位5地址为0D5H(2)位名称表示方法。例如PSW寄存器位5是F0标志位 用F0表示(3)单元地址加位数的表示方法。例如,0D0H单元(即PSW 寄存器)位5,为0D0H.5(4)专用寄存器符号加位数的表示方法。例如PSW寄存器 的位5,表示为PSW.53.3 MCS-51单片机指令系统指令111条,分为五大类:数据传送类指令(29)条算术运算类指令(24条)逻辑运算及移位类指令(24条)控制转

7、移类指令(17条)位操作类指令(17条)3.3.1 数据传送类指令(29条)MOV ,源操作数:累加器A、通用寄存器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 , 40H ;A(4

8、0H) 直接寻址 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条) MOV direct , #data ;directdataMOV direct , direct

9、;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)以寄存器间接寻址为目的操作数的指令(3条) MOV Ri , #data ;(Ri)dataMOV Ri , d

10、irect ;(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 ;(DPH)12H , ;(DPL)34H 立即寻址2)片外数据存储器传送指令(4条) (1)使用DPTR进行间接寻址(2)使用Ri进行间接寻址MOVX A , DPTR ;A(DPTR)

11、MOVX DPTR , A ;(DPTR)AMOVX A , Ri ;A(Ri) MOVX Ri ,A ;(Ri)A 说明:(1)MCS-51指令系统中没有专用的存储器读写指令, 实际上外部数据存储器数据传送指令就是外部 RAM的读写指令(2)外部RAM数据传送指令与内部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

12、 , A ;(50H)=8BH解法2:MOV DPTR , #0060H ;(DPTR)=0060H 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 , #TAB MOVC A , A+DPTR RE

13、T 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,39Hb3b2b1b0b6b5b40000010100111001011101110000000100100011010001010110011110001001101010111100110111101111NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSIDLEDC1DC2DC3DC4NAKSYNETBCANEMSUBE

14、SCFSGSRSUSSP!“#$%&()*+-./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位的半字节数据交换, 只有1条指令: XCHD A , Ri ;(A)30 (Ri)30(3)累加器高低半字节交换指令 累加器A的高低半个字节进行数

15、据交换,只有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 , R1 ; (A)=14H,(30H)=32H SWAP A ; (A)=41H3. 堆栈操作指令入栈操作的过程是:先将堆栈指针自动加1,然后数据压入堆栈。出栈操作与此相反,先从堆栈中将数据弹出,送给direct单元,然后指针自动减1。无论是入栈操作还是出栈操作,其操作

16、对象只能是用direct形式表示的内部数据存储空间地址(00H7FH)或某个特殊功能寄存器。汇 编 格 式机 器 语 言 格 式操 作 功 能字节数周期数PUSH direct1100 0000directSP(SP)+1(SP)(direct)22POP direct1101 0000directdirect(SP)SP(SP)-122设某主程序和子程序SUB1中均要用到累加器A及地址指针DPTR,则在子程序中可以使用下列方式实现对现场数据的保护和恢复。PUSH ACC ;保护现场PUAH DPHPUSH DPL ;子程序若干指令POP DPL ;恢复现场POP DPHPOP ACC例3.9

17、 设(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 执行结果:SP=60H,(20H)=66H,(50H)=55H。3.3.2 算术运算类指令(共24条)1、加法指令1)不带进位的加法指令ADD A , #d

18、ata ;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清“0”; 如果运算结果的第3位有进位, 则辅助进位标志AC置“1”,反之,AC清“0”; 如果运算结果的第6位有进位而第7位没有进位或者 第7位有进位而第6位没有进位, 则溢出标志OV置“1”(即OV=C7C6),反之,OV清“0”; 奇偶标志P随累加器A中1的个数的奇偶性而变化。例3.10 已知(A

19、)=97H,(R0)=89H,执行指令: ADD A , R0解: 1001 0111 + 1000 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 ;A(A)+(Rn)+(CY)ADDC A , Ri ;A(

20、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、41H,进位放在42H单 元。数据的低字节放在低地址单元中,试编程实现。解:程序如下: MOV A , 20H ADD A , 30H MOV 40H , A MOV A , 21H

21、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指令的操作不影响程序状态字PSW的状态只有“INC A”指令可以影响奇偶标志位P 例3.13 已知:(A)=0FFH,(R3)=0FH,(30H)=0F0H, (R0)=40H,(40H)=00H,(DPTR)=1234H, 执行如下指令: INC A I

22、NC R3 INC 30H INC R0 INC DPTR其结果为:(A)=00H,(R3)=10H,(30H)=0F1H, (R0)=40H,(40H)=01H,(DPTR)=1235H, PSW中仅P改变。2减法指令1)带借位的减法指令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”;

23、如果运算结果的第3位有借位,则辅助进位标志AC置“1”, 反之,AC清“0”; 如果运算结果的第6位有借位而第7位没有借位或者第7位有 借位而第6位没有借位,则溢出标志OV置“1” (即OV=C7C6),反之,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是两个无符号数,则结果74H是正确的;反之,若为两个带符号数,则由于有溢出而表

24、明结果是错误的,因为负数减正数其差不可能是正数。2)减1指令组4条减1指令:减1操作不影响PSW的状态,只有DEC A影响奇偶标志位P只有数据指针DPTR加1指令,而没有DPTR减1指令,如果要在程序设计中进行DPTR-1运算,只有通过编程完成DEC A ; A(A)1DEC Rn ; 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,(R

25、7)=18H,(30H)=0FFH, (R1)=40H,(40H)=0FEH。PSW中仅P改变。3 乘法指令MUL AB16位乘积的低位字节放在A中,高位字节放在B中乘法运算影响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 除法指令DIV A

26、B被除数: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, CY=0,OV=0。5 十进制调整指令用于对BCD码十进制数加法运算的结果进行修正。DA A十进制调整的修正方法:(1)累加器低4位大于9或辅助进位位(AC)=1,则进行 低4位加6修正A (A)+06H(2)累加器高4位大

27、于9或进位标志位(CY)=1,则进行 高4位加6修正A (A)+60H(3)累加器高4位为9、低4位大于9,则进行 高4位和低4位分别加6修正A (A)+66H例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

28、 ; A(A) dataANL 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。由上例可知,逻

29、辑与指令可用于将指定位清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)ORL A , #0F0H;(3)ORL A , #0FH;(

30、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 ; direct(direct) dataXRL direct , A ; direct(direct)(A)例3.3.20 已知(A)=8

31、6H,试分析下面指令执行的结果:(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,试分析下面指令执行的结果:(1)CLR A(2)CPL A解:(1)(A)=00H; (2)(A)=79H。MOV R0, A ;A的内容暂存R0ANL A, #0FH ;屏蔽A的高4位(低4位不变)AN

32、L P1, #0F0H ;屏蔽P1口的低4位(高4位不变)ORL P1, A ;实现低4位传送MOV A, R0 ;恢复A的内容例:当需要只改变字节数据的某几位,而其余位不变时, 不能使用直接传送方法,只能通过逻辑运算完成。如将累加器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

33、1011B,CY=0,则执行 RLC A指令后累加器A中的内容为0001 0110,CY=1。RL A 左环移RRC A 带进位位右环移RR A 右环移RLC A 带进位位左环移1001 0110001 011011001 011011 0010 11011100 101103.3.4 控制转移类指令无条件转移指令有条件转移指令1、无条件转移指令组不规定条件的程序转移称为无条件转移(1)长转移指令LJMP addr16 ; PC addr16转移范围:64KB是三字节指令,依次是 操作码 高8位地址 低8位地址例3.23 在单片机系统中,假设用户程序存放在程序存储器 的0100H开始的空间中,

34、试编写程序使之在开机后 能自动转到0100H处执行程序。解:开机后PC被复位为0000H,为使开机后能自动执行用户 程序,可在程序存储器空间的0000H处存放一条无条件 转移指令,即: 0000H LJMP 0100H 0100H (2)绝对转移指令AJMP addr11 ;PC(PC)+2,PC100addr11二字节指令,指令格式为:指令功能:构造程序转移目的地址,实现程序转移以指令提供的11位地址去替换PC的低11位内容,形成新的PC值,即转移的目的地址注意:PC是下一条指令的PC值,是本条指令地址加2 以后的PC值例3.25 程序存储器1000H地址单元有绝对转移指令: 1000H A

35、JMP 0750H分析该指令的执行情况。解:指令AJMP 0750H执行前, (PC)=1000H, 取出该指令后PC当前值为1002H,指令执行的过程是将指令 中的11位地址111 0101 0000B送入PC的低11位, 得新的PC值为0001 0111 0101 0000B=1750H, 所以指令AJMP 0750H执行的结果就是转移到1750H 处执行程序。3、短转移指令SJMP rel目的地址PC(PC)2relrel: 是 一个带符号的8位二进制补码数,因此所能实现 的程序转移是双向的例3.26 在1000H地址上有指令 1000H SJMP 30H 则目的地址为 1000H+02

36、H+30H=1032H程序向前转移 如果指令为 1000H SJMP 0E7H rel=0E7H,是负数19H的补码,目的地址=1000H+02H-19H=0FE9H。程序向后转移。例3.3.27 在2000H地址上有指令 2000H SJMP DEST 2013H DEST: DEST为目的地址的标号,则相对地址rel=2013H-(2000H+02H)=11H 在单片机程序设计时,通常用到一条SJMP指令: SJMP $或 HERE: SJMP HERE以$代表PC的当前值(4)变址寻址转移指令目的地址(A)(DPTR)以DPTR内容为基址,以A的内容作变址因此只要把DPTR的值固定,而给

37、A赋以不同的值,即可实现程序的多分支转移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 ; 转向命令1处理入口 LJMP PGn ; 转向命令n处理入口2、条件转移指令组程序的转移是有条件的1)累加器判零转移指

38、令 JZ rel ; 若(A)=0,则PC(PC)+2+rel 若(A)0,则PC(PC)+2JNZ rel ; 若(A)0,则PC(PC)+2+rel 若(A)=0,则PC(PC)+2例3.29 编写程序将内部RAM以30H为起始地址的数据传送到 50H为起始地址的内部RAM区域,遇0终止。解: MOV R0 , #30H MOV R1 , #50H LOOP: MOV A , R0 JZ LOOP1 MOV R1 , A INC R0 INC R1 SJMP LOOP LOOP1: SJMP $2)数值比较转移指令把两个操作数进行比较,比较结果作为条件来控制程序转移CJNE A , #da

39、ta , rel ; (A)data则转移CJNE A , direct , rel ; (A)(direct)则转移CJNE Rn , #data ,rel ; (Rn)data则转移CJNE Ri , #data , rel ; (Ri)data则转移指令功能:(1)程序转移三字节指令 若目的操作数=源操作数, 则CY=0,PC(PC)+3,程序顺序执行;若目的操作数源操作数, 则CY=0,PC(PC)+3+rel,程序转移;若目的操作数源操作数若程序转移且CY=1,则 目的操作数源操作数3、减1非零转移指令DJNZ Rn , rel ; Rn(Rn)-1 ; 若(Rn)0,则PC(PC)

40、+2+rel ; 若(Rn)0,则PC(PC)+2DJNZ direct , rel ; Rn(Rn)-1 ; 若(direct)0,则PC(PC)+3+rel ; 若(direct)0,则PC(PC)+3例3.29 编写程序将内部RAM以30H为起始地址的10个单元的 数据传送到50H为起始地址的内部RAM区域,如果遇0终止。解: MOV R0 , #30H MOV R1 , #50H MOV R7 , #32 LOOP: MOV A , R0 JZ LOOP1 MOV R1 , A INC R0 INC R1 DJNZ R7 , LOOP LOOP1: SJMP $3、子程序调用与返回指令

41、调用指令在主程序中使用,返回指令应该是子程序的最后一条指令。执行完这条指令之后,程序返回主程序断点处继续执行(1)长调用指令LCALL addr16 ; PC(PC)+3 ; SP(SP)+1,(SP)(PC)70 ; SP(SP)+1,(SP)(PC)158 ; PCaddr16例3.30 已知(SP)=60H,执行指令: 0100H START: LCALL MIR 1000H MIR: 指令执行结果:(SP)=62H,(61H)=03H,(62H)=01H,(PC)=1000H(2)绝对调用指令二字节指令,指令代码:指令中提供了子程序入口地址的低11位ACALL addr11 ; PC(

42、PC)+2 ; SP(SP)+1,(SP)(PC)70 ; SP(SP)+1,(SP)(PC)158 ; PC100addr11例3.31 程序中有绝对调用指令: 1000H ACALL 485H解:addr11的高三位A10A9 A8=100,因此指令的机器代码为: 第一字节为1001 0001B, 第二字节为1000 0101B。 PC加2后为(PC)=1002H,即 0001000000000010B 指令提供的11位地址是10010000101B,替换PC的低11位后, 形成的目的地址为: 0001010010000101B(1485H) 即被调用子程序的入口地址为1485H, 或者说主程序到1485H处去调用子程序。(3)子程序返回指令子程序返回指令执行子程序返回功能,从堆栈中自动取出断点地址送给程序计数器PC,使程序在主程序断点处继续向下执行。RET ;PC158(SP),SP(SP)-1 ; PC70(SP),SP(SP)-1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论