80C51单片机指令系统
来自常信院3#731 v罗
1、数据传送类指令
MOV A,#date(8位立即数送累加器)
MOV direct,#date(8位立即数送直接寻址单元)
MOV @Ri,#date(8位立即数送Ri间接寻址单元)
MOV Rn,#date(8位立即数送寄存器)
MOV DPTR,#date16(16位立即数送DPTR)
MOV direct2,direct1(直接寻址数据送直接寻址单元)
MOV direct,@Ri(Ri间接寻址数据送直接寻址单元)
MOV direct,Rn(寄存器内容送直接寻址单元)
MOV @Ri,direct(直接寻址数据送Ri间接寻址单元)
MOV Rn,direct(直接寻址数据送寄存器)
MOV A,direct(直接寻址数据送累加器)
MOV A,@Ri(Ri间接寻址数据送累加器)
MOV A,Rn(寄存器内容送累加器)
MOV direct,A(累加器内容送直接寻址单元)
MOV @Ri,A(累加器内容送Ri间接寻址单元)
MOV Rn,A(累加器内容送寄存器)
MOVX A,@Ri(Ri间接寻址的外部RAM单元读)(不常用)
MOVX @Ri,A(Ri间接寻址的外部RAM单元写)(不常用)
MOVX A,@DPTR(DPTR间接寻址的外部RAM单元读)
MOVX @DPTR,A(DPTR间接寻址的外部RAM单元写)
MOVC A,@A+DPTR(程序存储器读)
MOVC A,@A+PC(程序存储器读)(不常用)
整字节交换指令
XCH A,Rn(寄存器寻址字节交换)
XCH A,direct(直接寻址字节交换)
XCH A,@Ri(Ri间接寻址字节交换)
半字节交换指令
XCHD A,@Ri(Ri间接寻址半字节交换)注解:是低四位交换
SWAP A(累加器内容高低半字节交换)注解:高四位与低四位交换
PUSH direct(进栈)
POP direct(出栈)
2、算数运算类指令
ADD A,#date(立即数加法)
ADD A,direct(直接寻址加法)
ADD A,@Ri(间接寻址加法)
ADD A,Rn(寄存器寻址加法)
ADDC A,#date(立即数带进位加法)注解:CY取决于上一步)
ADDC A,direct(直接寻址带进位加法)
ADDC A,@Ri(间接寻址带进位加法)
ADDC A,Rn(寄存器寻址带进位加法)
SUBB A,#date(立即数带借位减法)
SUBB A,direct(直接寻址带借位减法)
SUBB A,@Ri(间接寻址带借位减法)
SUBB A,Rn(寄存器寻址带借位减法)
INC A(累加器加1)
INC direct(直接寻址单元加1)
INC @Ri(间接寻址单元加1)
INC Rn(寄存器加1)
INC DPTR(16位数据指针加1)
DEC A(累加器减1)
DEC direct(直接寻址单元减1)
DEC @Ri(间接寻址单元减1)
DEC Rn(寄存器减1)
MUL AB(乘法)注解:低位字节送A,高位字节送B,CY,总是被清0,若OV=1,表示乘积大于255,分别存放在B与A中;否则,表示乘积小于或等于255,只存放在A 中,B 中的内容为0。
DIV AB(除法)注解:被除数置于累加器A中,除数置于寄存器B中,指令执行后,商存于A中,余数存于B中,CY总是被清0,当除数为0(B=0)时,OV置1,表明除法无意义,其他情况OV都被清0,除法可正常进行。
DA A(十进制调整)注解:加6调整
3、逻辑运算及移位类指令
ANL direct,A(累加器与直接寻址单元逻辑“与”)
ANL direct,#date(立即数与直接寻址单元逻辑“与”)
ANL A,#date(立即数与累加器逻辑“与”)
ANL A,direct(直接寻址单元与累加器逻辑“与”)
ANL A,@Ri(间接寻址单元与累加器逻辑“与”)
ANL A,Rn(寄存器与累加器逻辑“与”0
ORL direct,A(累加器与直接寻址单元逻辑“或”)
ORL direct,#date(立即数与直接寻址单元逻辑“或”)
ORL A,#date(立即数与累加器逻辑“或”)
ORL A,direct(直接寻址单元与累加器逻辑“或”)
ORL A,@Ri(间接寻址单元与累加器逻辑“或”)
ORL A,Rn(寄存器与累加器逻辑“或”)
XRL direct,A(累加器与直接寻址单元“异或”)
XRL direct,#date(立即数与直接寻址单元“异或“)
XRL A,#date(立即数与累加器“异或”)
XRL A,direct(直接寻址单元与累加器“异或”)
XRL A,@Ri(间接寻址单元与累加器“异或”)
XRL A,Rn(寄存器与累加器“异或”)
CLR A(累加器清0)
CPL A(累加器按位取反)注解;实际为逻辑“非”运算
RL A(累加器内容循环左移)
RR A(累加器内容循环右移)
RLC A(通过CY循环左移)
RRC A(通过CY 循环右移)
4、控制转移类指令
LJMP addr16(无条件长转移)
AJMP addr11(无条件绝对转移)
SJMP rel(无条件短转移)
JMP @A+DPTR(无条件间接转移)
JZ rel(累加器判0转移)
JNZ rel(累加器判非0转移)
CJNZ A,#date,rel(累加器内容与立即数比较,不等则转移)
CLNZ A,direct,rel(累加器内容与直接寻址单元比较,不等则转移)注解:若程序顺序执行,则左操作数=-右操作数;若程序转移且(CY)=0,则左操作数>右操作数;若程序转移且(CY)=1,则左操作数<右操作数。就是得判CY。
DJNZ Rn,rel(寄存器减1条件转移)
DJNZ direct,rel(直接寻址单元减1条件转移)注解:所得结果为0时,程序顺序执行,结果不为0,则程序转移。
ACALL addr11(绝对调用)
LCALL addr16(长调用)
RET(子程序返回)
RETI(中断服务子程序返回)
NOP(空操作)
5、位操作指令
MOV C,bit(指定位内容送CY)
MOV bit,C(CY内容送指定位)
SETB C(CY置1)
SEYB bit(指定位置1)
CLR C(CY清0)
CLR bit(指定位清0)
ANL C,bit(指定位与CY逻辑“与”)
ANL C,/bit(指定位的反语CY逻辑“与”)
ORL C,bit(指定位CY逻辑“或”)
ORL C,/bit(指定位的反与CY“或”)
CPL C(CY取反)
CPL bit(指定位取反)
JC rel(CY=1转移)
JNC rel(CY=0转移)
JB bit,rel(指定位状态为1转移)
JNB bit,rel(指定位状态为0转移0
JBC bit,rel(指定位状态为1转移,并使该位清0)
2010年12月7日星期一