51单片机汇编指令

注: Rn与Ri中n=0 ~ 7,i=0 ~ 1,另外Cy是进位位,同时也是状态位,标志位

数据传送类指令

内部数据传送指令

助记符作用寻址方式机器周期字节数
MOV A,Rn将Rn的内容传送给A寄存器11
MOV A,directdirect是一个地址单元,将该地址的内容传送给A,例如:MOV A,50H直接12
MOV A @RiRi中存储了一个地址,将该地址的内容传送给A,例如:MOV A ,@R0寄存器间接11
MOV A #data将data传送到A,例如:MOV A,#00H立即数12
MOV Rn,A将A的内容传送到Rn中寄存器11
MOV Rn,directdirect是一个地址单元,将该地址的内容传送给Rn,例如:MOV R3,50H直接12
MOV Rn,#data将data传送到Rn,例如:MOV R3,#00H立即数12
MOV direct,A将A的内容传送到direct这个地址中,例如:MOV 50H,A寄存器12
MOV direct,Rn将Rn中的内容传送到direct这个地址中寄存器12
MOV direct2,direct1将diret1这个地址中的内容传送到direct2这个地址中直接23
MOV direct,@RiRi中存储的是一个地址,将这个地址的内容传送给direct这个地址中寄存器间接22
MOV direct,#data将data这个数据传送到direct这个地址中立即数23
MOV @Ri,ARi中存储的是一个地址,将A中的内容传送到这个地址中寄存器11
MOV @Ri,directRi存储的是一个地址,将direct这个地址中的数据传送到Ri存储的地址中直接22
MOV @Ri,#dataRi存储的是一个地址,将data传送到这个地址中,例如:MOV @R0,#00H立即数12
MOV DPTR,#data16将一个16位data16数据传送到DPTR数据指针中,高8位送入DPH,低8位送入DPL立即数23

外部数据传送指令

助记符作用寻址方式机器周期字节数
MOVX A,@DPTRDPTR中存放了一个地址,将该地址的数据传送到A寄存器间接21
MOVX A,@RiRi中存放了一个地址,将该地址的数据传送到A寄存器间接21
MOVX @DPTR,ADPTR中存放了一个地址,将A中的内容传送到该地址中寄存器21
MOVX @Ri,ARi中存放了一个地址,将A中的内容传送到这个地址中寄存器21

交换类指令

助记符作用寻址方式机器周期字节数
XCH A,Rn将Rn中的内容与A中的内容互换寄存器11
XCH A,direct将direct这个地址中的内容与A中的内容互换直接12
XCH A,@RiRi中存放的是一个地址,将该地址中的内容与A中的内容互换寄存器间接11
XCHD A,@RiRi中存放了一个地址,将该地址中的数据的低4位与A中数据的低4位相交换,高4位不变寄存器间接11
SWAP A将A中的数据的高4位与低4位相交换寄存器11

查表指令

助记符作用寻址方式机器周期字节数
MOVC A,@A+PC从PC指令地址开始偏移A个地址后,将该地址中的数据再传送给A变址寻址21
MOVC A,@A+DPTR从DPTR地址中偏移A个地址后再将该地址中的内容传送给A变址寻址21

堆栈操作指令

助记符作用寻址方式机器周期字节数
PUSH direct将direct 这个地址存放的数据入栈直接22
POP diret将栈顶数据存放在direct这个地址中直接22

注:在使用堆栈时,先要给SP赋初始值,该值是栈底地址,堆栈遵循先进后出的原则,每入栈一个数据后,SP会自加1,出栈时SP会自减1,另外也可对A,B寄存器进行入栈出栈操作,但是对于A寄存器,在赋值时可写A,但在出栈入栈时要写成ACC

算术运算类指令

普通加法指令

