1、第三章 80C51单片机指令系统3.1指令系统概要一、指令系统分类及技术指标u共111种指令,按功能分为5类u数据传送(29条)u算术操作(24条)u逻辑操作(24条)u控制转移(17条)u布尔变量操作(17条)u指令字节数u单字节指令占44%u双字节指令占42%u三字节指令占15%u指令执行的时间单机器周期(12/fosc)58%双机器周期(24/fosc)41%两条指令是4个机器周期二、汇编语言中常用符号符号意义说明Rn当前寄存器R0R7RiR0或R1间址内低内低128BRAM外外256B RAMdirect直接地址内部RAM#data8位立即数在指令中#data1616位立即数在指令中a
2、ddr1111位目的地址2K ROMaddr1616位目的地址64K ROMrel8位相对地址-128127Bbit位地址内部RAM设:fosc=12MHz,则对应的机器周期为单机器周期=1s双机器周期=2 s4个机器周期=4 s每条指令由两部分组成:操作码:指令的功能操作对象:操作地址(含寄存器名地址)或数据操作码 1Byte操对象 12B 操对象1BX1 X2 EA PSEN ALE RST VCC GND 8051 P0 P1 P2 P3 P00P07 P10P17 P20P27 P30P37 3.2 8051存储器结构一、存储器结构一、存储器结构u8051单片机程序存储器和数据存储器分
3、开u由PSEN选通外部程序存储器,u由RD(P3.7)和WR(P3.6)读写外部数据存储器(MOVX)(一)程序存储器u存放程序或固定数据,只能取指令读或程序MOVC读取说明:1、8051可寻址64K程序空间;2、8051内部有4KBROM;3、执行到0FFFH到外部取指;4、8031无内部ROM;5、程序存储器访问通过(1)地址有效;(2)PSEN有效;0000H 0FFFH 0000H 0FFFH 1000H FFFFH 外部ROM 内部ROM EA=1 外部ROM EA=0 图3.1程序存储器示意图(二)数据存储区u8051分为片内数据存储器(256B)和片外数据存储器1、内部RAM由8
4、位地址线寻址u00H7FH:存储区u80H FFH:特殊功能寄存器区2、片外RAM由16位地址寻址 寻址空间64KB 片外数据存储器访问条件:(1)地址信号有效;(2)RD/WR信号有效;0000H FFFFH 00H 7FH 内部RAM 外部 RAM 64KB 图3.2数据存储器示意图 SFR 80H FFH 二、内部数据存储器二、内部数据存储器u内部数据存储器低128字节为RAMu高128字节为特殊功能寄存器区(一)RAM区1、通用寄存器区u4组8个8位寄存器R0R7u由PSW中的RS1,RS0选择当前工作区2、位寻址空间u20H2FH字节可以位寻址128位00H7FH3、寻址内部RAM空
5、间u30H7FH字节(80B)4、特殊功能寄存器u*表示 可以位寻址的寄存器(其地址可被8整除)u共21个SFR,离散分布u只能使用直接寻址标识符名 称地址*ACC累加器E0H*BB寄存器F0H*PSW程序状态字D0HSP堆栈指针81HDPTR数据指针(DPH和DPL)82H,83H*P0口080H*P1口190H*P2口2A0H*P3口3B0H*IP中断优先级寄存器B8H*IE中断控制寄存器A8HTMOD定时器方式寄存器89H*TCON定时器控制寄存器88H标识符名 称地址TH0计数器0高位8CHTL0计数器0低位8AHTH1计数器1高位8DHTL1计数器1低位8BH*SCON串行口控制98
6、HSBUF串行数据缓冲器99HPCON电源控制97H序号序号寻址方式寻址方式寻址存储器空间寻址存储器空间1寄存器寻址寄存器寻址R0R7(Rn)如MOV A,R0A,B,C,DPTR MOV A,DPTR2直接寻址直接寻址内部内部RAM(低低128B)如 MOV A,3AH特殊功能寄存器特殊功能寄存器(SFR)(3A)A3寄存器间接寄存器间接寻寻 址址内内RAM(R0,R1(Ri),SP)MOV A,R0外外RAM(R0,R1,DPTR)MOV A,DPTR (R0)A,(DPTR)A4立即数寻址立即数寻址程序存储器程序存储器ROM中的常数中的常数(#data)数38H,1234HMOV A,#
7、38H;MOV DPTR,#1234H5变址寻址变址寻址程序存储器程序存储器(A+PC,A+DPTR)MOVC A,A+PC (A)+(PC)AJMP A+DPTR (A)+(DPTR)PC6相对寻址相对寻址ROM256B范围范围(当前当前PC+/-偏移量偏移量rel)目标可以是寄存器,xx,直接7位寻址位寻址内部内部RAM的的20H2FH,16B(0127)MOV C,30H可位寻址的可位寻址的SFR(21个)(个)(128255)进位进位3.3 8051寻址方式(7种)和寻址空间3.4.1 数据传送指令(29条)一、向累加器、向累加器A的传送(目的)的传送(目的)uMOV A,Rn ;(A
8、)(Rn)uMOV A,direct;(A)(direct)uMOV A,Ri ;(A)(Ri)uMOV A,#data;(A)data二、向通用寄存器传送二、向通用寄存器传送uMOV Rn,A ;(Rn)(A)uMOV Rn,direct ;(Rn)(direct)uMOV Rn,#data ;(Rn)data三、向直接地址传送三、向直接地址传送uMOV direct,A ;(direct)(A)uMOV direct,Rn ;(direct)(Rn)uMOV direct,direct ;(direct)(direct)uMOV direct,Ri;(direct)(Ri)uMOV dir
9、ect,#data ;(direct)data四、间址传送四、间址传送uMOV Ri,A ;(Ri)(A)uMOV Ri,direct;(Ri)(direct)uMOV Ri,#data;(Ri)data3.4 MCS-51指令系统六、累加器传送指令六、累加器传送指令1)字节交换指令uXCH A,Rn ;(A)(Rn)uXCH A,direct ;(A)(direct)uXCH A,Ri ;(A)(Ri)2)半字节交换指令uXCHD A,Ri;(A03)(Ri)03)3)累加器高4位与低4位数据互换uSWAP A ;(A03)(A47)五、堆栈操作五、堆栈操作a)入栈指令uPUSH direc
10、t ;(sp)(sp)+1,;(sp)(direct)b)出栈指令uPOP direct ;(direct)(sp),;(sp)(sp)-14)累加器与外部RAM的传送uMOVX A,Ri;(A)(Ri)uMOVX A,DPTR;(A)(DPTR)uMOVX Ri,A;(Ri)(A),WR有效uMOVX DPTR,A;WR(P3.6)有效 ;(DPTR)(A)5)累加器与程序存储器传送uMOVC A,A+DPTR ;(A)(A)+(DPTR)uMOVC A,A+PCu;(PC)(PC)+1,(A)(A)+(PC)七、目标地址传送指令七、目标地址传送指令uMOV DPTR,#data16 ;(D
11、PTR)data164、十进制调整指令uDA Au;对(A)的加结果加结果进行十进制调整3.4.2 算术运算指令(24条)一、加法指令1、加法uADD A,Rn ;(A)(A)+(Rn)uADD A,direct ;(A)(A)+(direct)uADD A,Ri ;(A)(A)+(Ri)uADD A,#data ;(A)(A)+data注:加注:加/减法指令影响减法指令影响Ac,Cy,OV,P3、加1指令uINC A ;(A)(A)+1uINC Rn ;(Rn)(Rn)+1uINC direct;(direct)(direct)+1uINC Ri ;(Ri)(Ri)+1uINC DPTR ;
12、(DPTR)(DPTR)+1注:加注:加/减减1指令不影响指令不影响PSW(Cy)2、带进位加法uADDC A,Rn ;(A)(A)+(Rn)+(C)uADDC A,direct;(A)(A)+(direct)+(C)uADDC A,Ri ;(A)(A)+(Ri)+(C)uADDC A,#data;(A)(A)+data+(C)三、乘法指令MUL AB;(BA)(A)*(B)(A)0FFH,则OV=1,(B)=非零 否则,OV=0,(B)=0四、除法指令DIV AB ;(A)(A)/(B);(B)(A)%(B)Cy=OV=0若(B)=00H,(A)和(B)结果不定,置OV=1,表示0除数错误(
13、Cy=0)a)无不带借位指令b)使用前要先CLR C,使Cy=0c)影响标志位PSW:Cy,AC,OV,P二、减法指令1、带借位减法指令uSUBB A,Rn ;(A)(A)-(Rn)-(C)uSUBB A,direct ;(A)(A)-(direct)-(C)uSUBB A,Ri ;(A)(A)-(Ri)-(C)uSUBB A,#data ;(A)(A)-data-(C)2、减1指令uDEC A ;(A)(A)-1uDEC Rn ;(Rn)(Rn)-1uDEC direct ;(direct)(direct)-1uDEC Ri ;(Ri)(Ri)-1不影响PSW 6、累加器A带进位循环右移RR
14、C A;3.4.3 逻辑运算指令(24条)一、单操作数逻辑运算指令1、累加器A清零CLR A ;(A)03、累加器A循环左移 RL A;D 7 D 0 A D 7 D 0 A 4、累加器A循环右移 RR A;D7 D0 C A 5、累加器A带进位循环左移RLC A;D7 D0 C A 2、累加器A取反CPL A ;(A)(A)RLC A:可以实现快速(A)2RRC A:可以实现快速(A)/2二、双操作数逻辑运算指令1.逻辑操作指令只影响标志位P2.1、逻辑“与”指令uANL A,Rn ;(A)(A)&(Rn)uANL A,direct ;(A)(A)&(direct)uANL A,Ri ;(A
15、)(A)&(Ri)uANL A,#data ;(A)(A)&datauANL direct,A ;(direct)(direct)&(A)uANL direct,#data ;(direct)(direct)&data2、逻辑“或”指令uORL A,Rn ;(A)(A)|(Rn)uORL A,direct ;(A)(A)|(direct)uORL A,Ri ;(A)(A)|(Ri)uORL A,#data ;(A)(A)|datauORL direct,A ;(direct)(direct)|(A)uORL direct,#data ;(direct)(direct)|data(2)长调用(6
16、4K)uLCALL addr16 ;(pc)(pc)+3 ;(sp)(sp)+1,(sp)(pc07);(sp)(sp)+1,(sp)(pc815);(pc)addr16uXRL A,Rn ;(A)(A)(Rn)uXRL A,direct ;(A)(A)(direct)uXRL A,Ri ;(A)(A)(Ri)uXRL A,#data;(A)(A)datauXRL direct,A;(direct)(direct)(A)uXRL direct,#data;(direct)(direct)data4.5 控制转移指令(17条)一、无条件转移指令1、调用指令(1)绝对调用(2K)uACALL ad
17、dr11 ;(pc)(pc+2);(sp)(sp)+1,(sp)(pc07);(sp)(sp)+1,(sp)(pc815);(pc010)addr010 ;(pc1115)不变3、“异或”指令(3)相对转移(短转移)uSJMP rel ;(pc)(pc)+rel(2)中断程序返回uRETI ;(pc815)(sp),(sp)(sp)-1;(pc07)(sp),(sp)(sp)-1;开放中断逻辑5、空操作指令uNOP ;(pc)(pc)+1用于产生一个机器周期的延迟4、间接转移指令(散转指令)uJMP A+DPTR ;(pc)(A)+(DPTR)3、转移指令(1)绝对转移(短转移)uAJMP a
18、ddr11 ;(pc010)addr010 ;(pc1115)不变2、返回指令(1)子程序返回(ACALL和LCALL)uRET ;(pc815)(sp),(sp)(sp)-1;(pc07)(sp),(sp)(sp)-1(2)长转移uLJMP addr16 ;(pc)addr16二、条件转移指令1、判零转移指令(1)JZ rel ;当(A)为0,则(pc)(pc)+rel ;否则,顺序执行(2)JNZ rel ;当(A)非0,则(pc)(pc)+rel ;否则,顺序执行3、跳转循环指令(内容0)uDJNZ Rn,rel;(Rn)(Rn)-1,;若(Rn)非0,则(pc)(pc)+rel;否则,
19、顺序执行uDJNZ direct,rel ;(direct)(direct)-1,;若(direct)非0,则(pc)(pc)+rel;否则,顺序执行2、比较转移指令(-128B+127B)uCJNE A,direct,reluCJNE A,#data,reluCJNE Rn,#data,reluCJNE Rn,#data,rel ;若不相等,(pc)(pc)+rel ;否则,顺序执行3.4.4 布尔处理器指令(布尔处理器指令(17条)条)u8051的位(布尔)处理器具有一系列位指令集u布尔变量传送u位状态控制u布尔逻辑运算u位条件转移u位变量地址空间片内低RAM,Bit地址范围:00H7FH
20、(128位)片内高RAM,地址能被8整除的SFR中对应各位(11个):80HF7H图3.3内部RAM区 寄存器组0(R0R7)00H 07H 08H 0FH 10H 17H 18H 1FH 20H 2FH 30H 7FH 00 78 07 06 05 04 03 02 01 7F 7E 7D 7C 7B 7A 79 寄存器组1(R0R7)寄存器组2(R0R7)寄存器组3(R0R7)位地址区(007F)字节寻址(307F)MOV C,bit ;(C)(bit)MOV bit,C ;(bit)(C)C为进位标志位Cy(不影响PSW)二、布尔状态控制1、位清“0”指令CLR C ;(C)0CLR b
21、it ;(bit)02、位置“1”指令SETB C ;(C)1SETB bit ;(bit)13、位取反指令 CPL C ;(C)(C)CPL bit ;(bit)(bit)四、位条件转移指令1、判断C转移JC rel ;当(C)为1,则(pc)(pc)+rel ;否则,顺序执行JNC rel ;当(C)为0,则(pc)(pc)+rel ;否则,顺序执行三、位逻辑运算1、位逻辑“与”指令ANL C,bit ;(C)(C)&(bit)ANL C,/bit ;(C)(C)&(bit)2、位逻辑“或”指令 ORL C,bit ;(C)(C)|(bit)ORL C,/bit ;(C)(C)|(bit)
22、一、布尔数据传送指令pc+rel中,(pc)表示为当前的指令地址即:执行跳转指令后的下一条指令地址3、判断位变量转移并清0指令uJBC bit,rel;当(bit)为1,则(bit)0,(pc)(pc)+rel;否则,顺序执行 可用于对可用于对SFRSFR的的bitbit检测和软件复检测和软件复位(位(TFXTFX)2、判断位变量转移指令uJB bit,rel ;当(bit)为1,则(pc)(pc)+rel ;否则,顺序执行uJNB bit,rel ;当(bit)为0,则(pc)(pc)+rel ;否则,顺序执行例题:比较内部比较内部RAM的的DATA1和和DATA2 中的两个中的两个无符号数的大小,大数存入单元无符号数的大小,大数存入单元M,小数存入单元小数存入单元N,若两数相等使内部若两数相等使内部RAM位单元位单元127置置1。COMP:MOV A,DATA1CJNE A,DATA2,BIGSETB 127 ;两数相等RETBIG:JCLESS ;若Cy=1则 ;DATA1小MOVM,AMOVN,DATA2RETLESS:MOVN,AMOVM,DATA2RET