版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章机械工业出版社同名教材机械工业出版社同名教材配套电子教案配套电子教案第第3版版第第3 3章章 80C5180C51系列单片机指令系统系列单片机指令系统3.1 指令系统基本概念指令系统基本概念标号:操作码标号:操作码 操作数;注释操作数;注释 3.1.1 指令基本格式指令基本格式 标号:指令的符号地址标号:指令的符号地址。 用于一段功能程序的识别标记或控制用于一段功能程序的识别标记或控制转移地址。转移地址。 指令前的标号代表该指令的地址,是用指令前的标号代表该指令的地址,是用符号表示的地址。符号表示的地址。 一般用英文字母和数字组成。一般用英文字母和数字组成。 标号必须用冒号标号必
2、须用冒号“ :”与操作码分隔。与操作码分隔。 操作码:表示指令的操作功能操作码:表示指令的操作功能。 操作码用助记符表示,它代表了指令操作码用助记符表示,它代表了指令的操作功能。的操作功能。 操作码是指令的必需部分,是指令的操作码是指令的必需部分,是指令的核心,不可缺少。核心,不可缺少。 操作数:参加操作的数据或数据地址操作数:参加操作的数据或数据地址。 操作数与操作码之间用空格分隔,操作数与操作数与操作码之间用空格分隔,操作数与操作数之间用逗号操作数之间用逗号“,”分隔。分隔。 操作数可以是数据,也可以是数据的地址、操作数可以是数据,也可以是数据的地址、数据地址的地址或操作数的其他信息。数据
3、地址的地址或操作数的其他信息。 操作数可分为目的操作数和源操作数。操作数可分为目的操作数和源操作数。 操作数可用二进制数、十进制数或十六进制操作数可用二进制数、十进制数或十六进制数表示。数表示。 操作数的个数可以是操作数的个数可以是0 03 3个。个。 注释:指令功能说明注释:指令功能说明。 注释属于非必需项,是为便于阅读,注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。对指令功能作的说明和注解。 注释必须以注释必须以“;”开始。开始。3.1.2 指令系统中的常用符号指令系统中的常用符号 bitbit:位地址位地址。代表片内代表片内RAMRAM中的可寻址位中的可寻址位00H00H7F
4、H7FH及及SFRSFR中的可寻址位。中的可寻址位。 # #:立即数符立即数符。#data#data:8 8位立即数;位立即数;#data16#data16:1616位立即数。位立即数。 directdirect:8 8位直接地址位直接地址代表内代表内RAM 00HRAM 00H7FH7FH或或SFRSFR的的80H80HFFH FFH 。 :间接寻址符间接寻址符。如如RiRi,DPTRDPTR,A+PCA+PC,A+DPTRA+DPTR。 addr11addr11:1111位目的地址位目的地址。 addr16addr16:1616位目的地址位目的地址。 relrel:带符号的带符号的8 8位
5、偏移地址位偏移地址。用于转移指令,其范围是相对于下一条指令第用于转移指令,其范围是相对于下一条指令第1 1字节地址字节地址的的-128-128+127+127个字节。个字节。3.1.3 寻址方式寻址方式【例】【例】寻址就是寻找操作数的地址。寻址就是寻找操作数的地址。 立即寻址立即寻址 立即寻址是直接给出操作数,操作数立即寻址是直接给出操作数,操作数前有立即数符前有立即数符“ # ”。MOV A,#30H MOV A,#30H ; ;将立即数将立即数30H30H传送至传送至A A中中MOV DPTR,#5678H MOV DPTR,#5678H ; ;将立即数将立即数5678H5678H传送至传
6、送至DPTRDPTR 直接寻址直接寻址MOV A,3AHMOV A,3AH ;将内将内RAM 3AHRAM 3AH单元中的数据传送至单元中的数据传送至A A中中MOV A,P0MOV A,P0 ;将特殊功能寄存器将特殊功能寄存器P0P0口中的数据传送至口中的数据传送至A A中中说明:说明:3AH3AH和和P0P0是以是以directdirect形式出现的直接地址形式出现的直接地址 直接寻址是给出操作数的直接地址。直接寻址是给出操作数的直接地址。直接寻址范围为内直接寻址范围为内RAM 128BRAM 128B和特殊功能和特殊功能寄存器。寄存器。【例】【例】 寄存器寻址寄存器寻址MOV A,R0
7、MOV A,R0 ; ;将将R0R0中的数据传送至中的数据传送至A A中中 寄存器寻址的操作数在规定的寄存器中。寄存器寻址的操作数在规定的寄存器中。 规定的寄存器有规定的寄存器有: 工作寄存器工作寄存器R0R0R7R7 累加器累加器A A 双字节双字节ABAB 数据指针数据指针DPTRDPTR 位累加器位累加器CyCy 这些被寻址寄存器中的内容就是操作数这些被寻址寄存器中的内容就是操作数【例】【例】 寄存器间接寻址寄存器间接寻址MOV A,R0 MOV A,R0 ; ;将以将以R0R0中内容为地址的存储单元中的数据中内容为地址的存储单元中的数据 传送至传送至A A中中MOVX A,DPTRMO
8、VX A,DPTR; ;将外将外RAM DPTRRAM DPTR所指存储单元中的数据所指存储单元中的数据 传送至传送至A A中中 PUSH PSW PUSH PSW ; ;将将PSWPSW中数据中数据 传送至堆栈指针传送至堆栈指针SPSP所指的存储单元中所指的存储单元中 间接寻址是根据操作数地址的地址寻找间接寻址是根据操作数地址的地址寻找操作数。操作数。 间接寻址用间址符间接寻址用间址符“ ”作为前缀。作为前缀。【例】【例】 变址寻址变址寻址MOVC A,A+DPTRMOVC A,A+DPTR 【例】【例】在变址寻址中,在变址寻址中,操作数操作数地址基址变址地址基址变址用于读用于读ROMROM
9、数据操作。数据操作。; ;将将A A的内容与的内容与DPTRDPTR内容相加,内容相加, 得到一个新地址,从该地址得到一个新地址,从该地址 ROMROM中读取数据送入中读取数据送入A A中。中。 相对寻址一般用于相对转移指令,相对寻址一般用于相对转移指令,转移目的地址当前转移目的地址当前PCPC值相对偏移量值相对偏移量relrel。;将位地址;将位地址07H(07H(字节地址字节地址20H20H中最中最 高位高位) )中的数据传送至进位位中的数据传送至进位位CyCy。 相对寻址相对寻址 位寻址位寻址 位寻址是对内位寻址是对内RAMRAM和特殊功能寄存器中的和特殊功能寄存器中的可寻址位进行操作的
10、寻址方式。可寻址位进行操作的寻址方式。【例】【例】MOV C,07HMOV C,07H3.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 一、一、数据传送类指令数据传送类指令 内内RAMRAM数据传送指令数据传送指令 以以累加器累加器A A为目的字节的传送指令为目的字节的传送指令(4 4条条
11、) 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条条) 以以直接地址直接地址为目的字节的传送指令为目的字节的传送指令(5 5条条) MOV direct,A MOV direct,A ;A;A(directdirect) MOV direct,Rn MOV d
12、irect,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(directdirect) 以以寄存器间址寄存器间址为目的字节的传送指令为目的字节的传送指令(3 3条条) MOV Ri,A MOV Ri,A ;A
13、(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,#1234H MOV DPTR,#1234H ;DPTR=1234H;DPTR=1234H该指令也可以用两条该指令也可
14、以用两条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(Ri),i=0;A(Ri),i=0、1 1 MOVX DATR,A MOVX DATR,A ;A(DATR);A(
15、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;PC+1PC,(A+PC)A 综上所述,三个不同的存储空间用三种不同的指综上所述,三个不同的
16、存储空间用三种不同的指令传送:令传送: PUSH direct PUSH direct ;SP+1SP;SP+1SP,(direct)(SP)(direct)(SP) POP direct POP direct ;(SP)(direct);(SP)(direct),SP-1SPSP-1SP 堆栈操作指令堆栈操作指令(2条条) PUSHPUSH为入栈指令为入栈指令例例PUSH 30HPUSH 30H;(;(30H30H)=2BH=2BH,具体操作是:具体操作是: 先将堆栈指针先将堆栈指针SPSP的内容(的内容(0FH0FH)加)加1 1,指向堆栈顶的一,指向堆栈顶的一个空单元,此时个空单元,此时
17、SP=10HSP=10H; 然后将指令指定的直接寻址单元然后将指令指定的直接寻址单元30H30H中的数据(中的数据(2BH2BH)送到该空单元中。送到该空单元中。 POPPOP为出栈指令为出栈指令例例 POP 40H POP 40H ;(40H)=4CH(40H)=4CH,具体操作是:,具体操作是: 先将先将SPSP所指单元所指单元0FH0FH(栈顶地址)中的数据(栈顶地址)中的数据(4CH4CH)弹出,送到指定的内弹出,送到指定的内RAMRAM单元单元40H40H,(,(40H40H)=4CH=4CH; 然后然后SP-1SPSP-1SP,SP=0EHSP=0EH,SPSP仍指向栈顶地址。仍指
18、向栈顶地址。 交换指令交换指令(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=0、1 1 累加器高低四位互换累加器高低
19、四位互换 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+dataA;A+dataA 有进位有进位,
20、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 A,direct ; A
21、DDC 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-(Ri)
22、-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;R
23、n+1Rn,n=07 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条)条) DECDEC A A ; ;A-1AA-1A DECDEC Rn Rn ; ;Rn-1Rn, n=0Rn-1Rn, n=07 7 DECDEC Ri Ri ;(Ri)-1(Ri), i
24、=0;(Ri)-1(Ri), i=0、1 1 DECDEC directdirect ;(;(direct)-1(direct)direct)-1(direct) 加加1 1减减1 1指令涉及指令涉及 A A时,会影响时,会影响P P,但不影响,但不影响其他标志位。其他标志位。 DIV AB DIV AB ;(A;(AB)B)商商A,A,余数余数BB Cy=0 Cy=0,OV=0OV=0 BCDBCD码调整指令码调整指令DA ADA A功能:对加法运算结果进行功能:对加法运算结果进行BCDBCD码调整。码调整。 乘除法指令乘除法指令 乘法指令乘法指令(1 1条)条)MUL AB MUL AB
25、; A; ABBABBA 除法指令除法指令(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;(dire
26、ct)datadirect;(direct)datadirect 逻辑逻辑“与与”运算指令运算指令(6 6条)条) 逻辑逻辑“或或”运算指令运算指令(6 6条)条) ORLORL A,RnA,Rn ;A;ARnARnA ORL ORL A A,Ri ,Ri ;A;A( (Ri)Ri)AA ORL ORL A A,#data ,#data ;A;AdataAdataA ORL ORL A,direct A,direct ;A;A( (direct)direct)AA ORL direct,A ORL direct,A ;(direct);(direct)AdirectAdirect ORL di
27、rect,#data ORL direct,#data;(direct);(direct)datadatadirectdirect 逻辑逻辑“异或异或”运算指令运算指令(6 6条)条) XRLXRL A,RnA,Rn ;A;A RnARnA XRL XRL A A,Ri ,Ri ;A;A ( (Ri)Ri)AA XRL XRL A A,#data ,#data ;A;A dataAdataA XRL XRL A,direct A,direct ;A;A ( (direct)direct)AA XRL direct,A XRL direct,A ;(direct);(direct) Adirec
28、tAdirect XRL direct,#data XRL direct,#data;(direct);(direct) datadatadirectdirect 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 ;
29、Cybit;Cybit四、四、位操作类指令位操作类指令 位传送指令位传送指令(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,bitANL C,bit;C(bit)C;C(b
30、it)C ANL C, ANL C,/bit/bit;C(bit)C;C(bit)C 位逻辑位逻辑“或或”运算指令运算指令: : ORL C,bitORL 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 addr1
31、6 ; addr; addr15150 0PCPC, 短转移指令短转移指令 AJMP addr11AJMP addr11; PC+2PC; PC+2PC, addraddr10100 0PCPC10100 0, PCPC15151111不变不变 间接转移指令间接转移指令(散转指令)(散转指令) JMP A+DPTRJMP A+DPTR;A+DPTRPC;A+DPTRPCLJMPLJMP、AJMPAJMP、SJMPSJMP三条无条件转移指令的三条无条件转移指令的区别区别: 转移范围不一样。转移范围不一样。 LJMPLJMP转移范围是转移范围是64KB64KB; AJMPAJMP转移范围是与当前转
32、移范围是与当前PCPC值同一值同一2KB2KB; SJMPSJMP转移范围是当前转移范围是当前PC-128BPC-128B+127B+127B。 使用使用AJMPAJMP和和SJMPSJMP指令应注意转移目标地址指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。是否在转移范围内,若超出范围,程序将出错。 指令字节不一样。指令字节不一样。 LJMPLJMP是是3 3字节指令;字节指令; AJMPAJMP、SJMPSJMP是是2 2字节指字节指令。令。 条件转移指令条件转移指令(1313条)条) 条件转移指令根据判断条件可分为:条件转移指令根据判断条件可分为: 判判C C转移转移 判
33、判bitbit转移转移 判判A A转移转移 减减1 1非非0 0转移转移 比较转移指令比较转移指令 满足条件,则转移;满足条件,则转移; 不满足条件,则程序顺序执行。不满足条件,则程序顺序执行。 C=0 C=0转移指令:转移指令: JNC relJNC rel ; PC+2PC,; PC+2PC, 若若Cy=0Cy=0,则,则PC+relPCPC+relPC,转移,转移 若若Cy=1Cy=1,则程序顺序执行。,则程序顺序执行。 判判C C转移指令转移指令(2 2条条) C=1C=1转移指令转移指令: JC relJC rel ; PC+2PC,; PC+2PC, 若若Cy=1Cy=1,则,则P
34、C+relPCPC+relPC,转移,转移 若若Cy=0Cy=0,则程序顺序执行。,则程序顺序执行。(bitbit)=1=1转移并清转移并清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,; P
35、C+3PC, 若若(bit)=1,(bit)=1,则则PC+relPC,PC+relPC,转移转移 若若(bit)=0,(bit)=0,则程序顺序执行则程序顺序执行(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+relP
36、C,转移转移 若若A A 0,0,则程序顺序执行则程序顺序执行 判判A A转移指令转移指令(2 2条)条) A A 0 0转移指令转移指令: JNZ rel JNZ rel ; PC+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,则程序顺
37、序执行则程序顺序执行 若若(direct)(direct) 0,0,则则PC+relPC,PC+relPC,转移转移 DJNZ DJNZ RnRn,rel ,rel ;PC+2PC,Rn-1Rn,;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
38、 A( (directdirect),),则则PC+PC+relrelPC,PC,转移转移 ; ;且若且若A A( (directdirect),Cy=0;),Cy=0;若若A A( (directdirect),Cy=1),Cy=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
39、,Cy=1 CJNE CJNE RnRn, ,#data#data,rel,rel;PC+3PC,;PC+3PC, ; ;若若RnRn= =datadata, ,则程序顺序执行则程序顺序执行 ; ;若若RnRndatadata, ,则则PC+PC+relrelPC,PC,转移转移 ; ;且若且若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)
40、(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是因为该指令为三字节指令是因为该指令为三字节指令 ) ) 断口地址低断口地址低8 8位保存到堆栈中:位保存到堆栈中: SP+1SPSP+1SP,(PC)(PC)0 07 7(SP)(SP) 断口地址高断口地址高8 8位保存到堆栈中:位保存到堆栈中: SP+1SPSP+1SP,(PC)(PC)8 81515(SP)
41、(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) ; addr16PC ; addr16PC 长调用指令长调用指令LCALLLCALL指令执行步骤:指令执行步骤: 产生当前产生当前PCPC:PC+2PCPC+2PC, ( PC+2( PC+2是因为该指令为双字节指令是因为该指令为双字节指令 )
42、 ) 断口地址低断口地址低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不变不变 短调用指令短调用指令ACALL addr11ACALL addr11; PC+2PC,SP+1SP,(PC); PC+2PC,SP+1SP,(PC)0 07 7(SP)(SP) ; SP+1SP,(PC);
43、 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-1SPSP-1SP。 返回指令返回指令:返回指令有子程序返回和中断返回两种:返回指令有子程序返回和中断返回两种: RET RET ; ;子程序返回子程序返回 RETI RETI ; ;中断返回中断返回返回指令执行步骤:返回指令执行步骤: 空操作指令空操作指令(1 1条)条)
44、 NOPNOP为单机周指令,在时间上占用一个为单机周指令,在时间上占用一个机器周期,常用于时间机器周期,常用于时间“微调微调”。NOP NOP ;PC+1PC;PC+1PC第第4 4章章机械工业出版社同名教材机械工业出版社同名教材配套电子教案配套电子教案第第3版版第第4 4章章 汇编语言程序设计汇编语言程序设计4.1.1 汇编汇编 将汇编语言源程序转换为机器代码的过程称为汇编。 将由二进制码组成的机器代码程序转换为汇编语言源程序的过程称为反汇编。 4.1 汇编语言程序设计基本概念汇编语言程序设计基本概念 4.1.2 伪指令伪指令 在汇编时起控制作用,自身并不产生机器在汇编时起控制作用,自身并不
45、产生机器码,不属于指令系统,而仅是为汇编服务的一码,不属于指令系统,而仅是为汇编服务的一些指令,称为伪指令。些指令,称为伪指令。 常用的伪指令有以下几种:常用的伪指令有以下几种: 起始伪指令起始伪指令 ORG(Origin)ORG(Origin) 功能:规定功能:规定ORGORG下面目标程序的起始地址。下面目标程序的起始地址。格式:格式:ORG (16ORG (16位位地址地址)功能:将一个数据或特定的汇编符号赋予规定功能:将一个数据或特定的汇编符号赋予规定 的字符名称。的字符名称。 结束伪指令结束伪指令 ENDEND功能:是汇编语言源程序的结束标志。在功能:是汇编语言源程序的结束标志。在EN
46、DEND 以后所写的指令,汇编程序不再处理以后所写的指令,汇编程序不再处理。格式:格式:ENDEND 等值伪指令等值伪指令 EQUEQU(EquateEquate)格式:格式:(字符名称字符名称) EQUEQU (数据或汇编符号数据或汇编符号) 数据地址赋值伪指令数据地址赋值伪指令 DATADATA格式:格式:(字符名称字符名称) DATADATA (表达式表达式)功能:将数据地址或代码地址赋予规定的功能:将数据地址或代码地址赋予规定的 字符名称。字符名称。 定义字节伪指令定义字节伪指令DBDB(Define ByteDefine Byte)格式:格式:DB (8DB (8位二进制数表位二进制
47、数表) )功能:从指定的地址单元开始,定义若干功能:从指定的地址单元开始,定义若干 个个8 8位内存单元的数据。位内存单元的数据。 数据与数据之间用数据与数据之间用“,”分割。分割。格式:格式:(字符名称)字符名称) BITBIT (位地址)(位地址) 定义字伪指令定义字伪指令DWDW(Define WordDefine Word)格式:格式:DW DW (1616位二进制数据表)位二进制数据表)功能:从指定的地址单元开始,定义功能:从指定的地址单元开始,定义 若干个若干个1616位数据。位数据。 定义位地址伪指令定义位地址伪指令BITBIT功能:将位地址赋予所规定的字符名称。功能:将位地址赋
48、予所规定的字符名称。 汇编和调试汇编和调试4.1.3 程序设计的基本步骤程序设计的基本步骤 编写程序要求:编写程序要求: 不仅要完成规定的功能任务,而且还应该执行不仅要完成规定的功能任务,而且还应该执行速度快、占用内存少、条理清晰、阅读方便、便于速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。移植、巧妙而实用。 一般应按以下几个步骤进行:一般应按以下几个步骤进行: 分析问题,确定算法或解题思路分析问题,确定算法或解题思路 画流程图画流程图 编写源程序编写源程序 顺序程序是指按顺序依次执行的程序,也顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。称为简单程序或直线程序。
49、 顺序程序结构虽然比较简单,但也能完成顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。一定的功能任务,是构成复杂程序的基础。 4.2 汇编语言程序设计举例汇编语言程序设计举例4.2.1 顺序程序顺序程序CONT: MOVCONT: MOV A,R0 A,R0; ;读低读低8 8位位CPLCPL A A; ;取反取反ADDADD A,#1 A,#1; ;加加1 1MOVMOV R2,A R2,A; ;存低存低8 8位位MOVMOV A,R1 A,R1; ;读高读高8 8位位CPLCPL A A; ;取反取反ADDCADDC A,#80H A,#80H; ;加进位及符号位
50、加进位及符号位MOV R3,AMOV R3,A; ;存高存高8 8位位RETRET; ;【例】【例】 已知已知1616位二进制负数存放在位二进制负数存放在R1R0R1R0中,中, 试求其补码,并将结果存在试求其补码,并将结果存在R3R2R3R2中。中。解:二进制负数的求补方法可归结为解:二进制负数的求补方法可归结为“求反加求反加1”1”,符号,符号位不变。利用位不变。利用CPLCPL指令实现求反;加指令实现求反;加1 1时,则应低时,则应低8 8位先加位先加1 1,高高8 8位再加上低位的进位。注意这里不能用位再加上低位的进位。注意这里不能用INCINC指令,因为指令,因为INCINC指令不影
51、响标志指令不影响标志位。位。程序如下:程序如下: 在许多情况下,需要根据不同的条件在许多情况下,需要根据不同的条件转向不同的处理程序,这种结构的程序称转向不同的处理程序,这种结构的程序称为分支程序。为分支程序。 80C5180C51指令系统中设置了条件转移指指令系统中设置了条件转移指令、比较转移指令和位转移指令,可以实令、比较转移指令和位转移指令,可以实现分支程序。现分支程序。4.2.2 分支程序分支程序 S0单独按下, 红灯亮,其余灯灭; S1单独按下, 绿灯亮,其余灯灭; S0、S1均按下, 红绿黄灯全亮; S0、S1均未按下, 黄灯亮,其余灯灭。 【例【例4-6】已知电路如图】已知电路如
52、图4-44-4所示,要求实现:所示,要求实现:Keil C51软件调试(见例9-1 ) 程序编译链接及纠错。直至显示:0 Error(s),0 Warning(s) 进入调试状态 ,全速运行。 打开P1口对话框,设置 P1.7 P1.6(s0、s1)状态 。 观测 P1.2P1.0状态 (0亮1灭 ),是否符合题目要求。画出Proteus 虚拟仿真电路图装入在Keil 调试时生成的 Hex文件全速运行 后,即时操作带锁按钮S0、S1信号灯会按题目要求随之变化 图9-59 Proteus ISIS虚拟仿真信号灯电路课堂练习题:课堂练习题: 电路及灯亮灭要求同上例,其中第2、3两条指令 JB P1
53、.7和JB P1.6按下列要求修改,试重新编程,并进行Keil 软件调试、Proteus 虚拟仿真,看能否达到题目要求。 JB JB P1.7 P1.7, JNB P1.6 JNB P1.6, JNB P1.7 JNB P1.7, JB P1.6 JB P1.6, JNB P1.7 JNB P1.7, JNB P1.6 JNB P1.6, 循环程序一般包括以下几个部分:循环程序一般包括以下几个部分: 循环初值;循环初值; 循环体;循环体; 循环修改;循环修改; 循环控制;循环控制;其结构可以有两种组织形式,其结构可以有两种组织形式,如如图图4-64-6所所示。示。 4.2.3 循环程序循环程序
54、 【例【例4-7】设设XiXi均为单字节数,并按顺序存放均为单字节数,并按顺序存放在以在以50H50H为首地址的内为首地址的内RAMRAM存储单元中,数存储单元中,数据长度(个数)据长度(个数)N N存在存在R2R2中,试编程求和中,试编程求和S=XS=X1 1+X+X2 2+ +X+XN N,并将,并将S S(双字节)存放在(双字节)存放在R3R4R3R4中(设中(设S S6553665536)。)。解:程序如下:解:程序如下: SXN:SXN: MOV R2,#N MOV R2,#N ;置数据长度置数据长度( (循环次数循环次数) ) MOV R3,#00H MOV R3,#00H ;和单
55、元和单元( (高高8 8位位) )清清0 0 MOV R4,#00H MOV R4,#00H ;和单元和单元( (低低8 8位位) )清清0 0 MOV R0,#50H MOV R0,#50H ;求和数据区首址求和数据区首址LOOP: MOV A,R4LOOP: MOV A,R4 ;读前次低读前次低8 8位和位和 ADD A,R0ADD A,R0 ;低低8 8位累加位累加 MOV R4,AMOV R4,A ;存低存低8 8位和位和 CLR A CLR A ; ADDC A,R3ADDC A,R3 ;高高8 8位加进位位加进位 MOV R3,AMOV R3,A ;存高存高8 8位和位和 INC
56、R0INC R0 ;指向下一数据指向下一数据 DJNZ R2,LOOP DJNZ R2,LOOP ;判判N N个数据累加完否?个数据累加完否? RETRET ;退出循环退出循环循循环环体体置置循循环环初初值值循环修改循环修改循环控制循环控制退出循环退出循环 DY1ms:MOV R7,#250 DY1ms:MOV R7,#250 ; ;置循环次数置循环次数 DLOP: DJNZ R7,DLOP DLOP: DJNZ R7,DLOP ;2;2机周机周250=500250=500机周机周 RETRET ; ;【例4-8】按下列要求编写延时子程序: 延时1ms,fosc=6MHz; 延时10ms,fo
57、sc=12MHz; 延时1s,fosc=6MHz;解解 :延时:延时1ms,fosc=6MHz,一个机器周期为一个机器周期为2 2 s s说明:说明:MOV RnMOV Rn指令为指令为1 1个机器周期个机器周期; ; DJNZ DJNZ指令为指令为2 2个机器周期个机器周期; ; RET RET指令为指令为2 2个机器周期个机器周期; ; (2 2机周机周250)+1+2250)+1+22 2 s s/ /机周机周=1006=1006 s s1ms1msKeil C51软件调试 编译(扩展名用.asm)链接并进入调试状态后,全速运行。观察寄存器窗口Sys中:states值为501(机周),s
58、ec值为0.001002(s) RET(返回)指令需与子程序调用指令成对出现,单独执行时会出错。因此,Keil调试时,需去除RET指令,用伪指令END替代,才能得到正确的延时时间。 但实际调用时,仍需加上RET指令,延时时间增加2机周。 注意:DY10ms:MOV R6,#20 DY10ms:MOV R6,#20 ; ; 置外循环次数置外循环次数DLP1: MOV R7,#250 DLP1: MOV R7,#250 ; ; 置内循环次数置内循环次数DLP2: DJNZ R7,DLP2 DLP2: DJNZ R7,DLP2 ; 2; 2机周机周250 =500250 =500机周机周 DJNZ
59、R6,DLP1 DJNZ R6,DLP1 ; 500; 500机周机周20= 1000020= 10000机周机周 RETRET ; ;解解:延时10ms, fosc=12MHz,一个机器周期为1s。说明:说明:MOV RnMOV Rn指令为指令为1 1个机器周期个机器周期; ; DJNZ DJNZ指令为指令为2 2个机器周期个机器周期; ; RET RET指令为指令为2 2个机器周期个机器周期; ; (2 2机周机周250)+1+2250)+1+220+1+220+1+21 1 s s/ /机周机周 =10063=10063 s10mss10msKeil C51软件调试结果软件调试结果(用E
60、ND替代RET): states=10061(机周),(机周),sec=0.010061(s)。)。 DY1S:MOV R5,#5 DY1S:MOV R5,#5 ; ; 置外循环次数置外循环次数DYS0:MOV R6,#200 DYS0:MOV R6,#200 ; ; 置中循环次数置中循环次数DYS1:MOV R7,#250 DYS1:MOV R7,#250 ; ; 置内循环次数置内循环次数DYS2:DJNZ R7,DYS2 DYS2:DJNZ R7,DYS2 ; 2; 2机周机周250 = 500250 = 500机周机周 DJNZ R6,DYS1 DJNZ R6,DYS1 ; 500; 5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度防火门绿色建筑认证合同2篇
- 二零二五版海上货物运输合同适用范围与船舶建造合同3篇
- 二零二五版全方位房产及土地使用权买卖合同3篇
- 二零二五年电商代运营用户运营与社区建设合同3篇
- 二零二五年电子商务平台店长劳动合同规定2篇
- 二零二五年电子商务平台安全风险评估与管理咨询合同3篇
- 二零二五版寄卖合同范本:电子产品寄卖代理合同2篇
- 二零二五版共有产权房买卖合同范本6篇
- 二零二五版文化创意产业合伙合同规范文本3篇
- 基于二零二五年度市场趋势的产品研发合同2篇
- 骨科手术后患者营养情况及营养不良的原因分析,骨伤科论文
- GB/T 24474.1-2020乘运质量测量第1部分:电梯
- GB/T 12684-2006工业硼化物分析方法
- 定岗定编定员实施方案(一)
- 高血压患者用药的注意事项讲义课件
- 特种作业安全监护人员培训课件
- (完整)第15章-合成生物学ppt
- 太平洋战争课件
- 封条模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖浆
- 货代操作流程及规范
评论
0/150
提交评论