《电子第6章80c51指令系统.ppt》由会员分享,可在线阅读,更多相关《电子第6章80c51指令系统.ppt(52页珍藏版)》请在三一办公上搜索。
1、教学目的:熟悉80C51系列单片机的寻址方式及每一种寻址方式对应的寻址空间;掌 握每一条指令功能。教学重点:1.80C51系列单片机寻址方式所对应 的寻址空间;2.80C51系列单片机指令功能。教学难点:1.数据传送类指令中对不同的存储空 间应采用的传送指令及寻址方式。2.间接寻址方式,第6章 80C51的指令系统,61 指令系统简介,1.80C51系列指令系统概述 指令是规定计算机进行某种操作的命令。计算机能够执行的各种指令的集合就称为指令系统。根据代码长度,80C51单片机的指令有单字节、双字节和三字节指令。按照指令执行速度又可分为单周期、双周期和四周期指令。2.汇编语言指令格式 80C5
2、1汇编语言指令格式如下:操作码 操作数1,操作数2,操作数3;注释 操作码:是由助记符表示的字符串,它规定了指令的操作功能。操作数:如果指令中有操作数,则它是指参加操作的数据或数据的地址。例如一条传送指令的书写格式为:MOV A,45H;(45H)A它表示将45H存储单元的内容送到累加器A 中。,6.2 寻址方式 指令系统的寻址方式 规定了操作数的访问方式。80C51指令系统有寄存器寻址、直接寻址、间接寻址、立即寻址、基址变址寻址和相对寻址等七种寻址方式。6.2.1 汇编指令中的符号约定Rn(n07)-当前选中的8个工作寄存器R0R7,它在片内数据存储器中的地址由PSW中RSl、RS0确定;R
3、i(i0或1)-当前选中的用于间接寻址的工作寄存器R0、R1,它在片内数据存储器中的地址由RS0、RS1确定;direct-8位直接地址,可以是片内RAM单元地址或SFR地址;data8-8位常数;datal6-16位常数;,addrl6-16位目的地址,寻址空间 64K字节程序存储器;addr11-11位目的地址;rel-补码形式的8位地址偏移量,用于相对转移指令中bit-位地址,片内RAM或SFR的可寻址位的位地址;-间接寻址寄存器的前缀;-位操作数的取反操作前缀。以下符号仅出现在指令注释或功能说明中。X-片内RAM的直接地址(包含位地址)或寄存器。(X)-表示 X中的内容。(X)-在间接
4、寻址方式中,表示由间址寄存器X指出的地址单元中的内容。-指令操作流程,将箭头左边内容送入箭头右边的单元内。,1.立即数寻址方式立即数(指令中的常数)直接参与指令操作。立即数前必须加“#”标记。指令中的立即数有8位立即数#data8和16位立即数#data16。例1 MOVA,#3AH;立即数3AH送累加器A 图6.1 MOV A,#3AH执行示意图,2.直接寻址方式,在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。可寻址空间有特殊功能寄存器、内部数据存储器以及位地址。其中特殊功能寄存器和位地址空间只能用直接寻址方式来访问。例1 MOVA,3AH;把A的内容送3AH单元。例2 MOVP
5、1,#10H;将立即数10H送P1口。注意:例2 中的目的操作数P1是直接寻址方式,这里用符号P1代替了直接地址90H。,图6.3 MOV A,38H执行示意图,3.寄存器寻址方式寄存器寻址是对选定的工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR和进位CY中的数进行操作。例1.MOV A,R2;将当前工作寄存器的内容 送累加器A。(指令代码为1字节EA注意R2在片内RAM的位置,它由RS0、RS1决定。如PSW中RS1、RS0的值分别为1、0,则现在的R2属于第二组工作寄存器,那么它的地址为12H。现已知12H中存放着数值4AH,则执行该指令后,4AH就被送到A累加器中。,图6
6、.4 MOV A,R2执行示意图,4.寄存器间接寻址方式,在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。这种寻址方式用于访问片内数据存储器或片外数据存储器。间接寻址寄存器:Ri(8位地址指针)和DPTR(16位地址指针),间接寻址寄存器前加表示间址操作。例1 MOV R0,#50H MOV A,R0 例2 MOV DPTR,#2760H MOVX DPTR,A,图6.5 MOV A,R0执行示意图,5.变址寻址(基址寄存器变址寄存器的间接寻址)变址寻址方式中使用DPTR或PC作基址寄存器,累加器A作变址寄存器。采用变址寻址的指令只有三条:MOVCA,A+DPT
7、RMOVCA,A+PCJMPA+DPTR 前两条用于程序存储器的查表操作,后一条用于程序的分支散转。,例 1 现假设MOVC A,ADPTR指令存放在70H单元,ACC中原存放值为E0H,DPTR中值为2000H,则ADPTR形成的地址为20E0H。20E0H单元中内容为47H,则执行该指令后,ACC中原E0H被47H代替。该指令执行过程示于图6.7。,6.相对寻址方式相对寻址是将程序转移到相对地址的转移指令。是将程序计数器PC中的当前内容(转移指令的下一条指令地址)与转移指令第二字节所给出的偏移量相加,其结果作为跳转指令的转移地址。偏移量为带符号的数,其范围为+127128。程序设计中,相对
8、地址可以用指令标号或直接地址偏移量数值,但要注意,相对转移地址的偏移量不得超过+127128。,例1 JC 03H,该指令表示若进位C0,则程序顺序执行,PC PC+2;若进位C1,则以PC 中的当前内容为基地址,加上偏移量03H 后所得到的结果为该转移指令的目的地址。,图6.8 JC 03H指令执行示意图,7.位寻址方式位寻址空间:片内RAM的位寻址区(20H 2FH单元的128位)和SFR中的可位寻址的位单元。位累加器:在进行位操作时,借助于进位位C作为操作累加器。位地址与字节直接寻址中的字节地址形式完全一样,主要由操作码来区分,使用时需予以注意。例1 SETB 3DH;将片内RAM位地址
9、3DH即27H 单元的第5位置“1”。例2 ANL C,3DH;将3DH的位状态与进位位C 相与,结果保留在C中。,操作数寻址方式与寻址空间,63 指令系统分类介绍,6.3.1 数据传送类指令(共24条)1 内部RAM数据传送指令 下面分类介绍:(1)累加器为目的操作数的指令 MOV A,Rn;(Rn)A MOV A,direct;(direct)A MOV A,Ri;(Ri)A MOV A,data;dataA(2)以寄存器Rn为目的操作数的指令 MOV Rn,A;(A)Rn MOV Rn,direct;(direct)Rn MOV Rn,data;dataRn,(3)以直接地址为目的操作数
10、的指令 MOV direct,A;(A)(direct)MOV direct,Rn;(Rn)(direct)MOV direct,direct;(direct)(direct)MOV direct,Ri;(Ri)(direct)MOV direct,data;data(direct)(4)以间接地址为目的操作数的指令 MOV Ri,A;(A)(Ri)MOV Ri,direct;(direct)(Ri)MOV Ri,data;data(Ri)(5)16位数据传送指令 MOV DPTR,data16;dataHDPH,datalDPL,2外部数据传送指令 MOVX DPTR,A MOVX A,DP
11、TR MOVX Ri,A MOVX A,Ri由于在80C51指令系统中,没有专门对外设的输入/输出指令,因此80C51单片机只能用这四条指令与外部设备交换数据。后2条指令使用不方便,很少使用.,例6.14 把程序存储器ROM中起始地址为1000H,长度为20H的数据块传送到以1A00H为起始地址的外部RAM中,要求使用两个DPTR数据指针来简化程序,注意辅助寄存器AUXR1的地址为A2H。,解:根据题意可编程序如下:MOV DPTR,#1A00H;1A00H 作为外部RAM首地址ORL A2H,#1;选择DPTR1 MOV DPTR,#1000H;1000H 作为程序存储器首地址 MOV R1
12、,#20H;数据块长度 R1LP2:MOVC A,A+DPTR;取程序存储器中的数据INC DPTR;DPTR1加1ANL A2H,#0FEH;恢复RAM的指针MOVX DPTR,A;数据送到外部RAM中 INC DPTR;DPTR0加1ORL A2H,#01;恢复ROM的指针DJNZ R1,LP2;数据没有传送完继续,3查表指令 在80C5l指令系统中,有2条极有用的查表指令,其数据表格放在程序存储器中。MOVC A,APC;(PC)lPC,(A)(PC)A MOVC A,ADPTR;((A)(DPTR)A4堆栈操作指令 PUSH direct;(SP)1SP,(direct)(SP)POP
13、 direct;(SP)(direct),(SP)-1SP,例6.15 执行如下程序 300H:MOV A,0DH;0DHA 302H:MOVC A,APC;(0DH303H)A 303H:MOV R0,A;(A)R0数据表格:310H:07H 311H:04H 312H:0AH 结果:A07H,R007H,PC304H 例6.16 执行如下程序,104H:MOV A,12H;12HA 106H:MOV DPTR,2000H;2000HDPTR 109H:MOVC A,A+DPTR;(12H+2000H)A数据表格:2010H:22H,34H,06H,48H 结果:A06H,PC100AH,例
14、6.17 已知片内RAM 60H单元中存放数值为86H,设堆栈指针为30H,把此数值压入堆栈,然后再弹出到50H单元中。,根据题意编写指令如下:MOV SP,#30H PUSH 60H POP 50H 程序执行过程示于图6.11。,5 交换指令 XCH A,Rn;A RnXCH A,direct;A(direct)XCH A,Ri;A(Ri)XCHD A,Ri;A.3A.0(Ri.3Ri.0)SWAP A;A.3A.0 A.7A.4 这组指令的前三条为全字节交换指令。后两条为半字节交换指令。图6.12 XCHD A,R0执行示意图,传送指令使用注意事项:片内存储器可以以直接寻址的方式将数据从一
15、个单元送到另一个单元;片内存储器的任一单元可以与工作寄存器或间址寄存器指定的地址单元间相互传送数据,但是,工作寄存器之间不能直接传送数据,也不能通过间址寄存器与片内存储器传送数据;立即数可以送到以寄存器间接寻址、直接寻址的方式的片内存储器的任一单元或工作寄存器;堆栈操作只能采用直接寻址方式。传送类指令一般不影响标志位,只有堆栈操作可以直接修改程序状态字PSW。另外,传送目的操作数为ACC的指令将影响奇偶标志P。,6.3.2 算术运算类指令(共23条)算术运算类指令主要是对8位无符号数据进行算术操作,其中包括加(ADD)、带进位加(ADDC)、带借位减法(SUBB)、乘(MUL)、除(DIV)、
16、加1(INC)、减1(DEC)指令;借助溢出标志,可对有符号数进行补码运算;借助进位标志,可进行多精度加、减运算;也可以对压缩BCD数进行加法运算。,1加法指令 ADD A,Rn;(A)(Rn)A ADD A,direct;(A)(direct)A ADD A,Ri;(A)(Ri)A ADD A,data;(A)dataA2带进位加法指令 ADDC A,Rn;(A)(Rn)CY A ADDC A,direct;(A)(direct)CY A ADDC A,Ri;(A)(Ri)CY A ADDC A,data;(A)dataCY A位,3 带借位减法指令 SUBB A,Rn;(A)(Rn)CY
17、ASUBB A,direct;(A)(direct)CY ASUBB A,Ri;(A)(Ri)CY ASUBB A,data;(A)dataCY A4乘法指令 MUL AB;(A)(B)BA,B158,A705除法指令 DIV AB;(A)(B)的商 A,余数 B6加一指令 INC A;(A)1 AINC Rn;(Rn)1 RnINC direct;(direct)1(direct)INC Ri;(Ri)1(Ri)INC DPTR;(DPTR)1 DPTR,7减一指令 DEC A;(A)1 A DEC Rn;(Rn)1 Rn DEC direct;(direct)l(direct)DEC Ri
18、;(Ri)1(Ri)8十进制调整指令 DA A,算术运算类指令汇总图,算术运算操作对PSW中标志位的影响,算术运算指令应用举例,例6.22 已知ADBH,R473H,CY1,执行指令“SUBB A,R4”则结果如下:A67H,CY0,OV1例6.23 编写计算23CDH-0F88的程序,将差的高8位存入R4,低8位存入R5。解 根据题意可编程如下:CLRC;进位位CY清0MOVA,#0CDH;CDHASUBBA,#088H;(A)88HCYAMOV R5,A;(A)R5MOV A,#23H;23HASUBB A,#0FH;(A)0FHCYAMOV R4,A;(A)R4,6.3.3 逻辑运算类指
19、令(共25条)逻辑运算类指令主要用于对两个操作数按位进行逻辑操作,操作结果送到A 累加器或直接寻址单元,若直接地址为I/O端口,则为“读-改-写”操作。这类指令执行的操作主要有“与”(ANL)、“或”(ORL)、“异或”(XRL)以及累加器自身的循环移位、取反(CPL)、清除(CLR)等。这些指令执行时一般不影响程序状态字寄存器PSW,仅当目的操作数为ACC时对奇偶标志位有影响。,1.逻辑“与”指令 ANL A,Rn;(A)(Rn)AANL A,direct;(A)(direct)A ANL A,Ri;(A)(Ri)AANL A,#data;(A)data AANL direct,A;(dir
20、ect)(A)(direct)ANL direct,#data;(direct)data(direct)2 逻辑或指令 ORL A,Rn;(A)+(Rn)AORL A,direct;(A)+(direct)AORL A,Ri;(A)+((Ri)AORL A,data;(A)+data AORL direct,A;(direct)+(A)(direct)ORL direct,data;(direct)+data(direct),3逻辑异或指令 XRL A,Rn;(A)(Rn)AXRL A,direct;(A)(direct)AXRL A,Ri;(A)(Ri)A XRL A,data;(A)dat
21、a AXRL direct,A;(direct)(A)(direct)XRL direct,data;direct)data(direct),4循环移位指令,5取反指令 CPL A;,A,5取反指令 CPL A;,A,5取反指令 CPL A;(/A)A6清0指令 CLR A;0A,2.逻辑运算指令举例,例1 已知A1AH,R045H,(45H)39H,执行指令ORL A,R0,则操作如下:0 0 0 1 1 0 1 0(1AH)+)0 0 l l 1 0 0 1(39H),0 0 1 1 1 0 1 1(3BH)结果:A3BH,R045H,(45H)39H,P1,例2 将累加器A中低4位的状态
22、,通过P1口的高4位输出。解:根据题意可编程如下:ANL A,0FH;屏蔽A.7A.4 SWAP A;高、低半字节交换 ANL P1,0FH;清P1口高4位 ORL P1,A;使P1.7 P1.4按A中初始值的A.3A.0值置位,6.3.4 控制转移类指令 这类指令的功能主要是控制程序从原顺序执行地址转移到其它指令地址上。包括跳转、调用、散转、返回及空操作等操作,共17条。1无条件转移指令 LJMP addrl6;addrl6 PCAJMP addrl1;(PC)2 PC,addr11 PC.10 PC.0SJMP rel;(PC)2rel PC2 条件转移 JZ rel;A0:(PC)2re
23、l PC A0:(PC)2 PC,JNZ rel;A0:(PC)2rel PC A0:(PC)2 PC,DJNZ Rn,re1;(Rn)-1Rn,(Rn)0:(PC)2rel PC(Rn)0:(PC)2 PC,DJNZ direct,rel;(direct)1(direct),(direct)0:(PC)3rel PC(direct)0:(PC)3 PC,CJNE A,direct,rel;A(direct):(PC)3 PC,0C A(direct):(PC)3relPC,0 C A(direct):(PC)3re1 PC,1 C,CJNE A,data,rel;(A)data(PC)3 P
24、C,0 C(A)data(PC)3rel PC,0 C(A)data:(PC)3rel PC,1 C,CJNE Rn,data,rel;(Rn)data:(PC)3 PC,0 C(Rn)data:(PC)3rel PC,0C(Rn)data:(PC)3rel PC,1 C,CJNE Ri,data,rel;((Ri)data:(PC)3 PC,0 C(Ri)data:(PC)3rel PC,0 C(Ri)data:(PC)3rel PC,1 C,3间接转移指令 JMP ADPTR;(A)(DPTR)PC4调用子程序及返回指令 LCALL addr16;(PC)3 PC,(SP)1 SP,(PC
25、.7PC.0)(SP),(SP)1 SP,(PC.15PC.8)(SP),addr16 PC ACALL addr11;(PC)2 PC,(SP)1 SP,(PC.7PC.0)(SP),(SP)1 SP,(PC.15PC.8)(SP),addr11 PC.10PC.0 RET;(SP)PC.15PC.8,(SP)-1 SP,(SP)PC.7PC.0,(SP)-1 SP RETI;除具有RET指令的功能外,还将清除优先级状态触发器,详见第6章5空操作指令 NOP,转移指令应用举例,例1 根据R7的内容,转向各个操作程序。R70,转入OPR0 R71,转入OPR1 R7n,转入OPRn解:MOV
26、DPTR,JPTAB1;跳转表首地址送数据指针 MOV A,R7;R72 A(修正变址值)ADD A,R7 JNC NOAD;判有否进位 INC DPH;有进位则加到高字节地址NOAD:JMP ADPTR;转向形成的散转地址入口JPTAB1:AJMP OPR0;直接转移地址表 AJMP OPR1 AJMP OPRn,例2 某子程序SUB1入口地址是340BH,调用指令LCALL SUB1 地址为2042H,该段程序调用过程中PC及SP的变化如下:地址 指令 注释2040H MOV SP,#20H;设置堆栈指针,20HSP2042H LCALL SUB1;调用子程序,2045HPC,21HSP,
27、45H(21H),22HSP,20H(22H),340BHPC340BH SUB1:MOV A,R03412H RET;(22H)PCH,(21H)PCL,此时PC2045H,SP20H,例3 根据A中数值,置相应的标志位。当#dataL A#dataH,标志位F0清零;否则F0置1。,解:ORG2000HST:CLRF0CJNEA,#dataH,HCNTRETHCNT:JCLCSF0:SETBF0RETLC:CJNEA,#dataL,LCNTRETLCNT:JCSF0RET,6.3.5 位操作类指令 包括位变量传送、逻辑运算、控制程序转移等指令。在进行位操作时,位累加器C为进位标志CY。在汇
28、编语言中位地址的表达方式有如下几种:(l)直接(位)地址方式:如D4H;(2)点操作符号方式:如PSW.4,(D0H).4;(3)位名称方式:如RS1;(4)用户定义名方式:如用伪指令bit 定义下式:SUB.REG bit RS1 经定义后,指令中可以用SUB.REG代替RS1。上面4种方式都可表达PSW(D0H)中第4位,它的位地址是D4H,名称为RS1,用户定义为SUB.REG。,1.位数据传送指令 MOV C,bit;bit C MOV bit,C;C bit,对端口操作时,是“读改写”指令。,3.位逻辑运算指令 ANL C,bit;C bit C ANL C,/bit;C/bit C
29、 ORL C,bit;C bit C ORL C,/bit;C/bit C,2.位修正指令 CLR C;0 C CLR bit;0 bit CPL C;/C C CPL bit;/bit bit SETB C;1 C SETB bit;1 bit,当直接位地址为端口中某一位时,具有“读改写”功能。,4.判位转移指令,JC rel;C1:(PC)2rel PC C0:(PC)2 PC,JNC rel;C0:(PC)2re1 PC C1:(PC)2 PC,JB bit,rel;bit1:(PC)3rel PC bit0:(PC)3 PC,JNB bit rel;bit0:(PC)3rel PC b
30、it1:(PC)3 PC,JBC bit,rel;bit1:(PC)3relPC,0 bit bit0:(PC)3 PC,例1 把Pl.3状态传送到Pl.7。按题意编写指令如下:MOV C,P1.3;P1.3 C MOV P1.7,C;C P1.7 例2 已知位0AH1,CY1。执行指令ANL C,0AH;C 0AHC,C为1 执行指令ORL C,/0AH;C+/0AH C,C为1,位操作指令举例,例3 比较片内RAM 40H、50H中的两个无符号数大小,若40H中的数小则把片内 RAM中的40H位置1,若50H中的数小则把50H位置1;若相等则把20H位置1,然后返回。解:设程序起始地址为50H,根据题意可编程如下:,地址 机器码 源程序 50 E5 40 MOV A,40H 52 B5 50 03 CJNE A,50H,L1;两数不等 则转Ll 55 D2 20 SETB 20H;两数相等,置20H 57 22 RET 58 40 03 L1:JC L2;若C为“1”,则(40H)中数小,转L2 5A D2 50 SETB 50H;(50H)数小 则50H位置1 5C 22 RET 5D D2 40 L2:SETB 40H;(40H)数小,则40H位置1 5F 22 RET,