分类指令
在介绍各条分类指令之前,将指令中的操作数及注释中的符号阐明如下。
Rn:当时指定的作业寄存器组中的Ro-R7(其间n=0,1,2,…,7)。
Ri:当时指定的作业寄存器组中的RO,R1(其间i=0,1)。
(Ri):Ri间址寻址指定的地址单元。
((Ri)):Ri间址寻址指定地址单元中的内容。
dir:8位直接字节地址(在片内RAM和SFR存储空间中)。
#data8:8位当即数。
#datal6:16位当即数。
addrl6:16位地址值。
addrll:11位地址值。
bit:位地址(在位地址空间中)。
rel:相对偏移量(一字节补码数)。
下面介绍各条分类指令的首要功能和操作,具体的指令操作阐明及机器码方式可见附录。
一、数据传送与交流类指令
共有28条指令,包含以A,Rn,DPTR,直接地址单元,直接地址单元为意图的操作数的指令;拜访外部RAM的指令;读程序存储器的指令;数据交流指令以及准栈操作指令。
1.以A为意图的操作数
MOVA,Rn; A=”Rn”
MOVA,dir; A=(dir)
MOVA,@Ri; A=((Ri))
MOVA,#data; A=”#data”
2.以Rn为意图的操作数
MOVRn,A; Rn=”A”
MOVRn,dir; Rn=(dir)
MOVRn,#data; Rn=”#data”
3.以DPTR为意图的操作数
MOVDPTR,#data16;DPTR=#data16
4.以直接地址为意图的操作数
MOVdir,A; dir=”A”
MOVdir,Rn; dir=”Rn”
MOVdir,dir’; dir=(dir’)
MOVA,@Ri; dir=((Ri))
MOVA,#data; dir=”#data”
5.以直接地址为意图的操作数
MOV@Ri,A; (Ri)=A
MOV@Ri,dir; (Ri)=dir
MOV@Ri,#data; (Ri)=#data
6.拜访外部数据RAM
MOVXA,@DPTR;A=((DPTR))
MOVXA,@Ri;A=((P2 Ri))
MOVX@DPTR,A;(DPTR)=A
MOVXRi,A;(P2 Ri)=A
例1:DPTR=2000H,外部RAM(2000H)=18H,指令MOVX A,@DPTR履行后,A=18H。
例2:P2=10H,R1=50H,A=64H,指令MOVX @R1,A履行后,外部RAM(1050H)=64H。
7.读程序存储器
MOVCA,@A+DPTR;A=((A+DPTR))
MOVCA,@A+PC;A=((A+PC))
8.仓库操作
PUSH dir;SP十1-6P,(dir)一(SP)
POP dir;((SP))一dir,SP-1–P,
例1:SP=07H,(35H)=55H,指令PUSH 35H履行后,55H送入08H地址单元,SP=08H。
例2:SP=13H,(13H)= 1FH,指令POP 25H履行后,1FH压入25H地址单元,SP此刻为12H。
二、算术运算类指令
共有24条指令,首要包含加、减、乘、除、增量、减量和十进制调整等指令。其间,大多数指令都一起以A为源操作数之一和意图操作数。
1.加指令
ADDA,Rn; A+Rn=A
ADDA,dir; A+(dir)=A
ADDA,@Ri; A+((Ri))=A
ADDA,#data; A+#data=A
2.带进位加
ADDCA,Rn; A+Rn+C=A
ADDCA,dir; A+(dir)+C=A
ADDCA,@Ri; A+((Ri))+C=A
ADDCA,#data; A+#data+C=A
3.带借位减
SUBBA,Rn; A-Rn-C=A
SUBBA,dir; A-(dir)-C=A
SUBBA,@Ri; A-((Ri))-C=A
SUBBA,#data; A-#data-C=A
阐明:借位位来自程序状态字PSW中的进位位C,只是在作减法运算时,被用作借位位。
例:A=38H,R1=20H,(20H)=23H,C=1指令SUBB A,@R1履行后,A=14H。
4.乘法指令
MUL AB;A×B = BA
阐明:本指令完成8位无符号乘法。A,B中各放一个8位乘数,指令履行后,16位积的高位在B中,低位在A中。
例A=50H,B=40H,指令MUL AB履行后,A=00H,B=32H
5.除法指令
DIV AB;A÷B的商在A中,余数在B中
阐明:本指令完成8位无符号除法。A放被除数,B放除数,指令履行后,A中为商,B中为 余数。若除数B=00H,则指令履行后,溢出标志OV=1,且A,B内容不变。
例1:A=28H,B=12H,指令DIV AB履行后,A=02H,B=04H。
例2:A=08H,B=09H,指令DIV AB履行后,A=00H,B=08H。
6.增量
INCA
INCRn
INCdir
INC@Ri
INCDPTR
7.减量
DECA
DECRn
DECdir
DEC@Ri
DECDPTR
8.十进制调整
DAA;把A中按二进制相加后的成果调整成按BCD数相加的成果
归纳例1:把在R4和R5中的两字节数取补(高位在R4中)
CLRC
MOVA,R5
CPLA
INCA
MOVR5,A
MOVA,R4
CPLA
ADDCA,#00H
MOVR4,A
SJMP$
归纳例2:把R7中的无符号数扩展10D倍(设原数小于25D)
MOVA,R7
MOVB,#0AH
MULAB
MOVR7,A
SJMP$
归纳例3:把R1R0和R3R2中的2个4位跃D数相加,成果送入R5R4中,如有进位则存于进位位C中。
CLRC
MOVA,R0
ADDA,R2
DAA
MOVR4,A
MOVA,R1
ADDCA,R3
DAA
MOVR5,A
SJMP$
在MCS-51系列单片机的算术运算类指令中,乘除法指令是许多8位微处理器和一些8位单片机所没有的,履行时间为4个机器周期。这种指令对编制比较复杂的运算程序,例如,份额-积分-微分(PID)运算、浮点运算、多字节数乘除运算等是常常要用到的。