51单片机汇编语言指令大全

这篇具有很好参考价值的文章主要介绍了51单片机汇编语言指令大全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接
https://blog.csdn.net/weixin_45702442/article/details/115874162
https://blog.csdn.net/acslsr/article/details/106881712
在这里稍作终结,方便复习

51系列单片机按照功能分科分为5大类

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

一.数据传输类指令

1. 累加器是目的操作数指令

MOV A,Rn
MOV A,@Ri
MOV A,direct
MOV A,#data

A作为51单片机内比较重要的特殊寄存器,用途十分广泛,它能和Rn(当前寄存器区的8个工作寄存器),直接地址,间接地址,间接寻址的寄存器进行数据传输

2.以Rn为目的操作数的指令

MOV Rn,A
MOV Rn,direct
MOV Rn,#data

注意Rn工作寄存器无法直接将Rn中的内容送入Rn中,所以其数据传送类指令少了一个工作寄存器之间的传送

3.以直接地址为目的操作数指令

MOV direct,A
MOV direct,Rn
MOV direct1,direct2
MOV direct,@Ri
MOV direct,#data

直接地址能与直接地址之间进行数据传输

4.以寄存器间接地址为目的操作数指令

MOV @Ri,A
MOV @Ri,direct
MOV @Ri,#data

5.16位传送指令

MOV DPTR,#data16

6.堆栈操作指令

进栈:PUSH direct
出栈:POP direct

7.累加器A与外部数据存储器传送指令

MOVX A,@DPTR
MOVX A,@Ri
MOVX @DPTR,A
MOVX @Ri,A

能与外部存储器进行数据传输的只有A累加器,所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。

8.查表指令

MOVC A,@A+PC
MOVC A,@A+DPTR

9.字节交换命令

XCH A,Rn
XCH A,direct
XCH A,@Ri

10.半字节交换指令

XCHD @Ri

二、算数操作类指令

1.加法指令

ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data

将A中的内容和第二操作数中的内容相加然后送入A中去,寻址方式的不同导致指令的不同

2.带进位加法指令

ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data

有进位时,cy=1,带进位位的加法指令常用于多字节的加法指令中。

3.增1指令

INC A
INC Rn
INC direct
INC @Ri
INC DPTR

累加器 A的加1指令影响P标志位

4.十进制调整指令

DA A

将A中的16进制数据改成与之等价的10进制数据值,便于人读取,显示还是16进制值,但是要把它看成与十进制等价的值
在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用来对BCD码加法运算结果进行自动修正。
例:A = 0001 0101 BCD(代表十进制数15)
ADD A,#8 ;执行完之后,A = 1DH
DA A ;调整后,A = 23H

5.带借位减法

SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,#data

注意,没有不带借位位的减法指令,若需要则要先令CY位的值为0即可
当A-操作数小于0,产生借位,借位标志位c=1,一般与JC,JNC配合

6.减1指令

DEC A
DEC Rn
DEC direct
DEC @Ri

同理,累加器A减1影响p标志位

7.乘法指令

MUL  AB

A和B中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。

8.除法指令

DIV AB

将A中的8位无符号数除B中的8位无符号数(A/B)。除了以后,商放在A中,余数放在B中。
CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1

三、逻辑操作类指令

1.简单逻辑操作指令

累加器A清零:
CLR A
累加器A按位取反:
CPL A

2.左循环指令

不带进位左移指令
RL A
带进位左移指令
RLC A

带进位的左移指令,将A中的8位,从左往右依次循环移动,此时最高位给CY位,CY位到最低位去了

3.右移指令

不带进位循环指令
RR A
带进位循环指令
RRC A

同莉,带进位的右移指令,将A中的8位,从右往左依次循环移动,此时最低位给CY位,CY位到最高位

4.累加器半字节交换指令

SWAP A

5.逻辑与指令

ANL A,Rn
ANL A,direct
ANL A,#data
ANL A,@Ri
ANL direct,A
ANL direct,#data

第一操作数无Rn

6.逻辑或指令

ORL A,Rn
ORL A,direct
ORL A,#data
ORL A,@Ri
ORL direct,A
ORL direct,#data

7.逻辑异或指令

XRL A,Rn
XRL A,direct
XRL A,#data
XRL A,@Ri
XRL direct,A
XRL direct,#data

四、控制转移类指令

