51汇编指令集

汇编中的指令是一种助记符,以助记符代替指令的机器码,因为指令使用起来也比较繁琐,所以才出现了后期的高级语言。

今天总结一下51汇编中的助记符

AT89C51单片机的汇编指令共有111条,可按功能分为5大类:

数据传送类指令28条;
算数操作类指令24条;
逻辑运算类指令25条;
控制转移类17条;
位操作类17条。

在此约定下列指令中各符号的意义:

Rn:当前寄存器区的8个工作寄存器(n=0~7)
Ri:当前寄存器区中可作间接寻址寄存器的2个寄存器(i=0 1)
direct:直接地址
#data:包含在指令中的8位立即数
rel:相对转移指令中的偏移量,为8位带符号补码数
DPTR:数据指针,16位数据地址寄存器
bit:直接寻址位
C:进位标志位
addr11:11位目的地址
addr16:16位目的地址
@:间接寻址寄存器前缀

  1. 算术运算指令
指令说明
ADD A, Rn将累加器与寄存器的内容相加,结果存回累加器A
ADD A, direct将累加器与直接地址中的内容相加,结果存回累加器A
ADD A, @Ri将累加器与间接地址的内容相加,结果存回累加器A
ADD A, #data将累加器与直接数相加,结果存回累加器A

这里一种指令有四种使用方法,对应着四种寻址方式,具体的寻址方式可以看这里51汇编的七种寻址方式

ADDC A, Rn将累加器与寄存器的内容及进位C相加,结果存回累加器
ADDC A, direct将累加器与直接地址的内容及进位C相加,结果存回累加器
ADDC A, @Ri将累加器与间接地址的内容及进位C相加,结果存回累加器
ADDC A, #data将累加器与常数及进位C相加,结果存回累加器

ADDC是单片机的加法指令,与ADD不同的是ADDC可以将进位C(Cy)中的内容一起相加,Cy是标志寄存器PSW(Program Status Word)中的一位标志位,当运算过程最高位有进位的时候,Cy会被置位成1,这时使用ADDC即可与Cy里面的1一起相加。

举个栗子:00FFH与0001H相加

;先将低八位相加
MOV A,#FFH
ADD A,#01H;此时A = 01H,最高位产生进位1,标志位Cy变为1
;再将高八位相加
MOV 30H,A;将A中的数据存放到30H中
MOV A,#00H
ADDC A,#00H;两个00H相加是0,但是标志位为1,所以此时A = 01H
MOV A,31H
;最终的结果为0100H
SUBB A, Rn将累加器的值减去寄存器的值减借位C,结果存回累加器
SUBB A, direct将累加器的值减直接地址的值减借位C,结果存回累加器
SUBB A, @Ri将累加器的值减间接地址的值减借位C,结果存回累加器
SUBB A, #data将累加器的值减常数值减借位C,结果存回累加器
INC A将累加器A的值加1
INC Rn将寄存器的值加1
INC direct将直接地址加11
INC @Ri将间接地址的内容加一
INC DPTR数据指针寄存器值+11,当DPL溢出时,会使DPH+1,不影响标志位
DEC A将累加器的值-1
DEC Rn将寄存器的值-1
DEC direct将直接地址的内容-1
DEC @Ri将间接地址的内容-1
MUL AB将AB的值相乘,积的低字节存回A,高字节存B,溢出则标志位OV为1
DIV AB将A的值除以B的值,商存回累加器,余数存回B寄存器
DA A将累加器A做十进制调整,若低4位>9或(AC)=1,则低4位+6
若高4位>9或©=1,则高4位值加6
  1. 逻辑运算指令
ANL A,Rn将累加器的值与寄存器的值做“与”的逻辑判断,结果存回累加器
ANL A, direct将累加器的值与直接地址的内容做“与”的逻辑判断,结果存回累加器
ANL A, @Ri将累加器的值与间接地址的内容做“与”的逻辑判断,结果存回累加器
ANL A, #data将累加器的值与常数做“与”的逻辑判断,结果存回累加器
ANL direct, A将直接地址的内容与累加器的值做“与”的逻辑判断,结果存回该直接地址
ANL direct, #data将直接地址的内容与常数值做“与”的逻辑判断,结果存回该直接地址
ORL A, Rn将累加器的值与寄存器的值做“或”的逻辑判断,结果存回累加器
ORL A, direct将累加器的值与直接地址的内容做“或”的逻辑判断,结果存回累加器
ORL A, @Ri将累加器的值与间接地址的内容做“或”的逻辑判断,结果存回累加器
ORL A, #data将累加器的值与常数做“或”的逻辑判断,结果存回累加器
ORL direct, A将直接地址的内容与累加器的值做“或”的逻辑判断,结果存回该直接地址
ORL direct, #data将直接地址的内容与常数值做“或”的逻辑判断,结果存回该直接地址
XRL A, Rn将累加器的值与寄存器的值做“异或”的逻辑判断,结果存回累加器
XRL A, direct将累加器的值与直接地址的内容做“异或”的逻辑判断,结果存回累加器
XRL A, @Ri将累加器的值与间接地扯的内容做“异或”的逻辑判断,结果存回累加器
XRL A, #data将累加器的值与常数作“异或”的逻辑判断,结果存回累加器
XRL direct, A将直接地址的内容与累加器的值做“异或”的逻辑判断,结果存回该直接地址
XRL direct, #data将直接地址的内容与常数的值做“异或”的逻辑判断,结果存回该直接地址
CLR A累加器置0
CPL A累加器的值反相
RL A累加器的之左移一位
RLC累加器的值含进位C左移一位
RR A累加器右移一位
RRC A累加器的值含C右移一位
SWAP A将累加器高四位与低四位的内容交换
  1. 数据转移指令