助记符作用
ADD A,Rn将A中的数据与Rn中的数据相加并将结果存放在A中
ADD A,direct将direct这个地址中的数据与A中的数据相加并将结果存放在A
ADD A,@RiRi存放了一个地址,将该地址的数据与A中的数据相加并将结果存放在A中
ADD A,#data将data与A中的数据相加并将结果存放在A中

带进位位加法指令

助记符作用
ADDC A,Rn将A中的数据,Rn中的数据和进位位Cy相加并将结果存放在A中
ADDC A,direct将direct这个地址中的数据,A中的数据和进位位Cy相加并将结果存放在A中
ADDC A,@RiRi存放了一个地址,将该地址的数据,A中的数据和进位位Cy相加并将结果存放在A中
ADDC A,#data将data与A中的数据相加并将结果存放在A中

注:ADDC加法指令常用于多字节加法运算中,例如16位数,其低8位可由ADD指令相加,相加的结果若大于255将发生进位,即Cy=1,在相加这两个数的高8位时就必须加上这个进位位,故而使用ADDC指令。相加进位位,就比如说 0xff + 0x01,结果是0x0100,由于51单片机寄存器是8位的,那么相加的结果只能将低8位存入寄存器中,结果便是0,但此时发生了进位,进位位Cy=1。

减法指令

助记符作用
SUBB A,Rn用A中的值减去Rn中的值再减去进位位Cy并将结果存放在A中
SUBB A,direct用A中的值减去direct这个地址中的值再减去进位位Cy并将结果存放在A中
SUBB A,@RiRi中存放了一个地址,用A中的值减去这个地址中的值再减去进位位Cy并将结果存放在A中
SUBB A,#data用A中的值减去data再减去进位位Cy并将结果存放在A中

注:一般在用减法时先将进位位Cy清零 , CLR C

加1指令

助记符作用
INC AA中的值加1并将结果存放在A中
INC RnRn中的值加1并将结果存放在Rn中
INC direct将direct这个地址中的值加1并将结果存在direct这个地址中
INC @RiRi中存放了一个地址,将该地址中的数据加1并将结果仍存在这个地址中
INC DPTRDPTR指针指向的数据加1并存在DPTR中

减一指令

助记符作用
DEC AA中的值减1并将结果存放在A中
DEC RnRn中的值减1并将结果存放在Rn中
DEC direct将direct这个地址中的数据减1并将结果存放在direct这个地址中
DEC @RiRi中存放了一个地址,将该地址中的数据减1并将结果存放在这个地址中

乘除法指令

助记符作用
MUL AB将A中的值与B中的值相乘,积的高位存在B中,低位存在A中
DIV AB用A中的值除以B中的值,商存在A中,余数存在B中

逻辑运算类指令

逻辑与指令

助记符作用
ANL A,direct将A中的值与direct这个地址中的值相与并将结果存在A中
ANL A,Rn将A中的值与Rn中的值相与并将结果存在A中
ANL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相与并将结果存在A中
ANL A,#data将A中的值与data相与并将结果存在A中
ANL direct,A将direct这个地址中的值与A中的值相与并将结果存在direct这个地址中
ANL direct,#data将direct这个地址中的值与data相与并将结果存在direct这个地址中

逻辑或指令

助记符作用
ORL A,direct将A中的值与direct这个地址中的值相或并将结果存在A中
ORL A,Rn将A中的值与Rn中的值相或并将结果存在A中
ORL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相或并将结果存在A中
ORL A,#data将A中的值与data相或并将结果存在A中
ORL direct,A将direct这个地址中的值与A中的值相或并将结果存在direct这个地址中
ORL direct,#data将direct这个地址中的值与data相或并将结果存在direct这个地址中

逻辑异或指令

助记符作用
XRL A,direct将A中的值与direct这个地址中的值相异或并将结果存在A中
XRL A,Rn将A中的值与Rn中的值相异或并将结果存在A中
XRL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相异或并将结果存在A中
XRL A,#data将A中的值与data相异或并将结果存在A中
XRL direct,A将direct这个地址中的值与A中的值相异或并将结果存在direct这个地址中
XRL direct,#data将direct这个地址中的值与data相异或并将结果存在direct这个地址中