跳转指令非常重要,主要在判断语句中经常使用

1.无条件转移指令

短转移类指令: AJMP addr11
长转移类指令: LJMP addr16
相对转移指令: SJMP rel
间接转移指令: JMP @A+DPTR

当发生跳转时,PC指针会跳转到标号处(即想要跳转的位置)
短跳转指令和长跳转指令后跟的都是直接地址,区别时是跳转范围,AJMP的跳转范围是 2k(2^11 )
LJMP的跳转范围是64k(2^16),
SJMP后跟的是相对地址,跳转范围是256B(-128~128)
间接转移 JMP @A+DPTR 指令
用途也是跳转,转移地址由A+DPTR形成,并直接送入PC。
本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。
该指令类似于C语言中的 switch(){case:…}语句的功能。

2.条件转移指令

若累加器为0则转移:
JZ rel
若累加器非0则转移:
JNZ rel

转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel
使用时,一般将rel理解成标号

3.比较不相等转移指令

CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel

此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。
同样地,使用时,我们可以将rel理解成标号,如果不相等,就转移到我们给出的标号的位置处去
利用CJNE指令,可以判断两数是否相等。
但有时还想得知两数比较之后哪个大,哪个小,CJNE指令也具有这样的功能:
如果两数不相等,则CPU还会用CY来反映哪个数大,哪个数小。
如果前面的数大,则CY=0,否则CY=1。
因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了

4.减1不为0转移指令

DJNZ Rn,rel
DJNZ direct,rel

注意第一操作数只能为Rn和直接地址
DJNZ指令的执行过程是这样的:
它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。

5.调用子程序指令

ACALL addr11
LCALL addr16

上面两条指令都是在主程序中调用子程序,短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。

6.返回指令

子程序返回指令:RET
中断子程序返回指令:RETI

RET指令的执行过程是:堆栈栈顶内容(2字节,调用时保存的ACALL下面的一条指令的地址)弹出给PC,实现返回到ACALL下面的那条指令的位置中去
RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零的功能。

7.空操作指令

NOP

空操作,就是什么事也不干,停一个周期,一般用作短时间的延时

五、位操作指令

1.数据位传送指令

MOV C,bit
MOV bit,C

这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。注意:无法直接传递某个数给某个位

2.位变量修改指令

清0:
CLR C
CLR bit
求反:
CPL C
CPL bit
置1:
SETB C
SETB bit

3.位变量逻辑与指令

ANL C,bit;C与指定位的值相与,结果送C
ANL C,/bit;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回C。

但注意:指定的位地址中的值本身并不发生变化。即bit的值前后并不发生变化

4.条件转移类指令

判断C转移指令
JC rel
JNC rel
判断位变量转移指令
JB bit,rel;(bit)=1,则转移,否则顺序执行;
JNB bit,rel
JBC bit,rel;(bit)=1,则转移,并把该位清0,否则顺序执行。也就是说执行与否该位的最终结果都为0,要特别注意这一点

第一条指令的功能是如果C = 1就转移,否则就顺序执行。注意:与JZ A 不同,A=0就跳转
第二条指令则和第一条指令相反,即如果C = 0就转移,否则就顺序执行。

六.汇编语言伪指令

写给汇编编译器看的指令,并非指导CPU运行的指令,只是告诉编译器相关内容,编译时并不产生代码
伪指令解析
ORG addr16
指定该指令之后的指令(或数据块)的起始地址。
END
程序结束标志。END必须放在程序的最后,在END之后的程序不会被编译成机器码。
DB
定义字节(一个字节,也可定义两个字节,编译器不会报错),一般格式为:
标号: DB 字节常数或字符或表达式
DW
定义字(两个字节,eg:‘我’、‘ab’)。一般格式为:
标号: DW 字或字串
DS
定义预留存储区。eg: DS 2,预定两个字节的存储空间,下一条指令空格2个字节开始存储
BIT
定义位变量。一般格式为:
字符名 BIT 位地址,(将位地址赋值给字符名)eg:stop Bit P1.7(对stop的操作就是对P1.7的操作)

EQU
赋值伪指令。一般格式为:
符号名 EQU 数值(功能为给符号赋值,eg zxb EQU 66H,执行后,zxb==66H)
#HIGH / #LOW
取目标代码的高字节/低字节数文章来源地址https://www.toymoban.com/news/detail-722107.html

