《MCS51单片机指令系统课件.ppt》由会员分享,可在线阅读,更多相关《MCS51单片机指令系统课件.ppt(52页珍藏版)》请在三一办公上搜索。
1、第三章 MCS-51单片机指令系统,3-1 指令格式,3-2 指令寻址方式,3-3 状态标志,3-4 MCS-51指令系统,第三章 MCS-51单片机指令系统3-1 指令格,一. 汇编语言指令格式标号:操作码 操作数1,操作数2;注释换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数,1.标号:指令的符号地址2.操作码:指明指令功能。,3.操作数:指令操作对象数据、地址、寄存器名及约定符号。4.注释行:说明指令在程序中的作用。 操作码和操作数是指令主体。,MOV_move传送XCH_exchange交换ANL_and logic与逻辑运算XRL_exclusive or异
2、或运算MUL_Multiply乘法RR_rotate right右循环SJMP_short jump短跳转RET_return 子程序返回,3-1 指令格式,一. 汇编语言指令格式1.标号:指令的符号地址3.操作数:指,二. 机器语言指令格式,操作码 操作数1 操作数2有单字节、双字节和三字节指令。,汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。,举例:汇编语言:机器语言:MOV A,R0E8HMOV R6,#32H7E 32HMOV 40H,#10075 40 64H,11101000,0111111000110010,011101010100000
3、001100100,二. 机器语言指令格式操作码 操作数1 操作数2汇,3-2 指令寻址方式,3-2-1 操作数类型位(b) 位寻址区中的一位二进制数据字节(B) 8位二进制数据字(W) 16位双字节数据,3-2-2 寻址方式一.立即寻址方式指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。举例: 8位立即数: MOV A,#40H ;A40H 16位立即数: MOV DPTR,#2100H ;DPTR2100H,3-2 指令寻址方式3-2-1 操作数类型3-2-,二.直接寻址方式,指令操作数是存储器单元地址,数据在存储器单元中。 MOV A,40H;A(40H),直接寻址
4、方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。,56H,例:设存储器两个单元的内容如图所示,执行指令 MOV A,40H后 A = ?,思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?,二.直接寻址方式指令操作数是存储器单元地址,数据在存储器单元,三.寄存器寻址方式指令操作数为寄存器名,数据在寄存器中。例:MOV A,R0;AR0设指令执行前 A=20H,R0=40H,执行指令后,A= ?,R0= ?,四.寄存器间接寻址方式 指令的操作数为寄存器名,寄存器中为数据地址。 存放地址的寄存器称为间址寄存器或数据指针。例:MOV A,R0;A(R0) 设指令执行前 A
5、=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,40H,40H,0100 0000,A,0010 0000,R0,0100 0000,R0,三.寄存器寻址方式指令操作数为寄存器名,数据在寄存器中。,五.变址间接寻址方式 数据在存储器中,指令给出的寄存器中为数据的基地址和偏移量。数据地址 = 基地址 + 偏移量。,例:MOVC A,A+DPTR;A(A+DPTR) 设指令执行前 A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A= ? DPTR= ?,12H,2000H,六.相对
6、寻址方式可以修改PC值 指令给出地址的相对偏移量rel,在加上PC中的当前值,如此得到真正的数据地址。例: 1000H:JC 55H;若Cy为1,则转移 设指令执行前 Cy=1,指令在程序存储器单元中情况如图,执行指令后,PC= ?,1057H,五.变址间接寻址方式 数据在存储器中,指令给出的,七.位寻址方式 指令给出位地址。一位数据在存储器位寻址区。例: MOV C,40H;Cy(位地址40H) 设指令执行前 Cy=1,位地址40H存储器单元如图,执行指令后,Cy= ?思考:比较指令 MOV A, 40H 和 MOV C, 40H的区别。,七.位寻址方式28H 0110001029H,3-4
7、MCS-51指令系统分析,指令功能分类:数据传送、数据操作、布尔处理、程序控制。,3-4-1 数据传送指令实现寄存器、存储器之间的数据传送。一. 内部传送指令:片内数据存储器数据传送。 二. 外部传送指令:片外数据存储器数据传送。三. 交换指令: 片内数据存储器数据传送。 四. 堆栈操作指令:片内数据存储器数据传送。 五. 查表指令: 程序存储器数据传送。,3-4MCS-51指令系统分析指令功能分类:3-4-1,(一)内部传送指令:实现片内数据存储器中数据传送。指令格式: MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。,习题1:找出配对指令,实现反向传送。
8、,指令机器码:11101rrr E8EF11100101 n E5 n1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 n1 n2 90 d1 d2,MOV A,Rn ;ARn,Rn=R0R7 MOV A,n ;A(n),MOV A,Ri ;A(Ri),Ri=R0、R1 MOV A,#data ;Adata,MOV Rn,n ;Rn(n)MOV Ri,n ;(Ri)(n) MOV n1,n2 ;(n1)(n2),MOV DPTR,#d1d2 ;DPTRd1d2,(一)内部传送指令:实现片内数据存储器中数据传送。指令格式,例3-4-1
9、:顺序执行下列指令序列,求每一步执行结果。,MOV A,#30HMOV 4FH,AMOV R0,#20HMOV R0,4FHMOV 21H,20H,习题2:用两种寻址方式实现,将片内RAM 60H单元的数据传送给累加器A。,解: MOV A,#60H,MOV R0,#60H MOV A,R0,;A= 30H;(4FH)= 30H;R0= 20H;(20H)= 30H;(21H)= 30H,MOV R0,60H MOV A,R0,解: MOV A,60H,例3-4-1:顺序执行下列指令序列,求每一步执行结果。MOV,说明:,只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造
10、发明指令。,1. 一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1,R2MOV R2,R0,2. 间址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOV R0,#80HMOV A,R0,4. 指令表:指令字节数,机器周期数,说明: 只有指令表中的指令才有对应指令代码,计算机才能执行,(二) 外部传送指令实现片外数据存储器和A累加器之间的数据传送。,指令格式:MOVX 目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1. DPTR作16位数据指针,寻址64KB片外RAM空间MOVX A,DPTR;
11、A(DPTR)MOVX DPTR,A;(DPTR)A2. Ri作低8位数据指针,寻址256B片外RAM空间MOVXA,Ri;A(Ri)MOVXRi,A ;(Ri)A注意:此时高8位地址由P2口寄存器值决定,(二) 外部传送指令实现片外数据存储器和A累加器之间的数据,例3-4-2:实现片外数据存储器数据传送(2000H)(2100H)。,MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A,习题3:将片外RAM 0000H单元的数据传送到片内RAM的 60H单元。,; DPTR= 2000H; A= X; DPTR= 2100H;(2100H)
12、= X,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H,思考题:为什么对DPTR的数据传送使用内部传送指令?,例3-4-2:实现片外数据存储器数据传送(2000H)(,(三) 交换指令 实现片内RAM区的数据双向传送。,1. 字节交换指令XCH A,Rn ;A RnXCH A,Ri;A (Ri) XCH A,n ;A (n),习题4:将片内RAM60H单元与61H单元的数据交换。,例:设A= 29H,执行指令 XCH A,2AH后,A= ?(2AH)= ?,38H,29H,XCH 60H,61H 对吗?,29 H,(三) 交换指令 实现
13、片内RAM区的数据双向传送。1,2. 半字节交换指令,XCHD A,Ri;A03 (Ri)03SWAP A ;A47 A03,例3-4-3:将片内RAM 2AH(十位)和2BH(个位)单元中的单字节BCD码转换成压缩式BCD码存入20H单元。,A,00000000,00H,00001000,10000000,10000101,08H,80H,85H,MOV A,#0,MOV R0,#2AH,MOV R1,#2BH,XCHD A,R0,SWAP A,XCHD A,R1,XCH A,20H,00000000,00H,00000000,00H,85H,R1,R0,习题:交换片内RAM 40H单元和
14、41H单元的低半字节。,2. 半字节交换指令XCHD A,Ri;A03 (R,(四)堆栈操作指令 入栈指令:PUSH n ;SPSP+1,(SP)(n) 出栈指令:POP n ;(n)(SP),SPSP-1,例:设 A=02,B=56H,执行下列指令后,SP= ?,A= ? ,B= ?, SP , SP 02, SP 56H 02 , 56H 02HSP , SP 56H 02 , SP 56H 02 , 56H SP 02 ,02H,A,00H,02H,00H,02H,02H,SBR: MOV SP,#30H ;设栈底 PUSH A PUSH B MOV A,#0 MOV B,#01 POP
15、 B POP A,(四)堆栈操作指令 入栈指令:PUSH n ;S,(五) 查表指令 实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。 多用于查常数表程序,可直接求取常数表中的函数值。,1DPTR为基址寄存器MOVCA,A+DPTR ;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间,称为远程查表指令 。2PC为基址寄存器MOVCA,A+PC;A(A+PC)常数表只能在查表指令后256B范围内。,(五) 查表指令 实现从程序存储器读取数据到A累加,例:查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM 21H单元。,1)ORG
16、 1000HSQU:MOV DPTR,#TAB;确定表首地址(基地址)MOV A,20H;取X(偏移量MOVC A,A+DPTR;查表求Y=X2MOV 21H,A;保存YRET;子程序结束;其它程序段ORG 3000H;常数表格首地址TAB:DB 00,01,04,09,225;平方表,例:查表法求Y=X2。设X(0X15)在片内RAM的20,2)指令地址 源程序 ORG 1000H ;程序起始地址 1000H SQU: MOV A,20H;取X 1002H ADD A,#3 ;修正偏移量 1004H MOVC A,A+PC ;查表求Y=X2 1005H MOV 21H,A;存结果 1007H
17、 RET ;子程序结束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,225,思考题:当0X255时,如何用查表法编程求Y=X2。,例:查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM 21H单元。,2)指令地址 源程序思考题:当0X255时,如何用,习题:找出指令错误并改正:,1MOV A,#1000H;A1000H2MOVX A,1000H;A(1000H)片外RAM3MOVC A,1000H;A(1000H)片外ROM4MOVX 60H,A;片外RAM(60H)A5MOV R0,60H;片内RAM:(61H)(
18、60H) MOV 61H,R06. XCH R1,R2;R1R27. MOVX DPTR,#2000H;DPTR2000H8. MOVX 60H,DPTR;片内RAM片外RAM,习题:找出指令错误并改正:1MOV A,#1000H,3-4-2算术运算指令,与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。,3-3 状态标志,MCS-51 的程序状态字寄存器 PSW 为标志寄存器。其格式如下:,3-4-2算术运算指令与数据传送指令不同,多数算术运算指令,1标志位(自动设置状态),1)Cy:进位标志位保存运算后最高位的进位/借
19、位状态,当有进位/借位,Cy=1,否则Cy=0。2)AC:辅助进位标志位保存低半字节的进位/借位状态,当D3产生进位/借位,AC=1,否则AC=0。用于十进制调整。3)OV:溢出标志位OV=Cy7Cy6,补码运算产生溢出OV=1,否则OV=0。4)P:奇偶标志位反映累加器A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。,1标志位(自动设置状态)1)Cy:进位标志位,2用户选择位(编程设置状态),1)F0:用户自定义标志位。2)RS1、RS0: 工作寄存器区选择位。复位时,PSW=00H,RS1 RS0 工作寄存器 0 0 0区 0 1 1区 1 0 2区 1 1 3区,例:复位后,设置
20、使用工作寄存器2区,其余标志位不变。,解: MOV PSW,#,10H,2用户选择位(编程设置状态)1)F0:用户自定义标志位。,3-4-2 算术运算指令完成片内 RAM 和 A 中数据的加减乘除运算。,一加减指令1.加法指令,0011 1011 + 0011 1011 0111 0110,76H 0 0 1 1,1)不带进位加法:ADD A,源操作数ADD A,R2 ;AA+R2,影响Cy、OV、AC、P 例1:A=3BH,PSW=0,执行指令 ADD A,#3BH求:A= ,Cy= ,OV= ,AC= ,P= ,PSW= ?,01000001= 41H,3-4-2 算术运算指令完成片内 R
21、AM 和 A 中数据的,1001 1010 1110 0011 + 0 1 0111 1101,2)带进位加法: ADDC A,源操作数ADDC A,R2 ;AA+R2+Cy,影响Cy、OV、AC、P,7DH 1 1 0 0,例2:A= 9AH,R2= E3H,PSW= 0,执行指令ADDC A,R2 后求:A= ,Cy= ,OV= ,AC= ,P= ,PSW= ?,10000100 = 84H,1001 1010 2)带进位加法: ADDC,带进位加法指令ADDC用于多字节运算,例:设双字节数 X 存在片内RAM 41H、40H单元,Y存在42H、43H单元,编程求 Z=X+Y,并存入片内R
22、AM单元44H、45H、46H。,ADDS:MOV A,40HADD A,42HMOV 44H,AMOV A,41HADDC A,43HMOV 45H,AMOV A,#0ADDC A,#0MOV 46H,ARET,;取被加数低字节;加上加数低字节;保存和的低字节;取被加数高字节;加上加数高字节;保存和的高字节;求高字节进位;子程序结束,;低字节相加;高字节相加;计算高字节进位;子程序结束,带进位加法指令ADDC用于多字节运算例:设双字节数 X 存在,十进制加法指令:ADD A,源操作数DA A带进位十进制加法指令:ADDC A,源操作数DA A,作业:BCD码加法编程。设X、Y为4位压缩BCD
23、码,求 Z=X+Y。,BCD调整指令:DAA; 对 A 中加法结果进行调整,十进制加法指令:作业:BCD码加法编程。BCD调整指令:,2减法指令SUBB A,源操作数;带借位减法指令,SUBB A,R2;AA-R2-Cy,;影响Cy、OV、AC、P,00 0 0 0 0,习题:编程求双字节减法。设X、Y存在片内 RAM 60H起始单元,计算 Z=X-Y 。,例:A= 5AH,R2= 5AH,Cy= 0,执行下列指令SUBB A,R2求:A= ,Cy= ,OV= ,P= ,AC= ?,2减法指令SUBB A,源操作数;带借位减法指令,3. 增量、减量指令,INC 单操作数如:INC R2 ;R2
24、R2+1DEC 单操作数 如: DEC R2 ;R2R2-1 INC DPTR;DPTRDPTR+1 不影响标志位状态。,注意:没有指令 DEC DPTR 可用指令 DEC DPL 代替,3. 增量、减量指令INC 单操作数注意:没有指令,4.乘除指令,MUL AB;BAAB,Cy0,;当积高字节B=0,OV0;B0,则OV1,例:A= 96(60H), B= 192(C0H),执行指令 MUL AB 后, 求:A= ,B= ,Cy= ,OV= ,P= ?解: 96 192 = 18432(4800H),00H 48H 0 1 0,12H 0CH 0 0 0,例:A= 156(F6H),B=
25、13(0DH),执行指令 DIV AB 后求:A= ,B= ,Cy= ,OV= ,P= ?解: 156 13 = 18(12H),余数= 12(0CH)。,思考题:如何实现多字节数据的乘除运算。,DIV AB ;AB,A商,B余数,Cy0,;当除数B=0,OV1;B0,则OV0,4.乘除指令MUL AB;BAAB,Cy0,例,3-4-2 逻辑运算指令,一.单操作数指令(A累加器为操作数)1. A清0指令: CLR A ;A02. A取反指令:CPL A ;A/A,3. 循环移位指令:1)8位循环指令:RL A ;A循环左移一位RR A ;A循环右移一位,2)9位循环指令:RLC A;带Cy循环
26、左移一位RRC A;带Cy循环右移一位,3-4-2 逻辑运算指令一.单操作数指令(A累加器为操,例3-4-7:设 A= 11000101 ,Cy= 0,分别执行下列单条指令:CPL A 求:A= ,Cy= RL ARLC A,00111010 0,10001011 0,10001010 1,用9位循环指令实现多字节移位例:编程将寄存器 R6R5 中的双字节数X左移一位。,CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A,;Cy=0, 设 R6= 55H ,R5= AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010
27、101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,思考题:如何将寄存器R6R5中的双字节数X右移一位。,例3-4-7:设 A= 11000101 ,Cy= 0,分别,(二)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL,习题1:如何将累加器A中的数据高4位清0,低位不变?习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?,例3-5-8 A=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何? XRL A,#0C0H;将累加器A的内容D7、D6取反 ORL A,#03H;将累加器A的内容D1、D0置1ANL A
28、,#0E7H;将累加器A的内容D4、D3清0 解 :执行上述指令后,A=100011B。,(二)双操作数逻辑运算指令(对位逻辑运算):ANL、OR,3-4-4 布尔变量操作指令 对片内RAM中位寻址区操作。位累加器Cy和位地址b。,一位传送MOV C,b ;Cy(b)MOV b,C ;(b)Cy,例:将位地址20H的一位数传送到位地址30H中:MOV C,20H MOV 30H,C二位清0、置1、取反:CLR、SETB、CPL: CLR C ;Cy0, CLR 40H;(位地址40H) 0,3-4-4 布尔变量操作指令 对片内RAM中位寻,三逻辑运算:ANL、ORL: ANL C,40H ;C
29、C(40H)ANL C,/40H ;CC/(40H),例:设 Cy=1,(位地址40H)=1,执行指令 ANL C,/40H 后,Cy= ? , (位地址40H)= ?,位地址表示法:位地址 40H,位寄存器 F0,字节加位 ACC.0,0,习题:设累加器A中数据为 29H,Cy=0,执行指令 ORL C,0E3H 后,Cy= ?,1,ACC.3,三逻辑运算:ANL、ORL: ANL C,40H,4-4-1 转移指令转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。,按转移条件分类:1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。2)条件转移:指令中给出转
30、移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。,4-4-1 转移指令转移指令通过改写PC的当前值,按转移方式分类:,1)绝对转移:指令给出转移目的的绝对地址 nn,执行指令后,PCnn。,2)相对转移:指令给出转移目的与转移指令的相对偏移量e,执行指令后,PCPC + e 。,例:地址源程序1000H LJMP 2000H1003H 2000H ;转移目的指令,例:地址 源程序1000H SJMP 02 1004H ;转移目的指令,按转移方式分类:1)绝对转移:指令给出转移目的的绝对地址 n,一.无条件转移指令 1.长转移指令:LJMP nn ;PC nn
31、指令机器码: 02 nnH nnL指令转移范围:64KB,2.绝对转移指令:AJMP pn;PCPC+2;PC100pn100;PC1511不变指令机器码:pn108 00001,pn70 指令转移范围:2KB转移时要求转移前后保持 PC1511不变。,一.无条件转移指令 1.长转移指令:LJMP,相对偏移量 e 的计算式: e = 目的指令地址 -(转移指令地址+指令字节数) = 目的地址 - PC当前值,3.短转移指令: SJMP e ;PCPC+2,PCPC+e指令机器码: 80H,e 相对偏移量 e为8位补码。 指令转移范围:前128后127字节,编程时,用标号代替转移目的地址,转移指
32、令的操作数交给汇编程序计算。LJMP NEXT AJMP NEXT SJMP NEXT NEXT:,相对偏移量 e 的计算式: 3.短转移指令: 编程时,,例1:计算转移指令的相对偏移量 e ,并判断是否超出转移范围。,例2:求原地踏步指令的指令代码HERE: SJMP HERE,求出指令代码为:80 FE H,相对偏移量 = 2150H -(2130H+2)= 001EH,只取低8位:e = 1EH 指令机器码:80 1E H,习题:计算程序中转移指令的相对偏移量 e ,并判断是否超出转移范围。地址 源程序2130H LOOP: 21B0H SJMP LOOP,指令地址源程序2130H SJ
33、MP NEXT 2150HNEXT:MOV A,R2,例1:计算转移指令的相对偏移量 e ,并判断是否超出转移范围,4间接转移指令(多分支转移指令) JMP A+DPTR. ;PCA+DPTR指令机器码 73H,指令转移范围64KB。,KEY: MOV DPTR,#KTAB MOV A,40H ADD A,A JMP A+DPTRKTAB: AJMP FUNC0 AJMP FUNC1 FUNC0: FUNC1: ,应用:处理功能键。要求不同功能键执行不同程序段。设每个功能键对应一个键值 X(0XFH)。 设X已存入片内RAM的40H单元中。若X=0,则执行程序段FUNC0若X=1,则执行程序段
34、FUNC1。,4间接转移指令(多分支转移指令) JMP,二条件转移指令,1. 判零转移指令JZ e ;PCPC+2,;若A=00H,PCPC+e(转移),;若A00H,PC不变(不转移),条件转移指令形成程序的分支,赋予计算机判断决策能力转移条件:1)标志位的状态 2)位地址中的状态,JNZ e ;PCPC+2,若A00H,;PCPC+ e(转移) ;若A=00H,PC不变(不转移),2.判Cy转移指令JC e ;Cy=1则转移,Cy=0不转移JNC e;Cy=0则转移,Cy=1不转移,二条件转移指令1. 判零转移指令JZ,3.判位转移指令JB b,e ;(b)=1转移,否则不转移JNB b,
35、e ;(b)=0转移,否则不转移,4. 判位清0转移指令:JBC b,e ;(b)=1转移,且(b)0,否则不转移,5. 比较不相等转移指令: CJNE 操作数1,操作数2,e,CJNE A,n,e ;PCPC+3;若A(n),则PCPC+e ;且当A(n),Cy=0,当A(n),Cy=1; ;若A =(n),PC不变,且Cy=0。,相当于两个操作数相减,仅影响标志状态,不保存结果,3.判位转移指令4. 判位清0转移指令:,6循环转移指令:DJNZ 操作数,e DJNZ R2,e ;PCPC+2,R2R2-1 ;若R20,PCPC+e, ;若R2=0,PC不变。,例:用于循环结构程序。设要求程
36、序循环执行100次MOV R2,#100 ;设循环计数器初值LOOP: ;多次循环程序段 DJNZ R2,LOOP;循环控制 ;循环结束,习题:当循环计数器初值为0,循环次数有多少?,6循环转移指令:例:用于循环结构程序。设要求程序循环执,4-6-3 子程序调用和返回指令,子程序调用和返回指令也使程序发生转移。,一长调用指令LCALL nn ;PCPC+3, ;SPSP+1,(SP)PCL,SPSP+1,(SP)PCH;PCnnnn为子程序起始地址,编程时可用标号代替。指令机器码:12 nnH nnL 指令调用范围:64KB,子程序调用过程:,与转移指令不同:转移时,先用堆栈保存当前地址,4-
37、6-3 子程序调用和返回指令子程序调用和返回指令也使,二绝对调用指令ACALL pn ;PCPC+2 ;SPSP+1,(SP)PCL,SPSP+1,(SP)PCH ;PC100pn100 ;PC1511不变pn为子程序首地址指令机器码:pn10810001,pn70 指令调用范围 2KB。,三子程序返回指令RET ;PCH(SP),SPSP-1,PCL(SP),SPSP-1指令机器码:22HRET指令从堆栈弹出保存的PC地址,实现子程序返回。,二绝对调用指令三子程序返回指令,20H 92H,21H 53H,SP,SP,SP,SP,SP,PC,2000H,208FH,2092H,2100H,21
38、50H,2153H,2200H,2250H,2251H,2153H,2092H,21FFH,2200H,SP,SP,SP,SP,SP,SP,SP,SP,MAIN:MOV SP,#30H;设置栈底 LCALL SUB ;调用子程序 SUB: ;子程序段 RET ;返回主程序,例:子程序嵌套,20H 92H21H 53H SP,注意:1.子程序起始指令要使用标号,用作子程序名。 2. 执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,常用格式:MAIN:;主程序LCALL SUBR;调用SUBRSUBR:;子程序首地址RET;子程序返回,注意:1.子程序起始指令要使用标号
39、,用作子程序名。 2.,THANK YOU FOR LISTENING,作业 PP66-68 下周三交一 直接给答案二 直接给答案三 5. 6. 7. 8. 10. 14.,THANK YOU FOR LISTENING作业 PP66,补充习题:交换片内RAM 40H单元和 41H单元的低半字节。,MOV R0, #40HMOV A, 41HXCHD A, R0MOV 41H, A,补充习题:交换片内RAM 40H单元和 41H单元的低半字节,BCD码加法编程。设X、Y为4位压缩BCD码,求 Z=X+Y。,Suppose X is stored in R2, R3; Y is stored in R4, R5; the sum will be put into R6, R7(high before)MOV A, R3 ADD A, R5DA AMOV R7, AMOV A, R2ADDC A, R4DA AMOV R6, A,问题:该程序中,和的最高进位保存在哪里?,BCD码加法编程。设X、Y为4位压缩BCD码,求 Z=X+,