2020/2/16第4章80C51单片机指令系统1/89第4章80C51单片机指令系统4.1单片机指令系统概述4.280C51单片机指令寻址方式4.380C51单片机指令分类介绍2020/2/16第4章80C51单片机指令系统2/894.1单片机指令系统概述第4章80C51单片机指令系统2020/2/16第4章80C51单片机指令系统3/894.1.1指令概述指令:是CPU根据人们的意图来执行某种操作的命令。指令系统:是计算机所能够执行的全部指令的集合。程序:是按人们的要求所编制的指令操作序列。程序设计语言:是编写程序的某种规则。三类编程语言:机器语言、汇编语言、高级语言2020/2/16第4章80C51单片机指令系统4/89•机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。•汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。•本章主要介绍80C51单片机的汇编语言指令系统。2020/2/16第4章80C51单片机指令系统5/894.1.2指令格式和指令的表示形式80C51汇编语言指令格式[标号:]操作码[目的操作数][,源操作数][;注释]2020/2/16第4章80C51单片机指令系统6/89例如标号字段:操作码操作数;注释字段START:MOVA,#00H;0→AMOVR1,#10;10→R1MOVR2,#00000011B;3→R2LOOP:ADDA,R2;(A)+(R2)→ADJNZR1,LOOP;R1内容减1不为零,则跳转到;LOOP一行,循环NOPHERE:SJMPHERE2020/2/16第4章80C51单片机指令系统7/894.1.3指令中的常用符号1.Rn(n=0~7)当前选中的工作寄存器R0~R72.Ri(i=0,1)当前选中的、作地址指针的寄存器R0、R13.#data8位立即数4.#data1616位立即数如:MOVDPTR,#data165.direct8位片内RAM单元(包括SFR)的直接地址如:MOVdirect,#data;#datadirect6.addr1111位目的地址,用于ACALL和AJMP指令中7.addr1616位目的地址,用于LCALL和LJMP指令中2020/2/16第4章80C51单片机指令系统8/898.rel补码形式的8位地址偏移量9.bit片内RAM或SFR的直接寻址的位地址10.@间接地址方式中,表示间址寄存器的符号11./对位取反操作如:ANLC,/P1.212.(×)指“×”中的内容,其内容是数据;×是地址13.((×))由“×”间接寻址单元中的内容,×中的内容“(×)”是地址如:设58H单元的数据是36H,R0的内容是58HINC58H;(58H)+158HDEC@R0;((R0))-1(R0)14.示将箭头左边的内容传送到箭头右边的单元2020/2/16第4章80C51单片机指令系统9/894.1.4指令的字节数和指令周期汇编语言指令对应的二进制代码格式:单字节指令双字节指令三字节指令单字节指令1、指令码中隐含着对某一种寄存器的操作如:指令“INCDPTR”的指令代码格式为:A3H=101000112、由指令中的rrr三位的不同编码指定某一寄存器如:指令“MOVA,Rn”的指令代码格式为:11101rrr2020/2/16第4章80C51单片机指令系统10/89双字节指令•用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。•格式为:操作码立即数或地址三字节指令•一个字节操作码,两个字节操作数。•格式为:操作码立即数或地址立即数或地址2020/2/16第4章80C51单片机指令系统11/894.280C51单片机指令寻址方式第4章80C51单片机指令系统2020/2/16第4章80C51单片机指令系统12/89寻址方式概述寻址方式:就是指令中找到操作数或操作数地址的方式。80C51单片机有七种寻址方式:1、立即寻址2、直接寻址3、寄存器寻址4、寄存器间接寻址5、变址寻址6、相对寻址7、位寻址2020/2/16第4章80C51单片机指令系统13/894.2.1立即寻址操作数在指令中,在操作码后面。用“#”表示。操作数可以是8位的,也可以是16位的。例如:MOVA,3AH;(3AH)AMOVA,#3AH;3AHAMOVDPTR,#23C8H;23C8HDPTRADDA,#0D4H;(A)+0D4HA2020/2/16第4章80C51单片机指令系统14/894.2.2直接寻址直接寻址:在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。•直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。例如:MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址2020/2/16第4章80C51单片机指令系统15/894.2.3寄存器寻址操作数在某一个寄存器中。所用的寄存器可以是:R0~R7、A、B、DPTR等。例如:MOVA,R0;(R0)ADECB;(B)-1BADDA,R1;(A)+(R1)AINCDPTR;(DPTR)+1DPTR2020/2/16第4章80C51单片机指令系统16/894.2.4寄存器间接寻址指令中寄存器中的内容给出的是操作数的地址。80C51规定:R0、R1和DPTR可以作为间接寻址寄存器。1.R0、R1间址访问片内RAM的低128B或片外RAM的低256B空间如:设(R0)=65H,(65H)=47HMOVA,@R0;(65H)A,A中的值是47HMOV@R0,#3AH;3AH65HMOVXA,@R0;外RAM的(65H)A2020/2/16第4章80C51单片机指令系统17/89•例如:将片内RAM30H单元内容56H送A,可执行指令“MOVA,@R0”。其中R0内容为30H。如图所示:30H56HR0A56H数据存储器地址┋┋30H①②以指令中所指定的R0内容(30H)为指针将片内RAM30H单元内容56H送A2020/2/16第4章80C51单片机指令系统18/892、DPTR间址访问片外RAM的64KB空间如:设(DPTR)=2000HMOVX@DPTR,A;A外RAM的2000H单元MOVXA,@DPTR;外RAM的2000H单元A2020/2/16第4章80C51单片机指令系统19/894.2.5变址寻址变址寻址:以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。•80C51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。•变址寻址只能访问程序存储器,访问范围64KB。2020/2/16第4章80C51单片机指令系统20/89例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如图所示56H2020HROMDPTRA执行前A执行后2000H20H56H+①②DPTR内容与A的内容之和为程序存储器地址程序存储器内容送A2020/2/16第4章80C51单片机指令系统21/894.2.6相对寻址相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。•相对寻址只出现在相对转移指令中。•当前的PC值是指执行完相对指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。•目的地址=源地址+相对转移指令字节数+rel•rel为补码表示的有符号数。2020/2/16第4章80C51单片机指令系统22/89例如:SJMP54H;PC←PC+2+54HROM80H2000H54H2001H2002H...2056H操作码操作数加上偏移量rel=54H2020/2/16第4章80C51单片机指令系统23/894.2.7位寻址位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CLRbitMOVACC.0,11H;ACC.0←(11H)位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。2020/2/16第4章80C51单片机指令系统24/89操作数寻址方式和有关空间寻址方式寻址空间立即数寻址程序存储器ROM直接寻址片内RAM低128B、特殊功能寄存器寄存器寻址工作寄存器R0-R7、A、B、C、DPTR寄存器间接寻址片内RAM低128B、片外RAM变址寻址程序存储器(@A+PC,@A+DPTR)相对寻址程序存储器256B范围(PC+偏移量)位寻址片内RAM的20H-2FH字节地址、部分SFR2020/2/16第4章80C51单片机指令系统25/894.380C51单片机指令分类介绍第4章80C51单片机指令系统2020/2/16第4章80C51单片机指令系统26/89指令系统概述(共111条指令)按字节数分:单字节指令49条,双字节指令46条,三字节指令16条。按执行时间分:单机器周期指令64条,双周期指令45条,四周期指令2条(乘、除指令)按功能分:80C51指令系统分为五大类:数据传送指令(29条)算术运算指令(24条)逻辑运算及位移指令(24条)控制转移指令(17条)位操作或布尔操作(17条)2020/2/16第4章80C51单片机指令系统27/89外部RAM外部ROM累加器Adirect@RiRn#data数据传送类指令的传送关系图4.3.1数据传送指令不允许的操有:@Ri@RiRnRn@RiRn2020/2/16第4章80C51单片机指令系统28/891.以A为目的操作数的指令(4条)MOVA,Rn;(Rn)AMOVA,direct;(direct)AMOVA,@Ri;((Ri))AMOVA,#data;dataA如:MOVA,R2MOVA,30HMOVA,@R0MOVA,#36H内部RAM数据传送指令组2020/2/16第4章80C51单片机指令系统29/89指令格式机器码字节数指令周期MOVA,RnE8H-EFH11MOVA,directE5××H21MOVA,@RiE6H-E7H11MOVA,#data74××H21MOVA,R211MOVA,30H21MOVA,@R011MOVA,#36H21EAHE530HE6H7436H2020/2/16第4章80C51单片机指令系统30/892020/2/16第4章80C51单片机指令系统31/89MOVRn,A;(Rn)RnMOVRn,direct;(direct)RnMOVRn,#data;dataRn如:MOVR0,AMOVR3,30HMOVR7,#36HMOVR1,#30MOVR6,#01101100B2.以Rn为目的操作数的指令(3条)2020/2/16第4章80C51单片机指令系统32/89指令格式机器码字节数指令周期MOVRn,AF8H-FFH11MOVRn,directA8**H-AF**H22MOVRn,#data78××H-7F××H21MOVR0,A11MOVR3,30H22MOVR1,#3021MOVR6,#01101100B21F8HAA30H7914H7E6CH2020/2/16第4章80C51单片机指令系统33/893.以直接地址为目的操作数的指令(5条)MOVdirect,A;(A)directMOVdirect,Rn;(Rn)directMOVdirect,direct;(源direct)目的directMOVdirect,@Ri;((Ri))directMOVdirect,#data;datadirect如:MOV30H,AMOVP1,R2MOV38H,60HMOVTL0,@R1MOV58H,#36H2020/2/16第4章80C51单片机指令系统34