汇编指令合集

本文详细介绍了51系列单片机的指令系统,包括数据传送、算术逻辑运算、控制转移和位操作等指令,以及它们的功能和使用方法。通过实例解析了如MOV、ADD、SUBB、JMP等关键指令,帮助读者深入理解单片机程序设计。
摘要由CSDN通过智能技术生成

指令的分类

51系列单片机共111条指令,常见的分类方式有以下几种。

按寻址方式分为以下7种:

  • 立即寻址。

  • 直接寻址。

  • 寄存器寻址。

  • 寄存器间接寻址。

  • 相对寻址。

  • 变址寻址。

  • 位寻址。

按功能分为以下4种:

  • 数据传送指令。
  • 算术、逻辑运算指令。
  • 控制转移类指令。
  • 位操作指令(布尔指令)。

按字节分类:

  • 单字节指令。
  • 双字节指令。
  • 三字节指令。

指令中常用符号的说明

符号含义
Rn当前寄存器区的8个工作寄存器R0~R7(n=0-7)
Ri可作地址寄存器的2个工作寄存器R0和R1
direct内部数据存储单元的地址及特殊功能寄存器的地址
#data表示8位立即数
#data16表示16位立即数
add16表示16位地址
addrll表示11位地址
rel8位带符号的地址偏移量
bit表示位地址
@间接寻址寄存器或基址寄存器的前缀
( )表示括号中单元的内容
(( ))表示间接寻址的内容

指令系统

数据传送指令

MOV类指令及功能

功能:从源操作数到目的操作数的数据传送。

指令功能
MOV A,Rn将寄存器Rn中的内容送到累加器A
MOV A,direct直接地址中内容送累加器A
MOV A,@RiRi中的间址内容送累加器A
MOV A,#data将立即数送到累加器A
MOV Rn,累加器A中的内容送到寄存器Rn
MOV Rn,direct直接地址中的内容送Rn
MOV Rn,#data立即数送Rn
MOV direct,A累加器A的内容送入直接地址中
MOV direct,Rn寄存器R内容送入直接地址中
MOV direct,direct源操作数直接地址的内容送入目的操作数的直接地址中
MOV direct,@RiRi间址内容送入直接地址中
MOV direct,#data立即数送入直接地址中
MOV @Ri,AA中内容送入Ri间址单元中
MOV @Ri,direct直接地址中内容送入Ri间址单元中
MOV @Ri,#data立即数送入Ri间址单元中
MOV DPTR,direct1616位立即数送入数据指针DPTR中,高8位送入DPH,第8位送入DPL中
MOVC类指令及功能

功能: 这两条指令属于查表指令,可以查找放在程序存储器中的数据表格的内容。

指令功能
MOVC A,@A+PCPC+1→PC,(A+PC)→A
MOVC A,@A+DPTR(A+DPTR)→A
MOVX类指令及其功能

功能:用来与外部数据存储器区传送数据。

指令功能
MOVX A,@DPTRDPTR间址单元内容送入累加器A
MOVX @DPTR,A累加器A中的内容诵读DPTR间址单元
MOVX A,@RiRi间址单元内容送A
MOVX @Ri,AA中内容送Ri间址单元
交换指令机器功能
指令功能
XCH A,Rn​Rn与A内容交换
XCH A,direct直接地址内容与A内容交换
XCH A,@RiRi间址内容与A内容交换
XCHD A,@RiRi间址内容低4位与A中低四位内容交换
SWAP AA中高4位与低4位内容交换
堆栈操作指令及其功能
指令功能
PUSH direct栈顶指针SP+1,然后将直接地址中的内容压入栈
POP direct将堆栈栈顶内容弹出堆栈,栈顶指针SP-1

算术运算指令

ADD类指令

不带进位的加法运算指令。

指令功能
ADD A,RnA与Rn中内容相加后再送到A
ADD A,directA与直接地址中内容相加后再送到A
ADD A,@RiA与Ri间址内容相加后再送到A
ADD A,#dataA与立即数相加后再送到A
ADDC类指令

带进位的加法运算指令。

指令功能
ADDC A,RnA与Rn中内容在进位状态相加后再送到A
ADDC A,directA与直接地址中内容在进位状态相加后再送到A
ADDC A,@RiA与Ri间址内容在进位状态相加后再送到A
ADD A,#dataA与立即数在进位状态相加后再送到A
SUBB类指令
指令功能
SUBB A,RnA减Rn内容和进位标志
SUBB A,directA减直接地址内容和进位标志
SUBB A,@RiA减Ri间址单元内容和进位标志
AUBB A,#dataA减立即数和进位标志
MUL和DIV指令

MUL(乘法)、DIV(除法)

指令功能
MUL ABA与B相乘,高八位存入B,第八位存入A
DIV ABA与B相除,商存入A,余数存入B
INC指令和DEC指令

INC(加1)

指令功能
INC AA+1
INC RnRn中内容加1
INC direct直接地址中内容加1
INC @RiRi间址中内容加1
INC DPTR数据指针加1

DEC(减1)

指令功能
DEC AA-1
DEC RnRn中内容减1
DEC direct直接地址中内容减1
DEC @RiRi间址单元中的内容减1
十进制加法调整指令

功能:将二进制码调整成BCD码

指令功能
DA A将A中二进制调整为BCD码

逻辑运算指令

ANL类指令

功能:将源操作数的内容和目的操作数的内容按位“与”,结果存入目的操作数指定单元。

