MCS-51单片机指令系统按功能来分有五种.
数据传送指令:
MOV Rn,#data ;立即寻址,data→Rn
MOV A,@Ri ;间接寻址,((Ri))→A,i=0,1
MOV direct,Rn ;寄存器寻址,(Rn)→direct
MOV @Ri,A ;寄存器寻址,(A)→(Ri)
MOV DPTR,#data16 ;把16位立即数传送到数据指针DPTR,高8位送DPH,低八位送DPL.
(例:MOV DPTR,#1234H;DPTR=1234H,DPH=12H,DPL=34H.)
MOVC A,@A+PC ;((A)+(PC)→A)
MOVX @DPTR,A ;寄存器间接寻址,(A)→(DPTR)
PUSH direct ;直接寻址.(SP)+1→SP,(direct)→SP
POP direct ;直接寻址,((SP))→direct,(SP-1)→SP
XCH A,Rn ;(A)←→(Rn)交换
XCHD A,@Rn ;(A)0~3←→((Rn))0~3
SWAP A ;(A)0~3←→(A)4~7
算术运算指令
ADD A,@Ri ;(A)+(Ri)→A,不带进位加法
ADDC A,Ri ;(A)+(Ri)+Cy→A
SUBB A,#data ;(A)-data-Cy→A
INC direct ;(direct)+1→direct,加一指令
DEC @Ri ;((Ri))-1→(Ri)
DA A ;十进制调整指令
MUL AB ;把A,B两个8位无符号数相乘,其16位积的低八位存入A,高八位存入B
,如果积大于255(0FFH),则置位溢出标志OV,进位标志Cy总是清零.
DIV AB ;A除以B.所得数的整数部分放入A,余数部分放入B
如果B为0,则A,B结果不变,置位溢出标志OV,进位标志Cy总是清零.
逻辑运算指令:
CLR A ;(A)=0
CPL A ;/A→A
RL A ;左循环移位1
RR A ;右循环移位1
RLC A ;A与Cy左循环移位1
RRC A ;A与Cy右循环移位1
ANL 逻辑与操作指令
ORL 逻辑或操作指令
XRL 逻辑异或操作指令
位操作指令:
MOV C,bit ;(bit)→Cy
CLR 清零
CPL 取反
SETB 置1
ANL 与
ORL 或
JC rel ;若Cy=1,则(PC)+2+rel→PC,若Cy=0,则(PC)+2→PC
JNC rel ;若Cy=1,则(PC)+2→PC,若Cy=0,则(PC)+2+rel→PC
JB bit,rel ;若(bit)=1,则(PC)+3+rel→PC,若(bit)=0,则(PC)+2→PC
JNB 与上相反
JBC bit,rel ;若(bit)=1,则(PC)+3+rel→PC且置(bit)=0,若bit=0,则(PC)+2→PC
控制转移指令:
AJMP addr ;绝对跳转指令
SJMP rel ;相对跳转指令,(PC)+2+rel→PC
LJMP addr16 ;长跳转指令,addr16→PC
JMP @A+DPTR ;间接跳转指令
JZ rel ;判零跳转指令,(A)=1,则(PC)+2+rel→PC,若A!=0,则(PC)+2→PC
JNZ rel ;与上相反
CJNE A,direct,rel;比较不相等跳转指令.执行过程为:a.(A)=(direct),则(PC)+3→(PC),Cy=0
b.(A)>(direct),则(PC)+3+rel→(PC),Cy=0
c.(A)<(direct),则(PC)+3+rel→(PC),Cy=1
DJNZ Rn,rel ;减一不为零跳转指令 .执行过错为 a.(PC)+2→PC. b.(Rn)-1→direct c.若Rn!=0,则(PC)+rel→PC;若direct=0,则程序往下执行
ACALL addr ;短调用指令
LCALL addr ;长调用指令
RET ;从子程序返回指令
RETI ;从中断返回指令
NOP ;空操作指令
指令助记注释:
ADDC ---Add with Carry Flag
SUBB ---Subtract With Borrow
INC ---- Increment
DEC-------Decrement
MUL----Multiply
DIV----Divide
DA----Decimal Adjust
MOV----move
MOVX----move external RAM
MOVC----move code
XCH----Exchange
XCHD----Exchange low-order Digit
ANL----and logical
ORL----or logical
XRL----exclusive-or logical
CLR----clear
CPL----complement logical
RL----rotate left
RR---rotate right
ACALL----absolute subroutine call
LCALL----long subroutine call
RET----return from subroutine
RETI----return from interrupt
AJUMP----absolute jump
LJMP----long jump
SJMP----short jump
JZ----jump if accumulator is zero
JNZ----jump if not zero
JC----jump if carray flag is set
JB----jump if direct bit not set
CJNE----compare jmp if not equal
DJNZ----decrement jump if zero
NOP----no operation