循环移位指令

助记符作用
RL A将A中的值按二进制循环左移,即第0位变为第1位,以此类推,第7位变为第0位
RLC A带进位循环左移,即进位位Cy变为A中的值的第0位,原第0位变为第1位,以此类推,第7位变为标志位Cy
RR A将A中的值按二进制循环右移,即第7位变为第6位,以此类推,第0位变为第7位
RRC A带进位循环右移,即进位位Cy变为A中的值的第7位,原第7位变为第6位,以此类推,第0位变为标志位Cy

位操作类指令

注:在单片机中要对某个引脚进行操作,这个引脚就是一个位bit,例如将P1.1引脚置1,可用 SETB P1.1

位传送指令

助记符作用
MOV C,bit将bit的值传送到标志位Cy中
MOV bit,C将标志位Cy的值传送到bit中

位置位和位复位指令

助记符作用
CLR C将标志位Cy清0
CLR bit将bit清0
SETB C将标志位Cy置1
SETB bit将bit置1

位运算指令

助记符作用
ANL C,bit将标志位Cy与bit相与并将结果存到标志位Cy中
ANL C,/bit将bit取反和标志位Cy相与并将结果存到标志位Cy中
ORL C,bit将标志位Cy与bit相或并将结果存到标志位Cy中
ORL C,/bit将bit取反和标志位Cy相或并将结果存到标志位Cy中
CPL C将标志位Cy取反
CPL bit将bit取反

位转移指令

助记符作用
JB bit,rel如果bit的值位1,则程序跳到当前指令地址+rel这个位置继续执行,否则顺序执行
JNB bit ,rel如果bit的值位0,则程序跳到当前指令地址+rel这个位置继续执行 ,否则顺序执行
JBC bit ,erl如果bit的值位1,则程序跳到当前指令地址+rel这个位置继续执行并将bit清0,否则顺序执行

判断Cy标志指令

助记符作用
JC dstdst表示一个标识符,如果Cy的值为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行
JNC dstdst表示一个标识符,如果Cy的值不为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行

例:

SETB  C
JC    dst
MOV   A,	#01H
dst:
MOV   A,	#02H
END

控制转移类指令

无条件转移指令

助记符作用范围
LJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行任意位置
AJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行2KB
SJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行-128~127字节以内
JMP @A+DPTR程序无条件跳转到A与DPTR和这个地址位置开始执行64KB

例:

MOV    A,	#03H
LJMP   dst
MOV    A,	#01H
dst:
MOV    A,	#02H
END

条件转移指令

助记符作用范围
JZ dstdst是一个标识符,如果A的值为0,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节
JNZ dstdst是一个标识符,如果A的值不为1,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节
CJNE A,#data,dstdst是一个标识符,如果A的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE Rn,#data,dstdst是一个标识符,如果Rn的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE @Ri,#data,dstdst是一个标识符,Ri存放了一个地址,如果这个地址存放的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果这个地址存放的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE A,direct,dstdst是一个标识符,如果A的值与direct的值不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于direct的值,Cy=1,否则Cy=0-128~127字节
DJNZ Rn,dstdst是一个标识符,将Rn的值先减1,如果此时Rn的值不为0,程序跳转到dst这个位置开始执行,否则顺序执行,常用作循环中-128~127字节
DJNZ direct,dstdst是一个标识符,将direct这个地址的值先减1,如果此时direct这个地址的值不为0,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节

例:

MOV    A,	#02H
JZ     dst
MOV    B,	#01H
dst:
MOV    B,	#02H
END

调用和返回指令

助记符作用范围
ACALL namename表示子程序名,该指令表示调用子程序2KB
LCALL namename表示子程序名,该指令表示调用子程序任意位置
RET该指令表示调用子程序结束,子程序返回
RETI该指令表示中断结束,中断返回