指令功能
ANL A,RnA和Rn中内容相与后的结果存入A
ANL A,directA和直接地址中内容相与后的结果存入A
ANL A,@RiA和Ri间址内容相与后的结果存入A
ANL A,#dataA和立即数相与后的结果存入A
ANL direct,AA和直接地址中内容相与后的结果存入直接地址
ANL direct,#data直接地址内容和立即数相与后的结果存入直接地址
ORL类指令

功能:将源操作数内容和目的操作数内容按位“或”,结果存入目的操作数指定单元中。

指令功能
ORL A,RnA和Rn中内容相或后的结果存入A
ORL A,directA和直接地址中内容相或后的结果存入A
ORL A,@RiA和Ri间址内容相或后的结果存入A
ORL A,#dataA和立即数相或后的结果存入A
ORL direct,AA和直接地址中内容相或后的结果存入直接地址
OPL direct,#data直接地址内容和立即数相或后的结果存入直接地址
XRL类指令

功能:将两个操作数指定内容按位“异或”,结果存入目的操作数指定单元中。

指令功能
XRL A,RnA和Rn中内容按位异或后的结果存入A
XRL A,directA和直接地址中内容按位异或后的结果存入A
XRL A,@RiA和Ri间址内容按位异或后的结果存入A
XRL A,#dataA和立即数按位异或后的结果存入A
XRL direct,AA和直接地址中内容按位异或后的结果存入直接地址
XPL direct,#data直接地址内容和立即数按位异或后的结果存入直接地址
循环移位指令

功能:将累加器A中的内容循环位移或者和进位位一起移位。

指令功能
RL AA中内容循环左移,执行该指令一次左移一位
RR AA中内容循环右移,执行该指令一次右移一位
RLC AA与进位位CY内容一起循环左移一位
RRC AA与进位位CY内容一起循环右移一位
取反、清0指令
指令功能
CPL A累加器A内容按位取反
CLR A累加器A清0

控制转移类指令

无条件转移指令
指令功能
LJMP add16无条件跳转到add16地址,可在64KB范围内转移,称为长转移指令
AJMP add11无条件转向add11地址,在2KB范围内转移
SJMP rel相对转移,rel是偏移量,8位有符号数,跳转范围-128~127
JMP @A+DPTR散转指令,无条件转向A与DPTR内容相加后形成的新地址
条件转移指令

功能:根据某种特定条件转移的指令,条件满足时转移,条件不满足时则按顺序执行下面的指令。

指令功能
JZ relA=0则转向PC+2+rel→PC;A≠0则顺序执行
JNC relA≠0则转向PC+2+rel→PC;A=0则顺序执行
CJNE A,direct,relA≠(direct),则转向PC+3+rel→PC;当A>(direct),CY=0;当A<(direct),CY=1;当A=(direct),PC+3→PC顺序执行
CJNE A,#data,relA≠data,则转向PC+3+rel→PC;当A>data,CY=0;当A<data,CY=1;当A=data,PC+3→PC顺序执行
CJNE Rn,#data,relRn≠data,则转向PC+3+rel→PC;当Rn>data,CY=0;当Rn<data,CY=1;当Rn=data,PC+3→PC顺序执行
CJNE @Ri,#data,rel(Ri)≠data,则转向PC+3+rel→PC,当(Ri)>data,CY=0,当(Ri)<data,CY=1,当(Ri)=data,PC+3→PC顺序执行
DJNZ Rn,relRn-1→Rn,Rn≠0转向PC+2+rel→PC;Rn=0,PC+2→PC顺序执行
DJNZ direct,rel(direct)≠0转向PC+2+rel→PC;(direct)=0,PC+2→PC顺序执行
调用、返回、空操作指令
指令功能
LCALL addr16调用入口地址为addr16的子程序,可调用64KB范围内的子程序
ACALL addr11调用入口地址为addr11的子程序,可调用2KB范围内的子程序
RET放在子程序最后,是程序返回到主程序断点处
RETI中断返回指令,该指令用于中断服务程序,使中断结束后返回主程序断点处
NOP空操作,执行该指令CPU只进行取指令、译码,不进行其他操作

位操作指令

位数据传送类指令
指令功能
MOV C,bit寻址位的状态送入C
MOV bit,CC的状态送入位地址中
位修正指令

C指累加器C即进位标志CY

指令功能
CLP C累加器清0
CLP bit寻址位清0
CPL C取反
CPL bit寻址位取反
SETB CC置1
SETB bit寻址位置1
位逻辑运算指令
指令功能
ANL C,bit寻址位和C“与”,结果存到C
ANL C,/bit寻址位的“非”和C“与”,结果存到C
ORL C,bit寻址位和C“或”,结果存到C
ORL C,/bit寻址位的“非”和C“或”,结果存到C
位条件转移指令
指令功能
JC relC=1转向PC+2+ rel→PC;C=0顺序执行PC+2→PC
JNC relC=0转向PC+2+rel→PC;C=1顺序执行PC+2→PC
JB bit,rel(bit)=1转向PC+3+rel→PC;(bit)=0顺序执行PC+3→PC
JNB bit,rel(bit)=0转向PC+3+rel→PC;(bit)=1顺序执行PC+3→PC
JBC bit,rel(bit)=1转向PC+3+rel→PC,同时0→(bit);(bit)=0顺序执行PC+3→PC
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大拨鼠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值