导图社区 STC单片机CPU指令集
单片机指令集,学习过程中必须了解
编辑于2019-09-13 14:01:08单片机CPU指令集
算数指令
加法指令
ADD A,Rn
将寄存器Rn的内容和累加器A的内容相加,结果保存在累加器A中,并设置CY标志,AC标志以及OV溢出标志
ADD A,direct
将直接寻址单元的内容和累加器A的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADD A,@Ri
j将间接寻址单位的内容和累加器A的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADD A,#data
将一个立即数和累加器A的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADDC A,Rn
将寄存器Rn的内容与累加器A的内容以及进位标志CY的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADDC A,direct
将直接寻址单元的内容与累加器A的内容及进位标志CY中的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADDC A,@Ri
将间接寻址单元的内容与累加器A的内容及进位标志CY中的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
ADDC A,#data
将一个立即数与累加器A的内容及进位标志CY的内容相加,结果保存在累加器A中,并设置CY,AC,OV标志
减法指令
SUBB A,Rn
将累加器A中的内容减去寄存器Rn和进位标志CY内的内容,将结果保存在累加器A中,并设置CY,AC,OV标志
SUBB A,direct
将累加器A中的内容减去直接寻址单元的内容和进位标志CY的内容,结果保存在累加器A中,并设置CY,AC,OV标志
SUBB A,@Ri
将累加器A中的内容减去间接寻址单元的内容和进位标志CY的内容,结果保存在累加器A中,并设置CY,AC,OV标志
SUBB A,#data
将累加器A中的内容减去一个立即数和进位标志CY的内容,结果保存在累加器A中,并设置CY,AC,OV标志
递增指令
若内容为0xFF,则执行递增后,内容变为0
INC A
将累加器A中的内容加1,结果保存在累加器A中
INC Rn
将寄存器Rn中的内容加1,结果保存在Rn中
INC direct
将直接寻址单元中的内容加1,结果保存在直接地址单元中
INC @Ri
将间接寻址单元中的内容加1,结果保存在间接地址单元中
INC DPTR
将DPTR中的内容加1,结果保存在DPTR中
递减指令
若内荣放为0,则执行递减后,内容变为0xFF
DEC A
将累加器A中的内容减1,结果保存在累加器A中
DEC Rn
将寄存器Rn中的内容减1,结果保存在寄存器Rn中
DEC direct
将直接寻址单元的内容减1,结果保存在直接寻址单元中
DEC @Ri
将间接寻址单元中的内容减1,结果保存在间接寻址单元中
乘法指令
MUL AB
将累加器A和寄存器B中的两个无符号8位二进制数相乘,所得16位乘积低8位保存在寄存器A中,高8位保存在累加器B中
如果乘积大于255,溢出标志OV置1,否则置0
执行命令时,清除进位标志CY
除法指令
DIV AB
将累加器A中的无符号整数除以寄存器B中的无符号整数,所得商保存在累加器A中,余数保存在寄存器B中
当除数(B寄存器内容)为0时,结果不定,溢出标志OV置1
执行命令时,清除进位标志CY
BCD调整指令
DA A
d对BCD码的加法结果进行调整
逻辑指令
逻辑与指令
ANL A,Rn
将累加器A中的内容和寄存器Rn中的内荣放做逻辑与运算,结果保存在累加器A中
ANL A,direct
将累加器A中的内容和直接寻址单元中的内容做逻辑与运算,结果保存在累加器A中
ANL A,@Ri
将累加器A中的内容和间接寻址单元中的内容做逻辑与运算,结果保存在累加器A中
ANL A,#data
将累加器A中的内容和立即数做逻辑与运算,结果保存在累加器A中
ANL direct,A
将累加器A中的内容和直接寻址单元中的内容做逻辑与运算,结果保存在直接寻址单元中
ANL direct,#data
将立即数和直接寻址单元中的内容做逻辑与运算,结果保存在直接寻址单元中
逻辑或指令
ORL A,Rn
将累加器A中的内容和寄存器Rn中的内容做逻辑或运算,结果保存在累加器A中
ORL A,direct
将累加器A中的内容和直接寻址单元中的内容做逻辑或运算,结果保存在累加器A中
ORL A,@Ri
将累加器A中的内容和间接寻址单元中的内容做逻辑或运算,结果保存在累加器A中
ORL A,#data
将累加器A中的内容和立即数做逻辑或运算,结果保存在累加器A中
ORL direct,A
将累加器A中的内容和直接寻址单元中的内容做逻辑或运算,结果保存在直接寻址单元中
ORL direct,#data
将立即数和直接寻址单元中的内容做逻辑或运算,结果保存在直接寻址单元中
逻辑异或指令
XRL A,Rn
将累加器A中的内容和寄存器Rn中的内容做逻辑异或运算,结果保存在累加器A中
XRL A,direct
将累加器A中的内容和直接寻址单元中的内容做逻辑异或运算,结果保存在累加器A中
XRL A,@Ri
将累加器A中的内容和间接寻址单元中的内容做逻辑异或运算,结果保存在累加器A中
XRL A,#data
将累加器A中的内容和立即数做逻辑异或运算,结果保存在累加器A中
XRL direct,A
将累加器A中的内容和直接寻址单元中的内容做逻辑异或运算,结果保存在直接寻址单元中
XRL direct,#data
将立即数和直接寻址单元中的内容做逻辑异或运算,结果保存在直接寻址单元中
清零指令
CLR A
将累加器A中的各位清零
取反指令
CPL A
将累加器A中的内容按位取反
移位指令
RL A
将累加器A中的内容循环左移
RLC A
将累加器A中的内容和进位标志CY一起循环左移
RR A
将累加器A中的内容循环右移
RRC A
将累加器ACC中的内容和进位标志CY一起循环右移
半字节交换指令
将累加器A中的半字节互换,即将累加器A中的高、低半字节互换
数据传送指令
数据传输指令
内部数据传输指令
在任意两个内部RAM或者SFR间实现数据传输,这些指令使用直接寻址、间接寻址、寄存器寻址和立即数寻址
MOV A,Rn
将寄存器Rn中的内容复制到累加器A中,且寄存器Rn中的内容不发生变化
MOV A,direct
将直接寻址单元中的内容复制到累加器A中,且直接寻址单元中的内容不发生变化
MOV A,@Ri
将间接寻址单元中的内容复制到累加器A中,且间接寻址单元中的内容不发生变化
MOV A,#data
将立即数复制到累加器A中,且立即数的内容不发生变化
MOV Rn,A
将累加器A中的内容复制到寄存器Rn中,且累加器A中的内容不发生变化
MOV Rn,direct
将直接寻址单元中的内容复制到寄存器Rn中,且直接寻址单元的内容不发生变化
MOV Rn,#data
将立即数复制到寄存器Rn中,且立即数的内容不发生变化
MOV direct,A
将累加器A中的内容复制到直接寻址单元中,且累加器A中的内容不发生变化
MOV direct,Rn
将寄存器Rn中的内容复制到直接寻址单元中,且Rn中内容不发生变化
MOV direct,direct
将直接寻址单元中的内容复制到另一个直接寻址单元中,且原直接寻址单元中的内容不发生变化
MOV direct,@Ri
将间接寻址单元中的内容复制到直接寻址单元中,且间接寻址单元中的内容不发生变化
MOV direct,#data
将立即数复制到直接寻址单元中,且立即数的内容不发生变化
MOV @Ri,A
将累加器A中的内容复制到间接寻址单元中,且累加器A中的内容不发生变化
MOV @Ri,direct
将直接寻址单元中的内容复制到间接寻址的寄存器中,且直接寻址寄存器中的内容不发生变化
MOV @Ri,#data
将立即数内容复制到间接寻址单元中,且立即数内容不发生变化
MOV DPTR,#data 16
将一个16位的立即数复制到数据指针DPTR寄存器中,且16位立即数的内容不发生变化
外部数据传输指令
MOVX A,@Ri
将外部存储器一个字节的内容复制到累加器A中。8位外部数据存储区地址由R0或R1确定,且外部数据存储器单元内容不发生变化
MOVX A,@DPTR
将外部数据存储区一个字节的内容复制到累加器A中。16位外部数据存储区单元的地址由DPTR寄存器确定,且外部数据存储器单元中的内容不发生变化
MOVX @Ri,A
将累加器A中内容复制到外部数据存储单元中。8位外部数据存储区地址由寄存器R0或R1确定,且累加器A中的内容不发生变化。
MOVX @DPTR,A
将累加器A中的内容复制到外部数据存储单元中,其中16位外部数据存储区单元的地址由DPTR寄存器确定,且累加器A中的内容不发生变化
查找表传输指令
MOVC A,@A+DPTR
将数据指针寄存器DPTR中的内容和累加器A中的内容相加后所得到的存储器地址单元中的内容复制到累加器A中
MOVC A,@A+PC
将程序计数器PC中的内容和累加器A中的内容相加后所得的存储器地址单元中的内容复制到累加器A中
堆栈操作指令
POP direct
将堆栈指针SP所指向的栈顶内容保存在直接寻址单元中,然后执行SP-1操作(不影响标志位)
PUSH direct
将指针执行SP+1指向栈顶单元,将直接寻址单元中的内容送入SP所指的堆栈空间(不影响标志位)
数据交换指令
XCH A,Rn
将累加器A中的内容和寄存器Rn中的内容互相交换
XCH A,direct
将累加器A中的内容和直接寻址单元中的内容相互交换
XCH A,@Ri
将累加器A中的内容和间接寻址单元中的内容相互交换
XCHD A,@Ri
将累加器A中的内容和间接寻址单元中的内容的低半字节相互交换
布尔指令
清除指令
CLR bit
将目的比特位清0
CLR C
将进位标志位CY清0
设置指令
SEBT bit
将目标比特位置1
SEBT C
将进位标志位CY置1
取反指令
CPL bit
将目标比特位取反
CPL C
将进位标志位CY取反
逻辑与指令
ANL C,bit
对进位标志位CY和一个比特位做逻辑与运算,结果保存在CY中
ANL C,/bit
将进位标志位CY和一个比特位取反后做逻辑与运算,结果保存在CY中
逻辑或指令
ORL C,bit
把进位标志位CY的内容和比特位内容做逻辑或运算,结果保存在CY中
ORL C,/bit
将进位标志位CY和一个比特位取反后做逻辑或运算,结果保存在CY中
传输指令
MOV C,bit
把一个比特位的值复制到进位标志位CY中,且比特位的值不发生变化
MOV bit,C
把进位标志位CY的内容复制到一个比特位中,且进位标志位CY的值不发生变化
跳转指令
不影响标志位
JB bit,rel
判断bit位中的数据是否为0,如果为1则跳转到(PC)+rel指定的目标地址,否则执行下一条指令
JNB bit,rel
判断bit位中的数据是否为0,如果为0则跳转到(PC)+rel指定的目标地址,否则执行下一条指令
JC rel
判断进位标志位CY是否为1,如果为1则跳转(PC)+rel指定的目标地址,否则执行下一条指令
JNC rel
判断进位标志位CY是否为1,如果为0则跳转(PC)+rel指定的目标地址,否则执行下一条指令
JBC bit,rel
判断指定的bit位是否为0。如果为1,则将该位清0,并且跳转到(PC)+rel指定的目标地址,否则执行下一条指令
程序分支指令
调用指令
ACALL addr11
无条件地调用指定地址处的子程序
LCALL addr16
无条件调用首地址为addr16的子程序
返回指令
RET
将栈顶的地址高字节和低字节连续送入PC的高字节和低字节,并把堆栈指针减2,返回ACALL或LCALL的下一条指令
RETI
从中断程序返回,并清除相应的内部中断状态寄存器
无条件转移指令
AJMP addr11
实现无条件跳转
LJMP addr16
实现无条件长跳转操作
SJMP rel
实现无条件短跳转操作
JMP @A+DPTR
实现无条件跳转,跳转的目标地址是将累加器A中的8位无符号数与数据指针DPTR的内容相加
有条件转移指令
JZ rel
判断累加器A中的内容是否为0,如果为0,则跳转到(PC)+rel指定的目标地址,否则执行下一条指令
JNZ rel
判断累加器A中的内容是否为0,如果不为0,则跳转到(PC)+rel指定的目标地址,否则执行下一条指令
CJNE A,direct,rel
将累加器A中的内容和直接寻址单元中的内容相比较,若他们的值不相等,则程序转移到(PC)+rel指向的目标地址
CJNE A,#data,rel
将累加器A中的内容和立即数相比较,若他们的值不相等,则程序转移到(PC)+rel指向的目标地址
CJNE Rn,#data,rel
将寄存器Rn中的内容和立即数相比较,若他们的值不相等,则程序转移到(PC)+rel指向的目标地址
CJNE @Ri,#data,rel
将间接寻址的内容和立即数相比较,若他们的值不相等,则程序转移到(PC)+rel指向的目标地址
DJNZ Rn,rel
实现有条件跳转,每执行一次指令,寄存器Rn中的内容减1,判断其内容是否为0,不为0,则跳转(PC)+rel指向的目标地址,继续执行循环程序;否则结束循环,执行下一条指令
DJNZ direct,rel
实现有条件跳转,每执行一次指令,直接寻址单元中的内容减1,判断其内容是否为0,不为0,则跳转(PC)+rel指向的目标地址,继续执行循环程序;否则结束循环,执行下一条指令
空操作指令
NOP
表示无操作,直接执行下一条指令
设置CY,AC,OV标志(减法)
若第七位需要一个借位,则设置进位(借位)标志(CY置1),否则CY置0
如果第三位需要一个借位,则设置AC标志(AC置1),否则AC为0
如果第六位需要借位,而第七位没有借位或第七位有借位,而第六位没有借位,OV置1,否则OV为0
另一个说法:在减去有符号整数是,即当一个正数减去一个负数,产生一个负数结果,或一个负数减去一个正数,产生一个正数结果是,OV置1
设置CY,AC,OV标志(加法)
当和的第三位与第七位有进位时,分别讲CY,AC标志置1,否则为0
对于带符号运算数的溢出,当和的第七位与第六位中有一位进位,而另一位不产生进位时,溢出标志OV置1,否则为0
另一种说法:当两个正数相加时,相加的结果为负数;或当两个负数相加时,相加的结果位正数时,OV置1