例:

MOV   A,	#02H
MOV   B,	#03H
ACALL ADD_AB
MOV   R0,	A
SJMP  $		  //程序卡在这个位置ADD_AB:
ADD   A,	B
RETEND

空操作

助记符作用机器周期
NOP空操作1

伪指令

ORG

ORG  1000H
MOV  A,#00H

规定程序块或数据块存放的起始地址,示例中表示MOV A,#00H存放在1000H开始的单元中

END
汇编语言源程序结束标志

DB

ORG  1000H
TAB:
DB  02H,'B',"abc"

将指令后的数据依次存放在指定的地址单元中。示例中TAB的地址为1000H,故而从该地址开始的单元依次存放02H,B的ASCII码,a的ASCII码,b的ASCII码,c的ASCII码

DW

ORG  1000H
TAB:
DW   3000H, 80H

该指令后的数据为2个字节,存放数据时类似DB,高位在前,低位在后。示例中TAB的地址为1000H,那么1000H存放30H,1001H存放00H,1002H存放00H,1003H存放80H

DS

ORG   1000H
TAB:
DS    1FH

该指令用于保留存储单元用作备用空间,示例中TAB的地址为1000H,,从1000H开始预留32个存储字节空间(1000H~101FH)

EQU

DLY:	EQU	3200H
TAB:	EQU	DLY

将该指令后的值赋给本语句的标号。示例中:DLY的地址是3200H,并将TAB的地址设置为DLY的地址,即TAB的地址也是3200H

BIT

DLY1:	BIT	31H
DIY2:	BIT 32H

将位地址赋给本语句的标号,示例中:DLY1和DLY2当作位地址31H和32H。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript:世界上误解最深的语言

JavaScript:The Worlds Most Misunderstood Programming LanguageJavaScript:世界上误解最深的语言Douglas Crockfordwww.crockford.com翻译:袁晓辉(http://blog.csdn.net/uoyevoli/)JavaScript, aka Mocha, aka LiveScript, aka …

第 5-5 课:线程安全——synchronized 和 ReentrantLock + 面试题

前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题。线程安全问题指的是在多线程中,各线程之间因为同时操作所产生的数据污染或其他非预期的程序运行结果。 线程安全 1)非线程安全事例 比如 A 和 B 同时给 C 转账的问题…

MFC中的几个常用类——CFileDialog

2019独角兽企业重金招聘Python工程师标准>>> 1 简介 CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 可以用 构造函数提供的方式使用CFileDialog,也可以从CFileDi…

数组中的filter方法_数组filter()方法以及JavaScript中的示例

数组中的filter方法JavaScript filter()方法 (JavaScript filter() method) filter() method is used to returns an array with the values which pass the given test (condition). filter()方法用于返回具有通过给定测试(条件)的值的数组。 Syntax: 句法: arra…

Oracle内置角色connect与resource的权限

首先用一个命令赋予user用户connect角色和resource角色: grant connect,resource to user; 运行成功后用户包括的权限: CONNECT角色: --是授予最终用户的典型权利,最基本的 ALTER SESSION --修改会话 CREATE CLUSTER --建立聚簇 CREATE DATAB…

第 5-7 课:Java 中的各种锁和 CAS + 面试题

如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一。因此下面就让我们一起深入地学习一下这些锁吧。 乐观锁和悲观锁 悲观锁和乐观锁并不是某个具体的“锁”而是一种并…

Exchange Server2010部署完后的配置:CA、Outlook Anywhere、OWA域名简写

Exchange Server 2010邮件系统安装完成后,必须经过相应的配置后,才能使Exchange Server 2010邮件系统提供基本的访问、邮件收发等基本功能。下面我们逐一看看如何让Exchanger Server跑起来。Exchange Server2010产品授权:我们目前所安装的Exc…