MOV A,Rn将寄存器的内容载入累加器
MOV A,directMOV A,direct
MOV A,@Ri将间接地址的内容载入累加器
MOV A,#data将常数载入累加器
MOV Rn,A将累加器的内容载入寄存器
MOV Rn,direct将直接地址的内容载入寄存器
MOV Rn,#data将常数载入寄存器
MOV direct,A将累加器的内容存入直接地址
MOV direct,Rn将寄存器的内容存入直接地址
MOV direct1, direct2将直接地址2的内容存入直接地址1
MOV direct,@Ri将间接地址的内容存入直接地址
MOV direct,#data将常数存入直接地址
MOV @Ri,A将累加器的内容存入某间接地址
MOV @Ri,direct将直接地址的内容存入某间接地址
MOV @Ri,#data将常数存入某间接地址
MOV DPTR,#data16将16位的常数存入数据指针寄存器
MOVC A,@A+DPTRA的值加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器
MOVC A,@A+PC累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器
MOVX A,@Ri将间接地址所指定外部存储器的内容读入累加器(8位地址)
MOVX A,@DPTR将累加器的内容写入间接地址所指定的外部存储器(8位地址)
MOVX @Ri,A将累加器的内容写入间接地址所指定的外部存储器(8位地址)
MOVX @DPTR,A将累加器的内容写入数据指针所指定的外部存储器(16位地址)
PUSH direct将直接地址的内容压入堆栈区
POP direct从堆栈弹出该直接地址的内容
XCH A,Rn将累加器的内容与寄存器的内容互换
XCH A,direct将累加器的值与直接地址的内容互换
XCH A,@Ri将累加器的值与间接地址的内容互换
XCHD A,@Ri将累加器的低4位于间接地址的低4位互换
  1. 布尔运算
CLR C进位C置零
CLR bit直接地址的某位置零
SETB C进位C置1
SETB bit直接地址的某位置1
CPL C将C反相
CPL bit直接地址的某位反相
ANL C,bit将进位C与直接地址的某位做与运算结果存C中
ANL C,/bit将进位C与直接地址的某位的反相做与运算,结果存C中
ORL C,bit将进位C与直接地址的某位做“或”的逻辑判断,结果存回进位C
ORL C,/bit将进位C与直接地址的某位的反相值做“或”的逻辑判断,结果存回进位C
MOV C,bit将直接地址的某位值存入进位C
MOV bit,C将进位C的值存入直接地址的某位
JC rel若进位C=1则跳至rel的相关地址
JNC rel若进位C=0则跳至rel的相关地址
JB bit,rel若直接地址的某位为1,则跳至rel的相关地
JNB bit,rel若直接地址的某位为,则跳至rel的相关地址
JBC bit,rel若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0
  1. 程序转移指令
ACALL addr11调用2k程序存储器范围内的子程序
LCALL addr16调用64K程序存储器范围内的子程序
RET从子程序返回
RETI从中断子程序返回
AJMP addr11绝对跳转(2K内)
LJMP addr16长跳转(64K内)
SJMP rel短跳转(2K内)-128~+127字节
JMP @A+DPTR跳至累加器的内容加数据指针所指的相关地址
JZ rel累加器的内容为0,则跳至rel所指相关地址
JNZ rel累加器的内容不为0,则跳至rel所指相关地址
CJNE A,direct,rel将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址
CJNE A,#data,rel将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址
CJNE @Rn,#data,rel将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址
CJNE @Ri,#data,rel将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址
DJNZ Rn,rel将寄存器的内容减1,不等于0则跳至rel所指的相关地址
DJNZ direct,rel将直接地址的内容减1,不等于0则跳至rel所指的相关地址
NOP无动作
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针到处飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值