到了这里,关于51单片机汇编语言指令大全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机----汇编语言入门知识点

    目录 汇编语句的格式 汇编语句的两个基本语句 子程序的调用 查表程序设计 1.x和y均为单字节数的查表程序设计 2.x为单字节数y为双字节数的查表程序设计 3.x和y均为双字节数的查表程序设计 分支转移程序设计 1.单分支选择结构 2.多分支选择结构 循环程序设计 (1) 计数循环控

    2024年04月28日
    浏览(33)
  • 单片机温度检测高温报警系统 汇编语言

    单片机温度检测高温报警系统 实验目的 1 ) 掌握 51 单片机定时器/计数器工作原理与应用; 2 ) 掌握 51 单片机中断系统工作原理与应用; 3 ) 掌握 Keil μ Vision 软件开发环境,汇编语言源程序的编制与调试; 4 )掌握ds18b20温度检测传感器使用方法 5 )掌握单片机拓展总线的

    2024年02月12日
    浏览(25)
  • 单片机 STM32启动文件详解(汇编语言解析)

    以前讲了固件库,从ST官网下载的固件库里面,有许多的启动文件(汇编语言写的.s文件) 启动文件 说明 startup_stm32f10x_ld.s Low Density 小容量 startup_stm32f10x_md.s Medium Density 中容量 startup_stm32f10x_hd.s High Density 高容量 startup_stm32f10x_xl.s Extra Large Density 超大容量 startup_stm32f10x_cl.s Con

    2023年04月25日
    浏览(41)
  • 汇编三、51单片机汇编指令1

    (1)举例:将立即数0x30送入累加器A               MOV       A,              #0x30 标号       操作码      目标地址,数据源                  ;注解 (2)标号,注解可选项,不一定有。 (1)指令执行时间为指令周期,一条指令需要1~4个机器周期。 (2)指令存储空间:指令转

    2024年02月03日
    浏览(34)
  • 51单片机汇编指令表--STC宏晶MCU

    51系列单片机汇编指令表非常庞大,包含了五大类指令,以下是各类指令的一个简要概述和部分示例: 一、数据传送类指令 这些指令用于在寄存器之间、寄存器与存储单元之间以及立即数与寄存器之间的数据传输。 MOV:通用数据传送指令 MOV A,Rn 将工作寄存器Rn的内容传送到

    2024年02月01日
    浏览(24)
  • 汇编十四、51单片机汇编代码规范

    (1)提高源程序的质量和可维护性,从而提高生产力。 (1)常量C;  (2)变量R;  (3)位变量B; (4)标号L; (5)子程序F;  (6)表T;  (7)中断T; (8)函数F... 举例:F_UartSendByte (1)ORG (2)END (3)EQU (4)BIT (5)DS (1)寄存器不能嵌套使用 (2)中断服务程序切换寄存器区(RS0,RS1),这样保护现场就不用保

    2024年02月07日
    浏览(54)
  • 单片机指令合集(汇编)

    (1)数据传送类指令(7种助记符)         MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;         MOVC(Move Code)读取程序存储器数据表格的数据传送;         MOVX (Move External RAM) 对外部RAM的数据传送;         XCH (Exchange) 字节

    2024年02月04日
    浏览(33)
  • 51单片机定时器实验(汇编)

    基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。 一、实验目的 掌握单片机定时器的使用方法。 掌握中断的使用方法。 二、实验内容 采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波

    2024年02月11日
    浏览(41)
  • 51汇编单片机学习(三)八路流水灯

    流水灯主要是在小灯闪烁的基础上对小灯进行移动 八路流水则为赋值一组引脚并对引脚进行定义,在上一篇文章我们能知道当引脚置1时为高电平,此时小灯不亮,引脚置0时,低电平,小灯亮,所以可知在一组引脚中,可设置小灯初始位置从“01111111”开始亮起,而十六进制

    2024年02月07日
    浏览(32)
  • 【MCS-51】51单片机指令系统大全

    指令是指挥微型计算机工作的的计算机命令,对于51单片机来说,其主要使用的指令有两种形式: 机器语言 指令和 汇编语言 指令。 机器语言指令是指使用 二进制代码 表示的指令; 汇编语言指令是指使用 容易我们记忆的缩写符号 表示的机器语言。 下面我使用的是使用 汇

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包