《C51单片机指令系统.ppt》由会员分享,可在线阅读,更多相关《C51单片机指令系统.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3 3章章机械工业出版社同名教材机械工业出版社同名教材配套电子教案配套电子教案第第3 3章章 80C51 80C51系列单片机指令系统系列单片机指令系统本章要点本章要点v 8080C51C51指令的基本格式指令的基本格式v 8080C51C51指令功能分类指令功能分类v 指令系统中的常用符号指令系统中的常用符号v 8080C51C51指令系统的七种寻址方式指令系统的七种寻址方式v 数据传送类指令数据传送类指令v 算术运算类指令算术运算类指令v 逻辑运算及移位指令逻辑运算及移位指令v 位操作类指令位操作类指令v 控制转移类指令控制转移类指令 3-1 3-1 指令系统基本概念指令系统基本概念标
2、号:操作码标号:操作码 操作数;注释操作数;注释 一、一、指令基本格式指令基本格式 标号:指令的符号地址标号:指令的符号地址。用于一段功能程序的识别标记或控制用于一段功能程序的识别标记或控制转移地址。转移地址。指令前的标号代表该指令的地址,指令前的标号代表该指令的地址,是是用符号表示的地址用符号表示的地址。一般用英文字母和数字组成。一般用英文字母和数字组成。标号必须用冒号标号必须用冒号“:”与操作码分隔。与操作码分隔。操作码:表示指令的操作功能操作码:表示指令的操作功能。操作码用助记符表示,操作码用助记符表示,它它代表了指令代表了指令 的操作功能的操作功能。操作码是指令的必需部分,操作码是指令
3、的必需部分,是指令的核心,不可缺少。是指令的核心,不可缺少。操作数:参加操作的数据或数据地址操作数:参加操作的数据或数据地址。操作数与操作码之间用空格分隔,操作数与操作数与操作码之间用空格分隔,操作数与操作数之间用逗号操作数之间用逗号“,”分隔。分隔。操作数可以是操作数可以是数据数据,也可以是,也可以是数据的地址数据的地址、数数据地址的地址据地址的地址或或操作数的其他信息操作数的其他信息。操作数可分为目的操作数和源操作数。操作数可分为目的操作数和源操作数。操作数可用二进制数、十进制数或十六进制操作数可用二进制数、十进制数或十六进制数表示。数表示。操作数的个数可以是操作数的个数可以是0 03 3
4、个。个。注释:指令功能说明注释:指令功能说明。注释属于非必需项,是为便于阅读,注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。对指令功能作的说明和注解。注释必须以注释必须以“;”开始。开始。二、二、指令分类指令分类按指令功能分类按指令功能分类:可分为数据传送类、算术运算类、可分为数据传送类、算术运算类、逻辑运算类、位操作类和逻辑运算类、位操作类和 控制转移类控制转移类 等等5 5大大类指令。类指令。80C5180C51共有共有111111条指令。条指令。按指令长度分类按指令长度分类:可分为可分为1 1字节、字节、2 2字节和字节和3 3字字节指令。节指令。按指令执行时间分类按指令执行
5、时间分类:可分为可分为1 1机周、机周、2 2机周和机周和4 4机机周指令。周指令。三、三、指令系统中的常用符号指令系统中的常用符号 bitbit:位地址位地址。代表片内代表片内RAMRAM中的可寻址位中的可寻址位00H00H7FH7FH及及SFRSFR中的可寻址位。中的可寻址位。#:立即数符立即数符。#data#data:8 8位立即数;位立即数;#data16#data16:1616位立即数。位立即数。directdirect:8 8位直接地址位直接地址代表内代表内RAM 00HRAM 00H7FH7FH或或SFRSFR的的80H80HFFH FFH。:间接寻址符间接寻址符。如如RiRi,
6、DPTRDPTR,A+PCA+PC,A+DPTRA+DPTR。addr11addr11:1111位目的地址位目的地址。addr16 addr16:1616位目的地址位目的地址。relrel:带符号的带符号的8 8位偏移地址位偏移地址。用于转移指令,其范围是相对于下一条指令第用于转移指令,其范围是相对于下一条指令第1 1字节地址字节地址的的-128-128+127+127个字节。个字节。四、四、寻址方式寻址方式【例】【例】寻址就是寻找操作数的地址。寻址就是寻找操作数的地址。立即寻址立即寻址 立即寻址是立即寻址是直接给出操作数直接给出操作数,操作数,操作数前有立即数符前有立即数符“#”。MOV A
7、,#30H MOV A,#30H ;将立即数将立即数30H30H传送至传送至A A中中MOV DPTR,#5678H MOV DPTR,#5678H;将立即数将立即数5678H5678H传送至传送至DPTRDPTR 直接寻址直接寻址MOV A,3AHMOV A,3AH ;将内将内RAM 3AHRAM 3AH单元中的数据传送至单元中的数据传送至A A中中MOV A,P0MOV A,P0 ;将特殊功能寄存器将特殊功能寄存器P0P0口中的数据传送至口中的数据传送至A A中中说明:说明:3AH3AH和和P0P0是以是以directdirect形式出现的直接地址形式出现的直接地址 直接寻址是直接寻址是给
8、出操作数的直接地址给出操作数的直接地址。直接寻址范围为内直接寻址范围为内RAM 128BRAM 128B和特殊功能寄和特殊功能寄存器。存器。【例】【例】寄存器寻址寄存器寻址MOV A,R0 MOV A,R0 ;将将R0R0中的数据传送至中的数据传送至A A中中 寄存器寻址的操作数在规定的寄存器中。寄存器寻址的操作数在规定的寄存器中。规定的寄存器有规定的寄存器有:工作寄存器工作寄存器R0R0R7R7 累加器累加器A A 双字节双字节ABAB 数据指针数据指针DPTRDPTR 位累加器位累加器CyCy 这些被寻址寄存器中的内容就是操作数这些被寻址寄存器中的内容就是操作数【例】【例】寄存器间接寻址寄
9、存器间接寻址MOV A,R0 MOV A,R0 ;将以将以R0R0中内容为地址的存储单元中的数据中内容为地址的存储单元中的数据 传送至传送至A A中中MOVX A,DPTRMOVX A,DPTR;将外将外RAM DPTRRAM DPTR所指存储单元中的数据所指存储单元中的数据 传送至传送至A A中中 PUSH PSW PUSH PSW ;将将PSWPSW中数据中数据 传送至堆栈指针传送至堆栈指针SPSP所指的存储单元中所指的存储单元中 间接寻址是根据间接寻址是根据操作数地址的地址操作数地址的地址寻找寻找操作数。操作数。间接寻址用间址符间接寻址用间址符“”作为前缀。作为前缀。【例】【例】变址寻址
10、变址寻址MOVC A,A+DPTRMOVC A,A+DPTR 【例】【例】在变址寻址中,在变址寻址中,操作数操作数地址基址变址地址基址变址用于读用于读ROMROM数据操作。数据操作。;将将A A的内容与的内容与DPTRDPTR内容相加,内容相加,得到一个新地址,从该地址得到一个新地址,从该地址 ROMROM中读取数据送入中读取数据送入A A中。中。相对寻址一般用于相对转移指令,相对寻址一般用于相对转移指令,转移目的地址当前转移目的地址当前PCPC值相对偏移量值相对偏移量relrel。;将将位位地地址址07H(07H(字字节节地地址址20H20H中中最最 高位高位)中的数据传送至进位位中的数据传
11、送至进位位CyCy。相对寻址相对寻址 位寻址位寻址 位寻址是对内位寻址是对内RAMRAM和特殊功能寄存器中的和特殊功能寄存器中的可寻址位进行操作的寻址方式。可寻址位进行操作的寻址方式。【例】【例】MOV C,07HMOV C,07H3-2 3-2 指令系统指令系统 MOV A,Rn MOV A,Rn ;RnA,n=0;RnA,n=07 7 MOV A,Ri MOV A,Ri ;(Ri)A,i=0;(Ri)A,i=0、1 1 MOV A,direct MOV A,direct;(direct)A;(direct)A MOV A,#data MOV A,#data ;dataA;dataA 一、一
12、、数据传送类指令数据传送类指令 内内RAMRAM数据传送指令数据传送指令 以以累加器累加器A A为目的字节的传送指令为目的字节的传送指令(4 4条条)MOV Rn,A MOV Rn,A ;ARn,n=0;ARn,n=07 7 MOV Rn,direct MOV Rn,direct;(direct)Rn,n=0;(direct)Rn,n=07 7 MOV Rn,#data MOV Rn,#data;dataRn,n=0;dataRn,n=07 7 以以工作寄存器工作寄存器RnRn为目的字节为目的字节 的传送指令的传送指令(3 3条条)以以直接地址直接地址为目的字节的传送指令为目的字节的传送指令(
13、5 5条条)MOV direct,A MOV direct,A ;A;A(directdirect)MOV direct,Rn MOV direct,Rn;Rn;Rn(directdirect),n=0,n=07 7 MOV direct,Ri MOV direct,Ri;(Ri);(Ri)(directdirect),i=0,i=0、1 1 MOV direct1,direct2 MOV direct1,direct2;(direct2);(direct2)(direct1direct1)MOV direct,#data MOV direct,#data;data;data(directdi
14、rect)以以寄存器间址寄存器间址为目的字节的传送指令为目的字节的传送指令(3 3条条)MOV Ri,A MOV Ri,A ;A(Ri),i=0;A(Ri),i=0、1 1 MOV Ri,direct MOV Ri,direct;(direct)(Ri),i=0;(direct)(Ri),i=0、1 1 MOV Ri,#data MOV Ri,#data;data(Ri),i=0;data(Ri),i=0、1 1 1616位数据传送指令位数据传送指令MOV DPTR,#data16 MOV DPTR,#data16 ;data16DPTR;data16DPTR【例】【例】MOV DPTR,#1
15、234H MOV DPTR,#1234H ;DPTR=1234H;DPTR=1234H该指令也可以用两条该指令也可以用两条8 8位数据传送指令实现:位数据传送指令实现:MOV DPH,#12H MOV DPH,#12H ;DPH=12H;DPH=12HMOV DPL,#34H MOV DPL,#34H ;DPL=34H,DPTR=1234H;DPL=34H,DPTR=1234H MOVX A,Ri MOVX A,Ri ;(Ri)A,i=0;(Ri)A,i=0、1 1 MOVX A,DPTR MOVX A,DPTR ;(DPTR)A;(DPTR)A MOVX Ri,A MOVX Ri,A ;A(
16、Ri),i=0;A(Ri),i=0、1 1 MOVX DATR,A MOVX DATR,A ;A(DATR);A(DATR)外外RAMRAM传送指令传送指令(4 4条条)读读ROMROM指令指令(2(2条条)内内RAMRAM(包括特殊功能寄存器包括特殊功能寄存器):):用用MOVMOV指令传送;指令传送;外外RAM:RAM:用用MOVXMOVX指令传送;指令传送;ROM:ROM:用用MOVCMOVC指令传送。指令传送。MOVC A,A+DPTR MOVC A,A+DPTR ;(A+DPTR)A;(A+DPTR)A MOVC A,A+PC MOVC A,A+PC ;PC+1PC,(A+PC)A;
17、PC+1PC,(A+PC)A 三个不同的存储空间用三种不同的指令传送:三个不同的存储空间用三种不同的指令传送:PUSH direct PUSH direct;SP+1SP;SP+1SP,(direct)(SP)(direct)(SP)POP direct POP direct;(SP)(direct);(SP)(direct),SP-1SPSP-1SP 堆栈操作指令堆栈操作指令(2(2条条)PUSHPUSH为入栈指令为入栈指令例例PUSH 30HPUSH 30H;(;(30H30H)=2BH=2BH,具体操作是:具体操作是:先将堆栈指针先将堆栈指针SPSP的内容(的内容(0 0FHFH)加加1
18、 1,指向堆栈顶的一,指向堆栈顶的一个空单元,此时个空单元,此时SP=10HSP=10H;然后将指令指定的直接寻址单元然后将指令指定的直接寻址单元3030H H中的数据(中的数据(2 2BHBH)送到该空单元中。送到该空单元中。POPPOP为出栈指令为出栈指令例例 POP 40H POP 40H;(40H)=4CH(40H)=4CH,具体操作是:,具体操作是:先将先将SPSP所指单元所指单元0 0FHFH(栈顶地址)中的数据(栈顶地址)中的数据(4 4CHCH)弹出,送到指定的内弹出,送到指定的内RAMRAM单元单元4040H H,(,(40H40H)=4CH=4CH;然后然后SP-1SPSP
19、-1SP,SP=0EHSP=0EH,SPSP仍指向栈顶地址。仍指向栈顶地址。交换指令交换指令(5 5条)条)XCH A,Rn XCH A,Rn ;ARn;ARn,n=0n=07 7 XCH A,Ri XCH A,Ri ;A(Ri);A(Ri),i=0i=0、1 1 XCH A,direct XCH A,direct;A(direct);A(direct)SWAP A SWAP A ;A;A7 74 4AA3 30 0 字节交换指令字节交换指令 半字节交换指令半字节交换指令XCHD A,Ri XCHD A,Ri ;A;A3 30 0(Ri)(Ri)3 30 0 高高4 4位不变。位不变。i=0i
20、=0、1 1 累加器高低四位互换累加器高低四位互换 ADD A,Rn ADD A,Rn ;A+RnA(n=0;A+RnA(n=07)7)有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,Ri ADD A,Ri ;A+(Ri)A(i=0;A+(Ri)A(i=0、1)1)有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,direct ADD A,direct;A+(direct)A;A+(direct)A 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,#data ADD A,#data ;A+dat
21、aA;A+dataA 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 二、二、算术运算类指令算术运算类指令 加法指令加法指令 不带不带CyCy加法指令加法指令(4 4条)条)带带CyCy加法指令加法指令(4 4条)条)ADDC A,Rn ;ADDC A,Rn ;A+Rn+CyA(n=0A+Rn+CyA(n=07)7)有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC A,Ri ;ADDC A,Ri ;A+(Ri)+CyA(i=0A+(Ri)+CyA(i=0、1)1)有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC
22、A,direct;ADDC A,direct;A+(direct)+CyAA+(direct)+CyA 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC A,#data ;ADDC A,#data ;A+data+CyAA+data+CyA 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0 ,Cy=0 减法指令减法指令(4 4条)条)SUBB A,Rn SUBB A,Rn ;A-Rn-CyA;A-Rn-CyA,(n=0(n=07),7),有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 SUBB A,Ri SUBB A,Ri ;A-(
23、Ri)-CyA;A-(Ri)-CyA,(n=0(n=01),1),有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 SUBB A,direct SUBB A,direct;A-direct-CyA,;A-direct-CyA,有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 SUBB A,#data SUBB A,#data;A-data-CyA,;A-data-CyA,有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 INC A INC A;A+1A;A+1A INC Rn INC Rn ;Rn+1Rn,n=0;Rn+1Rn,n=0
24、7 7 INC Ri INC Ri;(Ri)+1(Ri),i=0;(Ri)+1(Ri),i=0、1 1 INC direct INC direct;(direct)+1(direct);(direct)+1(direct)INC DPTR INC DPTR;DPTR+1DPTR;DPTR+1DPTR 加加1减减1指令指令 加加1指令指令(5 5条)条)减减1 1指令指令(4 4条)条)DEC A DEC A ;A-1A;A-1A DEC Rn DEC Rn ;Rn-1Rn,n=0;Rn-1Rn,n=07 7 DEC Ri DEC Ri ;(Ri)-1(Ri),i=0;(Ri)-1(Ri),i=
25、0、1 1 DEC direct DEC direct ;(direct)-1(direct);(direct)-1(direct)加加1 1减减1 1指令涉及指令涉及 A A时,会影响时,会影响P P,但不影响,但不影响其他标志位其他标志位。DIV AB DIV AB ;(AB);(AB)商商A,A,余数余数BB Cy=0 Cy=0,OV=0OV=0 BCDBCD码调整指令码调整指令DA ADA A功能:对加法运算结果进行功能:对加法运算结果进行BCDBCD码调整。码调整。乘除法指令乘除法指令 乘法指令乘法指令(1 1条)条)MUL AB MUL AB ;ABBA;ABBA 除法指令除法指令
26、(1 1条)条)三、三、逻辑运算及移位指令逻辑运算及移位指令 ANL A,Rn ANL A,Rn ;ARnA;ARnA ANL A,Ri ANL A,Ri ;A(Ri)A;A(Ri)A ANL A,#data ANL A,#data ;AdataA;AdataA ANL A,direct ANL A,direct ;A(direct)A;A(direct)A ANL direct,A ANL direct,A ;(direct)Adirect;(direct)Adirect ANL direct,#data ANL direct,#data;(direct)datadirect;(direct
27、)datadirect 逻辑逻辑“与与”运算指令运算指令(6 6条)条)逻辑逻辑“或或”运算指令运算指令(6 6条)条)ORL A,Rn ORL A,Rn ;A;ARnARnA ORL A,Ri ORL A,Ri ;A;A(Ri)A(Ri)A ORL A,#data ORL A,#data ;A;AdataAdataA ORL A,direct ORL A,direct ;A;A(direct)A(direct)A ORL direct,A ORL direct,A ;(direct);(direct)AdirectAdirect ORL direct,#data ORL direct,#da
28、ta;(direct);(direct)datadirectdatadirect 逻辑逻辑“异或异或”运算指令运算指令(6 6条)条)XRL A,Rn XRL A,Rn ;A;A RnARnA XRL A,Ri XRL A,Ri ;A;A(Ri)A(Ri)A XRL A,#data XRL A,#data ;A;A dataAdataA XRL A,direct XRL A,direct ;A;A(direct)A(direct)A XRL direct,A XRL direct,A ;(direct);(direct)AdirectAdirect XRL direct,#data XRL d
29、irect,#data;(direct);(direct)datadirectdatadirect CLR A CLR A;0A;0A CPL A CPL A;AA;AA 清零和取反指令清零和取反指令 循环移位指令循环移位指令(4 4条)条)循环左移循环左移:RL ARL A 带带CyCy循环左移循环左移:RLC ARLC A 循环右移循环右移:RR ARR A 带带CyCy循环右移循环右移:RRC ARRC A MOV C,bit MOV C,bit ;(bit)Cy;(bit)Cy MOV bit,C MOV bit,C ;Cybit;Cybit四、四、位操作类指令位操作类指令 位传送指令
30、位传送指令(2 2条)条)位取反指令位取反指令:CPL CCPL C;CC;CC CPL bit CPL bit;(bit)bit;(bit)bit 位修正指令位修正指令(6 6条)条)位清位清0 0指令指令:CLR C CLR C;0C;0C CLR bit CLR bit;0bit;0bit 位置位置1 1指令指令:SETB CSETB C;1C;1C SETB bit SETB bit;1bit;1bit 位逻辑位逻辑“与与”运算指令运算指令:ANL C,bit ANL C,bit;C(bit)C;C(bit)C ANL C,ANL C,/bit/bit;C(bit)C;C(bit)C
31、位逻辑位逻辑“或或”运算指令运算指令:ORL C,bit ORL C,bit;C(bit)C;C(bit)C ORL C ORL C,/bit,/bit;C(;C(bit)C bit)C 位逻辑运算指令位逻辑运算指令(4 4条)条)相对转移指令相对转移指令 SJMP rel SJMP rel ;PC+2PC,PC+relPC;PC+2PC,PC+relPC五、五、控制转移类指令控制转移类指令 无条件转移指令无条件转移指令(3 3条)条)长转移指令长转移指令 LJMP addr16 LJMP addr16 ;addr;addr15150 0PCPC,短转移指令短转移指令 AJMP addr11
32、AJMP addr11;PC+2PC;PC+2PC,addr addr10100 0PCPC10100 0,PC PC15151111不变不变 间接转移指令间接转移指令(散转指令)(散转指令)JMP A+DPTR JMP A+DPTR;A+DPTRPC;A+DPTRPCLJMPLJMP、AJMPAJMP、SJMPSJMP三条无条件转移指令的三条无条件转移指令的区别区别:转移范围不一样。转移范围不一样。LJMPLJMP转移范围是转移范围是64KB64KB;AJMP AJMP转移范围是与当前转移范围是与当前PCPC值同一值同一2KB2KB;SJMP SJMP转移范围是当前转移范围是当前PC-128
33、BPC-128B+127B+127B。使用使用AJMPAJMP和和SJMPSJMP指令应注意转移目标地址是指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。否在转移范围内,若超出范围,程序将出错。指令字节不一样。指令字节不一样。LJMPLJMP是是3 3字节指令;字节指令;AJMP AJMP、SJMPSJMP是是2 2字节指字节指令。令。条件转移指令条件转移指令(1313条)条)条件转移指令根据判断条件可分为:条件转移指令根据判断条件可分为:判判C C转移转移 判判bitbit转移转移 判判A A转移转移 减减1 1非非0 0转移转移 比较不相等转移指令比较不相等转移指令 满足条
34、件,则转移;满足条件,则转移;不满足条件,则程序顺序执行。不满足条件,则程序顺序执行。C=0 C=0转移指令:转移指令:JNC rel JNC rel ;PC+2PC,;PC+2PC,若若Cy=0Cy=0,则,则PC+relPCPC+relPC,转移,转移 若若Cy=1Cy=1,则程序顺序执行。,则程序顺序执行。判判C C转移指令转移指令(2 2条条)C=1C=1转移指令转移指令:JC rel JC rel ;PC+2PC,;PC+2PC,若若Cy=1Cy=1,则,则PC+relPCPC+relPC,转移,转移 若若Cy=0Cy=0,则程序顺序执行。,则程序顺序执行。(bitbit)=1=1转
35、移并清转移并清0 0指令指令:JBC bit,rel JBC bit,rel;PC+3PC;PC+3PC,;若若(bit)=1,(bit)=1,则则PC+relPC,PC+relPC,转移转移,且且0(bit)0(bit);若若(bit)=0,(bit)=0,则程序顺序执行则程序顺序执行 判判bitbit转移指令转移指令(3 3条)条)(bitbit)=1=1转移指令转移指令:JB bit,rel JB bit,rel;PC+3PC,;PC+3PC,若若(bit)=1,(bit)=1,则则PC+relPC,PC+relPC,转移转移 若若(bit)=0,(bit)=0,则程序顺序执行则程序顺序
36、执行(bitbit)=0=0转移指令转移指令:JNB bit,rel JNB bit,rel;PC+3PC,;PC+3PC,若若(bit)=0,(bit)=0,则则PC+relPC,PC+relPC,转移转移 若若(bit)=1,(bit)=1,则程序顺序执行则程序顺序执行 A=0A=0转移指令转移指令:JZ rel JZ rel ;PC+2PC,;PC+2PC,若若A=0,A=0,则则PC+relPC,PC+relPC,转移转移 若若A A 0,0,则程序顺序执行则程序顺序执行 判判A A转移指令转移指令(2 2条)条)A A 0 0转移指令转移指令:JNZ rel JNZ rel ;PC+
37、2PC,;PC+2PC,若若A A 0,0,则则PC+relPC,PC+relPC,转移转移 若若A=0,A=0,则程序顺序执行则程序顺序执行 减减1 1非非0 0转移指令转移指令(2 2条)条)DJNZ DJNZ directdirect,rel,rel;PC+3PC,(direct)-1direct;PC+3PC,(direct)-1direct 若若(direct)=0,(direct)=0,则程序顺序执行则程序顺序执行 若若(direct)(direct)0,0,则则PC+relPC,PC+relPC,转移转移 DJNZ DJNZ RnRn,rel,rel;PC+2PC,Rn-1Rn,
38、;PC+2PC,Rn-1Rn,若若Rn=0,Rn=0,则程序顺序执行则程序顺序执行 若若RnRn 0,0,则则PC+relPC,PC+relPC,转移转移 比较转移指令比较转移指令(4 4条)条)CJNE CJNE A A,directdirect,rel,rel;PC+3PC,;PC+3PC,;若若A A=(=(directdirect),),则程序顺序执行则程序顺序执行 ;若若A A(directdirect),),则则PC+PC+relrelPC,PC,转移转移 ;且若且若A A(directdirect),Cy=0;),Cy=0;若若A A(directdirect),Cy=1),Cy
39、=1 CJNE CJNE A A,#data#data,rel,rel;PC+3PC,;PC+3PC,;若若A A=datadata,则程序顺序执行则程序顺序执行 ;若若A Adatadata,则则PC+PC+relrelPC,PC,转移转移 ;且若且若A Adatadata,Cy=0;,Cy=0;若若A Adatadata,Cy=1,Cy=1 CJNE CJNE RnRn,#data#data,rel,rel;PC+3PC,;PC+3PC,;若若RnRn=datadata,则程序顺序执行则程序顺序执行 ;若若RnRndatadata,则则PC+PC+relrelPC,PC,转移转移 ;且若且
40、若RnRndatadata,Cy=0;,Cy=0;若若RnRndatadata,Cy=1,Cy=1 CJNE CJNE RiRi,#data#data,rel,rel;PC+3PC,;PC+3PC,;若若(Ri)(Ri)=datadata,则程序顺序执行则程序顺序执行 ;若若(Ri)(Ri)datadata,则则PC+PC+relrelPC,PC,转移转移 ;且若且若(Ri)(Ri)datadata,Cy=0;,Cy=0;若若(Ri)(Ri)datadata,Cy=1,Cy=1 产生当前产生当前PCPC:PC+3PCPC+3PC,(PC+3(PC+3是因为该指令为三字节指令是因为该指令为三字节
41、指令)断口地址低断口地址低8 8位保存到堆栈中:位保存到堆栈中:SP+1SPSP+1SP,(PC)(PC)0 07 7(SP)(SP)断口地址高断口地址高8 8位保存到堆栈中:位保存到堆栈中:SP+1SPSP+1SP,(PC)(PC)8 81515(SP)(SP)形成转移目标地址:形成转移目标地址:addr16PCaddr16PC 调用和返回指令调用和返回指令LCALL addr16 LCALL addr16;PC+3PC,SP+1SP,(PC);PC+3PC,SP+1SP,(PC)0 07 7(SP)(SP);SP+1SP,(PC);SP+1SP,(PC)8 81515(SP)(SP);ad
42、dr16PC ;addr16PC 长调用指令长调用指令LCALLLCALL指令执行步骤:指令执行步骤:产生当前产生当前PCPC:PC+2PCPC+2PC,(PC+2 (PC+2是因为该指令为双字节指令是因为该指令为双字节指令)断口地址低断口地址低8 8位保存到堆栈中:位保存到堆栈中:SP+1SPSP+1SP,(PC)(PC)0 07 7(SP)(SP)断口地址高断口地址高8 8位保存到堆栈中:位保存到堆栈中:SP+1SPSP+1SP,(PC)(PC)8 81515(SP)(SP)形成转移目标地址:形成转移目标地址:addr11PCaddr11PC0 01010,PC,PC11111515不变不
43、变 短调用指令短调用指令ACALL addr11ACALL addr11;PC+2PC,SP+1SP,(PC);PC+2PC,SP+1SP,(PC)0 07 7(SP)(SP);SP+1SP,(PC);SP+1SP,(PC)8 81515(SP)(SP);addr;addr0 01010PCPC0 010 10,PC,PC11111515不变不变 ACALLACALL指令执行步骤:指令执行步骤:(SP)PC(SP)PC8 81515,SP-1SPSP-1SP;(SP)PC(SP)PC0 07 7,SP-1SP SP-1SP。返回指令返回指令:返回指令有子程序返回和中断返回两种:返回指令有子程序返回和中断返回两种:RET RET ;子程序返回子程序返回 RETI RETI ;中断返回中断返回返回指令执行步骤:返回指令执行步骤:空操作指令空操作指令(1 1条)条)NOPNOP为单机周指令,在时间上占用一个为单机周指令,在时间上占用一个机器周期,常用于时间机器周期,常用于时间“微调微调”。NOP NOP ;PC+1PC;PC+1PC
限制150内