STM32——PID恒温控制

原理 元件 stm32f103核心板、L298N模块(当然用MOS管更好)、led一个、NPN三极管一个、蜂鸣器一个、DHT11一个、LCD1602一个、电阻200欧两个、可调电阻10K一个、加热丝一个 功能描述 用DHT11检测当前环境温湿度,并将数据显示在LCD1602上,在用设定温度与当…

第 6-2 课:SpringMVC 核心 + 面试题

Spring MVC 介绍 Spring MVC(Spring Web MVC)是 Spring Framework 提供的 Web 组件,它的实现基于 MVC 的设计模式:Controller(控制层)、Model(模型层)、View(视图层),提供了前端路由映射、视图解析等功能,让 Java Web 开发变得更加简单,也属于 Java 开发中必须要…

Python | 查找字符串中每个字符的频率

Given a string and we have to find the frequency of each character of the string in Python. 给定一个字符串,我们必须在Python中查找该字符串的每个字符的频率。 Example: 例: Input: "hello"Output:{o: 1, h: 1, e: 1, l: 2}Python c…

Lync2013 升级错误总结8 Lync2013 日志总是提示进程 RtcHost(5724) 收到了一个无效的客户端证书...

错误提示:解决方法:1打开注册表引导到:HKLM\System\CurrentControlSet\Control\SecurityProviders\Schannel2 新建一个DWORD键值:值的名称:EnableSessionTicket3 右键这个值点编辑讲数值数据修改成:24 重新…

简易的遍历文件加密解密

功能描述 将生成的可执行程序放在指定的文件夹内,双击后将该目录下所有文件包括子文件夹内文件全部加密,再次双击运行后将进行解密。 加密解密实现 主要运用了异或与取反操作,异或:两个值不同为1,相同为0。取反就是将该…

oracle 查看用户、权限、角色

查看用户、权限、角色的命令和视图1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户系统权限: select * from dba_sys_privs; select * from session_privs; select * from user_sys_privs; 3.…

Java StackTraceElement getClassName()方法与示例

StackTraceElement类的getClassName()方法 (StackTraceElement Class getClassName() method) getClassName() method is available in java.lang package. getClassName()方法在java.lang包中可用。 getClassName() method is used to retrieve the fully qualified name of t…

django post and get?

GET是通过URL传给服务器的,POST是通过HTTP头传给服务器的,post的数据是不跟在请求的url后,而是在http头中,get是在url中 post的安全性比get高,因为有的服务器会缓存get数据,post数据不会被缓存,而且当你再次…

操作系统 测试题

一、单选 1、下面哪项不是常用调度算法 A、FCFS B、SJF C、HRN D、ABC 2、响应比的计算方法是 A、(作业等待时间作业执行时间)/作业执行时间 B、(作业等待时间作业执行时间)/作业等待时间 C、(作业等待时间&#xf…

安卓手机使用linux(含图形界面)——Aid Learning

以前再安卓手机上使用linux系统都是使用Termux,安装上很麻烦,而且还是黑乎乎的窗口,没有图形界面,对于初学linux者来说并不友好,而Aid Learning就更人性化了,他是一种模拟的linux,其安装十分简易&#xff0…

第 6-1 课:Spring 核心 + 面试题

Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的诞生是为了让开发者更方便地使用 Spring,因此 Spring 在 Java 体系中的地位可谓首屈一指。当然,如果想…

Java SecurityManager getThreadGroup()方法与示例

SecurityManager类的getThreadGroup()方法 (SecurityManager Class getThreadGroup() method) getThreadGroup() method is available in java.lang package. getThreadGroup()方法在java.lang包中可用。 getThreadGroup() method is used to return the thread group into whi…

通知主线程刷新

dispatch_async(dispatch_get_main_queue(), ^{ //回调或者说是通知主线程刷新转载于:https://www.cnblogs.com/ejllen/p/4153118.html