第三章MCS-51微处理器指令系统在51单片机系统中,程序是由一条条指令组合而成,指令是最小的功能单元。3.1指令系统基础3.1.1指令格式与符号约定1.汇编指令格式助记符目的操作数,源操作数助记符用来表达指令操作功能,如MOVANLINC,操作数则是指令操作的参数2.指令代码格式指令代码是指令的二进制数字表示和存储方法,根据指令代码长度,可分为单字节、双字节、三字节指令。3.1.2指令系统支持的数据形式MCS-51指令系统支持的二进制数据格式有位、字节、短整数和字这四种。1、位(bit):指的是1位二进制数,MCS-51的布尔处理器通过指令系统的17条位操作指令支持位数据的操作;2、8位无符号二进制数,取值范围为0~255。MCS-51指令系统中除位操作指令之外的绝大多数指令都支持字节数据的操作;3、8位有符号二进制数,取值范围为-128~+127。MCS-51指令系统中加、减法算术运算指令支持补码形式短整数数据的操作;4、字(word):指的是16位无符号二进制数,取值范围为0~65535。MCS-51指令系统中仅数据指针DPTR装载、自增及8位×8位的乘法指令等少量指令支持字数据的操作。3.1.3指令系统支持的寻址方式操作数据的寻址即确定数据存放在何处。在MCS-51单片机中,操作数的存放范围很宽,可放在片外ROM/RAM中,也可放在片内ROM/RAM或特殊功能寄存器中。1、立即寻址所谓立即寻址就是操作数在指令操作码后直接给出。通常把在指令中出现的操作数称为立即数,用#data(8位立即数)或#data16(16位立即数)表示。MOVA,#40HMOVDPTR,#1828H;74h,40h;90h,18h,28h2、直接寻址直接寻址是指令直接给出操作数所在单元的地址。MOVA,65HMOV65H,A88H累加器A片内RAM88H65H图3-1直接寻址示意图3、寄存器寻址寄存器寻址就是操作数在寄存器中,指定了寄存器就得到了操作数。MOVA,R0这里的寄存器是通用寄存器R0~R7,4、寄存器间接寻址寄存器间接寻址是以指定寄存器中内容为地址,由该地址所指定的单元内容作为操作数的寻址方式。MCS-51规定R0或R1为间接寻址寄存器,可寻址内部RAM单元内容。还可以采用数据指针DPTR作为间接寻址寄存器,寻址外部数据存储器的64K字节空间。MOVA,@R0;A←(R0)片内RAMR0A3A65H00H3AH65H图3-2寄存器间接寻址示意图5、变址寻址变址寻址是以DPTR或PC作为基址寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址作为操作数的地址,故亦称之为基址寄存器加变址寄存器间接寻址。MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR02H03H00H程序存储器ADPTRALU0000H0302H65H图3-3变址寻址示意图6、相对寻址相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所采用。在相对转移指令中给出了相对偏移量(rel),把PC的当前值加上偏移量就构成了程序转移的目的地址。目的地址=转移指令地址+该指令字节数+relJCrel;若Cy=1,则PC←PC+2+rel,若Cy=0,则PC←PC+275H20H02H程序存储器APCALU0000H2077H图3-4相对寻址示意图2001H2002H2000H40H75H7、位寻址位寻址指令的机器码中含有位地址,计算机根据机器码中的位地址就可以找到位操作数,完成相应位操作。位地址用bit表示。位寻址的寻址范围包括:片内RAM的位寻址区,单元地址为20H~2FH,共16个字节,128位,位地址的范围为00H~7FHMOVC,7FH;Cy←(7FH)3.1.4指令系统支持的辅助结果PSWRS1RS0CyACF0OV—PRS1RS000110101组号R0~R7物理地址012300H~07H08H~0FH10H~17H18H~1FH3.2数据传送类指令MOV〈目的字节〉,〈源字节〉功能是把源字节送到目的字节单元,源字节不变。1、片内RAM及寄存器数据传送指令1)八位数传送指令:MOVd,s;d:A,Rn,direct,@Ri;;s:A,Rn,direct,@Ri,#dataRn(n=0-7)Ri(I=0,1)@RiRn#datadirectA十六位传送指令:MOVDPTR,#data16入栈指令:PUSHdirect出栈指令:POPdirect指令举例:MOVA,#3MOV@R0,3MOVR7,AMOV45H,67HPUSHACCPOP34HMOVDPTR,#3000H注意以下指令:MOV@R0,@R1MOVA,AMOV#20,AMOVR0,R2MOVR3,@R1MOV@R7,AMOVDPTR,APUSHAPUSHR0PUSH#3MOVDPTR,3MOVDPTR,ACCMOV@R0,#3MOVDPTR,#3例子MOVB,#14HMOVSP,#57HMOVA,#32HPUSHACCPUSHB;(57H),(58H),(59H)?SP?POPACCPOPB;(57H),(58H),(59H)?SP,ACC,B?(57H)=原来的数,(58H)=32H,(59H)=14H,SP=59H(57H)=原来的数,(58H)=32H,(59H)=14H,SP=57H,ACC=14H,B=32H2.片外RAM数据传送指令MOVXMOVX@DPTR,A;将(A)送DPTR指出的片外RAM地址单元,即写片外存储器。MOVXA,@DPTR;将DPTR指出的片外存储单元内容读入A中。MOVXA,@Ri;用P2作高位地址,与Ri中的低8位;地址组成16位地址,对MOVX@Ri,A;片外RAM进行读写操作。3、程序存储器查表指令MOVCMOVCA,@A+DPTR;用DPTR基址寄存器,与变址寄存器A中的内容相加作寻址地址,将该地址单元的内容取出,放入A内。MOVCA,@A+PC;将PC指针作基址寄存器,与变址寄存器A中的内容相加作为地址,查出该地址的内容送A。4.数据交换指令(均以A为目的操作数)XCHA,Rn/@Ri/direct;全交换指令,两个8位单元内容彼此互换。XCHDA,@Ri;半字节交换,两个8位单元中的低4位互换。SWAPA;自交换指令,累加器中高、低4位内容互换。例如:MOVA,#34HMOVR0,#30HMOV30H,#56HXCHA,30H;A=56H,(30H)=34HXCHA,@R0;A=34H,(30H)=56HXCHDA,@R0;A=36H,(30H)=54HSWAPA;A=63H,(30H)=54H3.3数据运算类指令有加法ADD,带进位加ADDC,带借位减SUBB,乘MUL,除DIV,自加/减指令INC/DEC等。一.特点:算术指令均以累加器A为目的操作数,且对PSW有影响。加减运算中源操作数有Rn,@Ri,direct和#data。乘除法用A,B寄存器对。二.指令功能:(1)加法ADDA,(源);(源)+AA带进位加ADDCA,(源);(源)+A+CY--A(2)带进位减SUBBA,(源);A-(源)-CYA(3)自加INCs;s+1-s,s有A,Rn,@Ri,direct,DPTR。(4)自减DECs;s-1s,自减1的源为A,Rn,@Ri,direct。INC/DEC指令不影响标志(5)乘法指令MULAB;将A、B中无符号8位数相乘,高位进B,低位进A。CY=0;如B!=0,OV=1除法指令DIVAB;将A中无符号8位二进制数除以B中8位无符号数,商进A,余数进B。CY=0,如除数为0,则OV=1(6)十进制调整DAA;对A中BCD码的加法结果进行调整。参加运算的必须是BCD码,必须是加法指令后MOV0D0H,#0ADDA,#0例子MOVA,#90HADDA,#8;A=98H,CY=0,OV=0,AC=0,P=1MOVR0,#97HADDCA,R0;A=2FH,CY=1,OV=1,AC=0,P=1ADDCA,#0;A=30H,CY=0,OV=0,AC=1,P=0例子求BCD码56+27=8356的BCD码=56H,27的BCD码27H01010110+)00100111011111017DH+)000001101000001183H3.4逻辑操作类指令包括:与ANL、或ORL、异或XRL,以及累加器A清零、求反、移位等指令。特点:①累加器A与direct可以进行双向逻辑运算,与Rn、@Ri、#data逻辑运算时只能作源操作数。②CLRA、CPLA以及移位指令为单操作数运算,其它逻辑运算为双操作数。指令功能:①(A)清零:CLRA;②(A)取反:CPLA;③循环左/右移:RLA/RRA;④带进位CY的循环左/右移:RLCA/RRCA;⑤与、或、异或运算:(以A为目的操作数)⑥以direct为目的操作数ANLRnORLAdirectXRL@Ri#dataANLAORLdirect,#dataXRLRLAA:1011001001100101RRAA10110010A01011001RLCAACY101100101011001011RRCAACY101100101110110010举例ANLA,30HORLA,#4XRLA,@R1ANLA,R5ANL32H,AXRL33H,#45HADDA,#0;C=0MOVA,#93HRLCA;A=26H,C=1RLCA;A=4DH,C=0MOVA,#23HRLA;A=46HRRA;A=23HMOVA,#93HRLA;A=27HRRA;A=93HRRA;A=C9HACY0010011010100110103.5程序控制类指令包括无条件转移、条件转移、循环转移、调用和返回、空操作指令。一.特点:①不同指令的转移范围不同:相对转移或短转移rel为-128~+127;绝对转移范围2KB;长转移范围64KB。②跳转指令不用返回;调用子程序和中断服务子程序必须用RET和RETI返回。二.指令功能:1.无条件转移:LJMPaddr16;长转移,64KB范围addr16--PCAJMPaddr11;绝对转移,2KB范围addr11PC10-0SJMPrel;短转移,-128~+127BPC+rel+2PCJMP@A+DPTR;散转(间接转移)DPTR+APCACALLaddr11;绝对调用LCALLaddr16;长调用,RET;子程序返回RETI;中断返回调用子程序时,先将PC指针当前地址加上调用指令字节数,得到下一条指令的指向地址进栈,然后跳到调用子程序指令指出的地址指向子程序,遇到返回指令就将进栈地址取回到PC指针,继续按顺序执行程序。2.条件转移(全为相对转移,范围-128~+127,rel=目标地址-PC当前地址)①累加器A为“0”或者非“0”转移:JZrel;JNZrel;PC+rel+2PC②比较不等转移:CJNEs,d,rel;两者相减,不等转移PC+rel+3PC;若目的数小于源数,CY置1CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel③减1非“0”转移:DJNZRn,rel;对Rn内容减1,非0转移PC+2+relDJNZdirect,rel;对内存内容减1,非0转移PC+3+rel④位条件转移:JC/JNCrel;判断CY为1或CY非1转移+2JB/JNBbit,rel;判断指定位为1或非1转移+3JBCbit,rel;判断指定位为1转移,并清该位+33.空操作:NOP;仅此一条指令,不作任何操作,相当于延时1个机器周期。3.6布尔操作类指令一.有位传送、位控制、位逻辑运算、位判断转移等特点:用位累加器CY作目的操作数,位判断转移均为相对转移二.指令功能:①位传送:MOVC,bit或MOVbit,C②位设置:SETBC;C1SETBbit;bit1CLRC;C0CLRbit;bit0③位运算:只有位与,或,非,没有位异或