第3章指系统09.ppt
教教学学目目的的:熟悉80C51系列单片机的寻址方式及每一种寻址方式对应的寻址空间;掌 握每一条指令功能。教教学学重重点点:1.80C51系列单片机寻址方式所对应 的寻址空间;2.80C51系列单片机指令功能。教学难点:教学难点:1 1.数据传送类指令中对不同的存储空 间应采用的传送指令及寻址方式。2.间接寻址方式 第第3 3章章 指令系统指令系统 31 指令系统简介 1.1.80C5180C51系列系列指令系统概述指令系统概述 指令是规定计算机进行某种操作的命令。计算机能够执行的各种指令的集合就称为指令系统。根据代码长度,80C51单片机的指令有单字节、双字节和三字节指令。按照指令执行速度又可分为单周期、双周期和四周期指令。2.汇编语言指令格式l 80C51汇编语言指令格式如下:l 操作码 操作数1,操作数2,操作数3 ;注释 操作码:是由助记符表示的字符串,它规定了指令的操作功能。操作数:如果指令中有操作数,则它是指参加操作的数据或数据的地址。l 例如一条传送指令的书写格式为:l MOV A,45H;(45H)Al它表示将45H存储单元的内容送到累加器A 中。3.2 寻址方式 指令系统的寻址方式 规定了操作数的访问方式。80C51指令系统有寄存器寻址、直接寻址、间接寻址、立即寻址、基址变址寻址和相对寻址等七种寻址方式。3.2.1 汇编指令中的符号约定Rn(n07)-当前选中的8个工作寄存器R0R7,它在片内数据存储器中的地址由PSW中RSl、RS0确定;Ri(i0或1)-当前选中的用于间接寻址的工作寄存器R0、R1,它在片内数据存储器中的地址由RS0、RS1确定;direct-8位直接地址,可以是片内RAM单元地址或SFR地址;data8-8位常数;datal6-16位常数;addrl6-16位目的地址,寻址空间 64K字节程序存储器;addr11-11位目的地址;rel-补码形式的8位地址偏移量,用于相对转移指令中bit-位地址,片内RAM或SFR的可寻址位的位地址;-间接寻址寄存器的前缀;-位操作数的取反操作前缀。l以下符号仅出现在指令注释或功能说明中。lX-片内RAM的直接地址(包含位地址)或寄存器。l(X)-表示 X中的内容。l(X)-在间接寻址方式中,表示由间址寄存器X指出的地址单元中的内容。-指令操作流程,将箭头左边内容送入箭头右边的单元内。l 1.1.立即数寻址方式立即数寻址方式立即数(指令中的常数)直接参与指令操作。立即数前必须加“#”标记。指令中的立即数有8位立即数#data8和16位立即数#data16。例1 MOVA,#3AH;立即数3AH送累加器A 图3-1 MOV A,#3AH指令执行示意图 2.直接寻址方式直接寻址方式直接寻址方式直接寻址方式l 在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。可寻址空间有特殊功能寄存器、内部数据存储器以及位地址。其中特殊功能寄存器和位地址空间只能用直接特殊功能寄存器和位地址空间只能用直接寻址方式来访问。寻址方式来访问。l例1 MOVA,3AH;把A的内容送3AH单元。l例2 MOVP1,#10H;将立即数10H送P1口。l注意:例注意:例2 2 中的目的操作数中的目的操作数P1P1是直接寻址方式,这里用符号是直接寻址方式,这里用符号P1P1代替了直接地址代替了直接地址90H90H。图3-3 MOV A,3AH指令执行示意图 3.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累加器中。图3-4 MOV A,R2指令执行示意图4.4.4.4.寄存器间接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器间接寻址方式 在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。这种寻址方式用于访问片内数据存储器或片外数据存储器。间接寻址寄存器:Ri(8位地址指针)和DPTR(16位地址指针),间接寻址寄存器前加表示间址操作。例1 MOV R0,#50H MOV A,R0 例2 MOV DPTR,#2760H MOVX DPTR,A图3-5 MOV A,R0指令执行示意图5.5.变址寻址(基址寄存器变址寄存器的间接寻址)变址寻址(基址寄存器变址寄存器的间接寻址)变址寻址方式中使用DPTR或PC作基址寄存器,累加器A作变址寄存器。采用变址寻址的指令只有三条:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR 前两条用于程序存储器的查表操作,后一条用于程序的分支散转。例例 1 1 现假设现假设MOVC AMOVC A,AADPTRDPTR指令存放在指令存放在70H70H单元,单元,ACCACC中原存放值为中原存放值为E0HE0H,DPTRDPTR中值为中值为2000H2000H,则,则A ADPTRDPTR形形成的地址为成的地址为20E0H20E0H。20E0H20E0H单元中内容为单元中内容为47H47H,则执行该指,则执行该指令后,令后,ACCACC中原中原E0HE0H被被47H47H代替。代替。该指令执行过程示于图该指令执行过程示于图3-73-7。图3-7 MOVC A,ADPTR指令执行示意图6.6.相对寻址方式相对寻址方式相对寻址是将程序转移到相对地址的转移指令。是将程序计数器PC中的当前内容(转移指令的下一条指令地址)与转移指令第二字节所给出的偏移量相加,其结果作为跳转指令的转移地址。偏移量为带符号的数,其范围为+127128。程序设计中,相对地址可以用指令标号或直接地址偏移量数值,但要注意,相对转移地址的偏移量不得超过+127128。例例1 JC 03H1 JC 03H ,该指令表示若进位该指令表示若进位C C0 0,则,则程序顺序执行,程序顺序执行,PCPC PC+2 PC+2;若进位;若进位C C1 1,则以,则以PC PC 中的当前内容为基地址,加上偏移量中的当前内容为基地址,加上偏移量03H 03H 后后所得到的结果为该转移指令的目的地址所得到的结果为该转移指令的目的地址 。l图3-8 JC 03H指令执行示意图7.7.位寻址方式位寻址方式位寻址空间:片内RAM的位寻址区(20H 2FH单元的128位)和SFR中的可位寻址的位单元。位累加器:在进行位操作时,借助于进位位C作为操作累加器。位地址与字节直接寻址中的字节地址形式完全一样,位地址与字节直接寻址中的字节地址形式完全一样,主要由操作码来区分,使用时需予以注意。主要由操作码来区分,使用时需予以注意。例1 SETB 3DH;将片内RAM位地址3DH即27H 单元的第5位置“1”。例2 ANL C,3DH ;将3DH的位状态与进位位C 相与,结果保留在C中。寻址方式 寻 址 空 间 寄存器寻址 工作寄存器R0R7、A、B、CY、DPTR 直接寻址 片内RAM和特殊功能寄存器SFR 间接寻址 片内RAM,片外RAM 位寻址 片内RAM的位寻址区和SFR中的可位寻址的位单元立即数寻址 程序存储器基址变址寻址 程序存储器(A+PC,A+DPTR)相对寻址 在程序存储器256字节范围内转移 操作数寻址方式与寻址空间操作数寻址方式与寻址空间操作数寻址方式与寻址空间操作数寻址方式与寻址空间33 指令系统分类介绍 3.3.1 数据传送类指令(共24条)l1 内部内部RAMRAM数据传送指令数据传送指令l 下面分类介绍:下面分类介绍:l(1 1)累加器为目的操作数的指令)累加器为目的操作数的指令 l MOV AMOV A,RnRn ;(;(RnRn)A Al MOV A MOV A ,direct direct ;(direct(direct)A Al MOV A MOV A,RiRi ;(;(RiRi)A Al MOV A MOV A,data data ;datadataA A l(2 2)以寄存器以寄存器RnRn为目的操作数的指令为目的操作数的指令 l MOV MOV RnRn,A A ;(;(A A)RnRnl MOV MOV RnRn,direct ,direct ;(;(directdirect)RnRnl MOV MOV RnRn,data data ;datadataRnRnl(3)以直接地址为目的操作数的指令l MOV direct,A ;(A)(direct)l MOV direct,Rn ;(Rn)(direct)l MOV direct,direct ;(direct)(direct)l MOV direct,Ri ;(Ri)(direct)l MOV direct,data ;data(direct)l(4)以间接地址为目的操作数的指令l MOV Ri,A ;(A)(Ri)l MOV Ri,direct ;(direct)(Ri)l MOV Ri,data ;data(Ri)l(5)16位数据传送指令l MOV DPTR,data16 ;dataHDPH,datalDPLl2外部数据传送指令l MOVX DPTR,A l MOVX A,DPTRl MOVX Ri,Al MOVX A,Ril由于在80C51指令系统中,没有专门对外设的输入/输出指令,因此80C51单片机只能用这四条指令与外部设备交换数据。后2条指令使用不方便,很少使用.例例5 5 把程序存储器把程序存储器ROMROM中起始地址为中起始地址为1000H1000H,长,长度为度为20H20H的数据块传送到以的数据块传送到以1A00H1A00H为起始地址的为起始地址的外部外部RAMRAM中中,要求使用两个要求使用两个DPTRDPTR数据指针来简数据指针来简化程序,注意辅助寄存器化程序,注意辅助寄存器AUXR1AUXR1的地址为的地址为A2HA2H。l解:根据题意可编程序如下:lMOV DPTR,#1A00H ;1A00H 作为外部RAM首地址lORL A2H,#1 ;选择DPTR1l MOV DPTR,#1000H ;1000H 作为程序存储器首地址l MOV R1,#20H ;数据块长度 R1lLP2:MOVC A,A+DPTR;取程序存储器中的数据lINC DPTR ;DPTR1加1lANL A2H,#0FEH ;恢复RAM的指针lMOVX DPTR,A ;数据送到外部RAM中 lINC DPTR ;DPTR0加1lORL A2H,#01 ;恢复ROM的指针lDJNZ R1,LP2 ;数据没有传送完继续 3 3查表指令查表指令 在在80C5l80C5l指令系统中,有指令系统中,有2 2条极有用的查表指令,其数据条极有用的查表指令,其数据表格放在程序存储器中。表格放在程序存储器中。MOVC AMOVC A,AAPC PC ;(;(PCPC)l lPCPC,(,(A A)(PCPC)A A MOVC A MOVC A,AADPTR DPTR ;((A A)()(DPTRDPTR)A A4 4堆栈操作指令堆栈操作指令 PUSH direct PUSH direct ;(;(SPSP)1 1SPSP,(,(directdirect)(SPSP)POP direct POP direct ;(;(SPSP)(directdirect),(SPSP)-1-1SPSPl例6 执行如下程序l 300H:MOV A,0DH ;0DHAl 302H:MOVC A,APC ;(0DH303H)Al 303H:MOV R0,A ;(A)R0l数据表格:l 310H:07Hl 311H:04Hl 312H:0AHl 结果:A07H,R007H,PC304Hl 例7 执行如下程序,l 104H:MOV A,12H ;12HAl 106H:MOV DPTR,2000H ;2000HDPTRl 109H:MOVC A,A+DPTR ;(12H+2000H)Al数据表格:l2010H:22H,34H,06H,48Hl 结果:A06H,PC100AH 例例8 8 已知片内已知片内RAM 60HRAM 60H单元中存放数值为单元中存放数值为86H86H,设堆栈指针为,设堆栈指针为30H30H,把此数值压入堆栈,然后,把此数值压入堆栈,然后再弹出到再弹出到50H50H单元中。单元中。l根据题意编写指令如下:l MOV SP,#30H ;30H SPl PUSH 60H ;(SP)+1SP,(60H)(31H)l POP 50H ;(31H)(50H),(SP)-1SPl程序执行过程示于图3-11。图3-11 例8程序执行示意图l5 交换指令 lXCH A,Rn ;A RnlXCH A,direct ;A(direct)lXCH A,Ri ;A(Ri)lXCHD A,Ri ;A.3A.0(Ri.3Ri.0)lSWAP A ;A.3A.0 A.7A.4l 这组指令的前三条为全字节交换指令。后两条为半字节交换指令。l图3-13 XCHD A,R0指令执行示意图 l传送指令使用注意事项:片内存储器可以以直接寻址的方式将数据从一个单元送到另一个单元;片内存储器的任一单元可以与工作寄存器或间址寄存器指定的地址单元间相互传送数据,但是,工作寄存器之间不能直接传送数据,也不能通过间址寄存器与片内存储器传送数据;立即数可以送到以寄存器间接寻址、直接寻址的方式的片内存储器的任一单元或工作寄存器;堆栈操作只能采用直接寻址方式。传送类指令一般不影响标志位,只有堆栈操作可以传送类指令一般不影响标志位,只有堆栈操作可以直接修改程序状态字直接修改程序状态字PSWPSW。另外,传送目的操作数为。另外,传送目的操作数为ACCACC的指令将影响奇偶标志的指令将影响奇偶标志P P。3.3.2 算术运算类指令算术运算类指令(共23条)算术运算类指令主要是对8位无符号数据进行算术操作,其中包括加(ADD)、带进位加(ADDC)、带借位减法(SUBB)、乘(MUL)、除(DIV)、加1(INC)、减1(DEC)指令;借助溢出标志,可对有符号数进行补码运算;借助进位标志,可进行多精度加、减运算;也可以对压缩BCD数进行加法运算。l1加法指令 l ADD A,Rn ;(A)(Rn)Al ADD A,direct ;(A)(direct)Al ADD A,Ri ;(A)(Ri)Al ADD A,data ;(A)dataAl2带进位加法指令 l ADDC A,Rn ;(A)(Rn)CY Al ADDC A,direct ;(A)(direct)CY Al ADDC A,Ri ;(A)(Ri)CY Al ADDC A,data ;(A)dataCY A位l3 3 带借位减法指令带借位减法指令 lSUBB A,Rn ;(A)(Rn)CY AlSUBB A,direct ;(A)(direct)CY AlSUBB A,Ri ;(A)(Ri)CY AlSUBB A,data ;(A)dataCY Al4乘法指令 lMUL AB ;(A)(B)BA,B158,A70l5除法指令 lDIV AB ;(A)(B)的商 A,余数 Bl6加一指令 lINC A;(A)1 AlINC Rn;(Rn)1 RnlINC direct;(direct)1(direct)lINC Ri;(Ri)1(Ri)lINC DPTR;(DPTR)1 DPTRl7减一指令 l DEC A ;(A)1 Al DEC Rn ;(Rn)1 Rnl DEC direct ;(direct)l (direct)l DEC Ri ;(Ri)1 (Ri)l8十进制调整指令 l DA A 算术运算类指令汇总图算术运算操作对PSW中标志位的影响指令PSW中的标志位COVACADDADDCSUBBMUL0DIV0 算术运算指令应用举例l例1 已知(A)DBH,(R4)73H,CY1,执行指令“SUBB A,R4”则结果如下:l(A)67H,CY0,OV1l例2 试编写计算1234H减0FE7H的程序,将和的高8位存入41H,低8位存入40H单元。l CLR C ;进位位C清“0”l MOV A,#34H ;34H Al SUBB A,#0E7H ;(A)E7HCY Al MOV 40H,A ;(A)(40H)l MOV A,#12H ;12H Al SUBB A,#0FH ;(A)0FHCY Al MOV 41H,A ;(A)(41H)3.3.3 逻辑运算类指令逻辑运算类指令(共25条)逻辑运算类指令主要用于对两个操作数按位进行逻辑操作,操作结果送到A 累加器或直接寻址单元,若直接地址为I/O端口,则为“读-改-写”操作。这类指令执行的操作主要有“与”(ANL)、“或”(ORL)、“异或”(XRL)以及累加器自身的循环移位、取反(CPL)、清除(CLR)等。这些指令执行时一般不影响程序状态字寄存器PSW,仅当目的操作数为ACC时对奇偶标志位有影响。1.逻辑“与”指令 ANL A,Rn ;(A)(Rn)AlANL A,direct ;(A)(direct)A lANL A,Ri ;(A)(Ri)AlANL A,#data ;(A)data AlANL direct,A ;(direct)(A)(direct)lANL direct,#data;(direct)data (direct)l2 逻辑或指令 lORL A,Rn ;(A)+(Rn)AlORL A,direct ;(A)+(direct)AlORL A,Ri ;(A)+((Ri)AlORL A,data ;(A)+data AlORL direct,A ;(direct)+(A)(direct)lORL direct,data;(direct)+data(direct)l3逻辑异或指令 lXRL A,Rn ;(A)(Rn)AlXRL A,direct ;(A)(direct)AlXRL A,Ri ;(A)(Ri)A XRL A,data ;(A)data AlXRL direct,A ;(direct)(A)(direct)lXRL direct,data;direct)data (direct)4 4循环移位指令循环移位指令 5取反指令 CPL A ;A5取反指令 CPL A ;Al5取反指令 l CPL A ;(/A)Al6清0指令 l CLR A ;0Al 2.逻辑运算指令举例例1 已知(A)1AH,(R0)45H,(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)结果(A)3BH,(R0)45H,(45H)39H,P1l例2 将累加器A中低4位的状态,通过P1口的高4位输出。l解:根据题意可编程如下:l ANL A,0FH ;屏蔽A.7A.4l SWAP A ;高、低半字节交换l ANL P1,0FH ;清P1口高4位l ORL P1,A ;使P1.7 P1.4按A中初始值的A.3A.0值置位l 3.3.4 转移操作类指令转移操作类指令(共17条)这类指令的功能主要是控制程序从原顺序执行地址转移到其它指令地址上。包括跳转、调用、散转、返回及空操作等操作。l1无条件转移指令 lLJMP addrl6 ;addrl6 PClAJMP addrl1 ;(PC)2 PC,addr11 PC.10 PC.0lSJMP rel ;(PC)2rel PCl2 条件转移 JZ rel ;A0:(PC)2rel PC A0:(PC)2 PCJNZ rel ;A0:(PC)2rel PC A0:(PC)2 PCDJNZ Rn,re1 ;(Rn)-1Rn,(Rn)0:(PC)2rel PC (Rn)0:(PC)2 PCDJNZ 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 PC,0 C (A)data(PC)3rel PC,0 C (A)data:(PC)3rel PC,1 CCJNE Rn,data,rel;(Rn)data:(PC)3 PC,0 C (Rn)data:(PC)3rel PC,0C (Rn)data :(PC)3rel PC,1 CCJNE Ri,data,rel;((Ri)data:(PC)3 PC,0 C (Ri)data:(PC)3rel PC,0 C (Ri)data:(PC)3rel PC,1 Cl3间接转移指令 l JMP ADPTR ;(A)(DPTR)PCl4调用子程序及返回指令 l LCALL addr16;(PC)3 PC,(SP)1 SP,l (PC.7PC.0)(SP),(SP)1 SP,(PC.15PC.8)(SP),addr16 PCl ACALL addr11;(PC)2 PC,(SP)1 SP,l (PC.7PC.0)(SP),(SP)1 SP,l (PC.15PC.8)(SP),addr11 PC.10PC.0l RET;(SP)PC.15PC.8,(SP)-1 SP,l (SP)PC.7PC.0,(SP)-1 SP RETI;除具有RET指令的功能外,还将清除优先级状态触发器,详见第6章l5空操作指令 l NOP 转移指令应用举例l例1 根据R7的内容,转向各个操作程序。l R70,转入OPR0l R71,转入OPR1 l l R7n,转入OPRnl解:MOV DPTR,JPTAB1;跳转表首地址送数据指针l MOV A,R7 ;R72 A(修正变址值)l ADD A,R7l JNC NOAD ;判有否进位 l INC DPH ;有进位则加到高字节地址lNOAD:JMP ADPTR ;转向形成的散转地址入口lJPTAB1:AJMP OPR0 ;直接转移地址表l AJMP OPR1l l AJMP OPRnl例2 某子程序SUB1入口地址是340BH,调用指令LCALL SUB1 地址为2042H,该段程序调用过程中PC及SP的变化如下:l地址 指令 注释l2040H MOV SP,#20H;设置堆栈指针,20HSPl2042H LCALL SUB1;调用子程序,2045HPC,21HSP,45H(21H),22HSP,20H(22H),340BHPCl340BH SUB1:MOV A,R0l3412H RET;(22H)PCH,(21H)PCL,l 此时PC2045H,SP20H例例3 3、根据、根据A A中数值,置相应的标志位。中数值,置相应的标志位。当当#dataLdataL A#dataHA#dataH,标志位,标志位F0F0清零;清零;否则否则F0F0置置1 1。l 解:ORG2000HST:CLRF0CJNEA,#dataH,HCNTRETHCNT:JCLCSF0:SETBF0RETLC:CJNEA,#dataL,LCNTRETLCNT:JCSF0RET 3.3.5 位操作类指令位操作类指令(共17条)包括位变量传送、逻辑运算、控制程序转移等指令。在进行位操作时,位累加器C为进位标志CY。在汇编语言中位地址的表达方式有如下几种:(l)直接(位)地址方式:如D4H;(2)点操作符号方式:如PSW.4,(D0H).4;(3)位名称方式:如RS1;(4)用户定义名方式:如用伪指令BIT 定义下式:SUB.REG bit RS1 经定义后,指令中可以用SUB.REG代替RS1。上面上面4 4种方式都可表达种方式都可表达PSWPSW(D0HD0H)中第中第4 4位,它的位地位,它的位地址是址是D4HD4H,名称为名称为RS1RS1,用户定义为用户定义为SUB.REGSUB.REG。l1.1.位操作指令分类位操作指令分类l位数据传送指令位数据传送指令:MOV C,bit ;bit C MOV bit,C ;C bit,对端口操作时,是“读改写”指令。l位逻辑运算指令位逻辑运算指令 ANL C,bit ;C bit C ANL C,/bit ;C /bit C ORL C,bit ;C bit C ORL C,/bit ;C /bit Cl位修正指令位修正指令 CLR C ;0 C CLR bit ;0 bit CPL C ;/C C CPL bit ;/bit bit SETB C ;1 C SETB bit ;1 bit 当直接位地址为端口中某一位时,具有“读改写”功能。l判位转移指令判位转移指令 JC rel ;C1:(PC)2rel PC C0:(PC)2 PCJNC rel ;C0:(PC)2re1 PC C1:(PC)2 PCJB bit,rel ;bit1:(PC)3rel PC bit0:(PC)3 PC JNB bit rel ;bit0:(PC)3rel PC bit1:(PC)3 PC JBC bit,rel ;bit1:(PC)3relPC,0 bit bit0:(PC)3 PCl例1 把Pl.3状态传送到Pl.7。按题意编写指令如下:l MOV C,P1.3 ;P1.3 C l MOV P1.7,C ;C P1.7l 例2 已知位0AH1,CY1。l 执行指令ANL C,0AH ;C 0AHC,C为1l 执行指令ORL C,/0AH ;C+/0AH C,C为12.2.2.2.位操作指令举例位操作指令举例位操作指令举例位操作指令举例l 例3 比较片内RAM 40H、50H中的两个无符号数大小,若40H中的数小则把片内 RAM中的40H位置1,若50H中的数小则把50H位置1;若相等则把20H位置1,然后返回。l 解:设程序起始地址为50H,根据题意可编程如下:l 地址 机器码 源程序l 50 E5 40 MOV A,40Hl 52 B5 50 03 CJNE A,50H,L1;两数不等 则转Lll 55 D2 20 SETB 20H ;两数相等,置20Hl 57 22 RETl 58 40 03 L1:JC L2 ;若C为“1”,则 (40H)中数小,转L2l5A D2 50 SETB 50H ;(50H)数小 则50H位置1l5C 22 RETl5D D2 40 L2:SETB 40H ;(40H)数小,则40H位置1l5F 22 RET