51单片机汇编指令

2023-11-12

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

数据传送类指令

内部数据传送指令

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

外部数据传送指令

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

交换类指令

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

查表指令

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

堆栈操作指令

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

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

算术运算类指令

普通加法指令

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

带进位位加法指令

助记符 作用
ADDC A,Rn 将A中的数据,Rn中的数据和进位位Cy相加并将结果存放在A中
ADDC A,direct 将direct这个地址中的数据,A中的数据和进位位Cy相加并将结果存放在A中
ADDC A,@Ri Ri存放了一个地址,将该地址的数据,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,@Ri Ri中存放了一个地址,用A中的值减去这个地址中的值再减去进位位Cy并将结果存放在A中
SUBB A,#data 用A中的值减去data再减去进位位Cy并将结果存放在A中

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

加1指令

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

减一指令

助记符 作用
DEC A A中的值减1并将结果存放在A中
DEC Rn Rn中的值减1并将结果存放在Rn中
DEC direct 将direct这个地址中的数据减1并将结果存放在direct这个地址中
DEC @Ri Ri中存放了一个地址,将该地址中的数据减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,@Ri Ri中存放了一个地址,将该地址中的数据与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,@Ri Ri中存放了一个地址,将该地址中的数据与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,@Ri Ri中存放了一个地址,将该地址中的数据与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 dst dst表示一个标识符,如果Cy的值为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行
JNC dst dst表示一个标识符,如果Cy的值不为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行

例:

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

控制转移类指令

无条件转移指令

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

例:

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

条件转移指令

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

例:

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

调用和返回指令

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

例:

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

ADD_AB:
ADD   A,	B
RET

END

空操作

助记符 作用 机器周期
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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机汇编指令 的相关文章

  • 自动化代码审计工具源伞科技Pinpoint

    自动化代码审计工具源伞科技Pinpoint介绍 源伞科技Pinpoint 源伞科技2016年由香港科大团队创立 立足于国际水平的学术研究积累 秉承工匠精神 致力用最先进的自动程序分析技术保障软件质量 为企业提供以人工智能为基础的工业级程序缺
  • 虚拟聊天记录生成器,微信对话视频生成器,让微信对话以视频形式呈现!

    微信对话视频生成器是一款功能强大的工具 可以将微信聊天记录转化成生动有趣的视频 它不仅可以让用户在朋友圈或社交平台上展示自己的聊天趣事 还可以用于制作个性化的视频礼物 接下来 我们将介绍该工具的主要功能和解决问题的案例 输入聊天记录内容 直
  • C++学习日记和心得(一)(新手帖,高手勿笑)

    前言 我之前三年也学过其他语言 VB pascal 都不是非常主流 但有一定程序学习的基础 没学过程序的孩子也不要伤心 只要认认真真的学习还是可以学会的 我也是刚开始学C 所以希望大家跟我一同从0开始学习C 如果对我有一些疑问和批评欢迎提出
  • 【华为OD机试python】阿里巴巴找黄金宝箱(V)【2023 B卷

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 阿里巴巴念出一个咒语数字k k
  • 【100%通过率 】租车骑绿岛【华为OD机试 真题c++/java/python 2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 部门组织绿岛骑行团建活动 租用公共双人自行车 每辆自行车最多坐两人 最大载重M 给出部门每个人的体重 请问最多需要租用多少双人自行车 输入描述
  • 什么是向上管理?意义?

    今天聊一个职场热词 向上管理 这两天刷到字节跳动的招聘官网 他们在阐述 坦诚清晰 的字节范儿时 提到了一句话 实事求是 暴露问题 反对 向上管理 这一点很有意思 因为 向上管理 几乎是职场入门必修课 所以我试着在字节跳动的文化语境中 来理解
  • 使用gcov+lcov工具可视化代码分支覆盖率数据

    通过一个简单的例子 来展示如何使用gcov lcov来生成代码分支覆盖率数据并将其图形化显示 假设有一个main cpp文件 1 首先使用gcc编译该文件 g main cpp fprofile arcs ftest coverage l

随机推荐

  • CUDA代码笔记(二) cudaOpenMP

    cudaOpenMP项目展示了如何在cuda项目中运用openmp技术 该项目位于cuda samples文件夹下的0 Simple cudaOpenMP文件夹下 在正式开始剖析代码之前 让我们先来了解一下openmp的背景知识 OpenM
  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

    Docker进阶 mysql 主从复制 redis集群3主3从 扩缩容案例 一 Docker常规软件安装 1 1 docker 安装 tomcat 默认最新版 1 2 docker 指定安装 tomcat8 0 1 3 docker 安装
  • WinLicense&Themida 2019革命性升级,软件加密后破解难度突破天际

    随着软件普及程度 互联网技术的发展 以及正版软件购买用户数量和软件版本的增加 软件的保护变得越来越重要 而我们常见的软件保护方式有软件授权和软件加密 Oreans是西班牙非常著名的软件系统保护公司 提供代码混淆 版本控制等多种工具 其中Wi
  • CMake编译QT项目,解决undefined reference to vtable问题

    项目布局应为 src文件夹中存放cpp文件和包含了继承了QObject类的class的头文件 include文件夹中存放其他头文件 在项目文件夹中新建CMakeLists txt文件 新建build文件夹和lib文件夹 此时项目文件夹的结构
  • 通过maven配置不同的开发环境

    前言 项目有开发 测试 生产至少有这三个环境 所需要的配置信息肯定不一样 比如需要开发环境的时候 注解掉测试和生产的配置信息 打开开发的配置信息 后来工作接触到新项目 发现是通过maven来控制加载不同的配置文件 非常方便 所以这篇博客学习
  • 不一样的命令提示符、 PowerShell、windows terminal

    展示图片 怎么操作 1 打开Microsoft Store 软件商店 搜索windows terminal 2 安装即可 3 点击windows 最近添加windows terminal 4 点击设置 gt 默认值 gt 外观 5 滑到最底
  • 爬虫技术可以分析数据吗?

    目前在不少大数据团队中 数据分析和数据挖掘工程师通常都有明确的分工 数据采集往往并不是数据分析和挖掘工程师的任务 通常做爬虫的是大数据应用开发程序员或者是数据采集工程师 使用爬虫工具 的工作任务 但是对于数据分析工程师来说 掌握爬虫技术也是
  • 【RF时序预测】基于随机森林算法的时间序列预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 随机森林算法是一种集成学习方法 通过组合多个决策树来进行分类和回归 算法的原理如下
  • c++ 实现贪吃蛇(含技术难点解析和完整代码)

    文章目录 0 参考资料 1 技术难点 1 1 关于光标的移动 1 2 关于蛇的移动 1 2 1 从键盘上读取输入 1 2 2 蛇的移动 1 3 食物的生成 2 完整代码 0 参考资料 借鉴了这位大佬的博客及代码 在其基础上进行了修改 特此鸣
  • Antd Pro新增表格页面(二)

    前言 承接上一篇博客Ant Design Pro 新增一个表格页面 一 继续对index tsx进行修改 请求相关修改 复制过来的index tsx文件中的请求都是rule的增删查改 将其修改为前文已经写好的接口请求 import rule
  • VUE利用el-upload实现文件上传的功能,后端获取文件数据

    vue点击组件弹出窗口 span class tool btn i class table tool btn add icon i 批量新增 span 在方法中定义一个控制器 export default data return files
  • PTA---C++实现,定义抽象类Person、派生类Student和类Teacher

    问题描述 设计抽象类Person 派生出具体类 学生类Student和教师类Teacher 创建若干不同类对象后并在主方法中测试 数据成员定义 Person ID 姓名 生日 Student 专业 成绩 Teacher 职称 工资 带参构造
  • 贝叶斯定理及其Matlab程序设计

    目录 1 贝叶斯定理介绍 2 贝叶斯定理的Matlab代码实现 3 贝叶斯定理的C语言代码实现 4 贝叶斯定理的应用实例分析 1 贝叶斯定理介绍 贝叶斯定理 Bayes theorem 又称贝叶斯法则或贝氏定理 是概率论与统计学的基本定理之
  • OpenStack企业级实战

    一 环境初始化 1 CentOS7一键安装OpenStack 安装参考 Install RDO 前提条件 准备一个8g或16g内存的centos7 有一块网卡可以访问internet 磁盘 40G cpu分2 4线程 cpu要开启虚拟化 r
  • 串---KMP模式匹配算法之获取next数组

    一 获取模式串T的next数组值 1 回顾 我们所知道的KMP算法next数组的作用 next j 表示当前模式串T的j下标对目标串S的i值失配时 我们应该使用模式串的下标为next j 接着去和目标串失配的i值进行匹配 而KMP算法的ne
  • __attribute__((visibility("default")))

    设置符号可见性 vis c include
  • python创建可以迭代的类

    python中可以使用 for in 进行遍历 迭代 的数据类型 都是可迭代的对象 如 列表 字符串 字典 元组 都是可迭代的 Iterable 而浮点数 整型 布尔值都是不可迭代 for i in 1 2 3 4 print i for
  • NIO效率高的原理之零拷贝与直接内存映射

    前言 在笔者上一篇博客 详解了NIO 并总结NIO相比BIO的效率要高的三个原因 点击查看 这篇博客将针对第三个原因 进行更详细的讲解 首先澄清 零拷贝与内存直接映射并不是Java中独有的概念 并且这两个技术并不是等价的 零拷贝 零拷贝是指
  • python循环经典例题_Python学习之while循环练习题

    Python自近两年在国内兴起之后 引起了很多IT界小伙伴们的注意 开始学习Python的朋友逐渐增多 但是学习时发现 循环一处开始默默的考验逻辑思维了 还是再做几个练习题来梳理复习一下吧 1 使用while循环输出1 2 3 4 5 6
  • 51单片机汇编指令

    注 Rn与Ri中n 0 7 i 0 1 另外Cy是进位位 同时也是状态位 标志位 数据传送类指令 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A Rn 将Rn的内容传送给A 寄存器 1 1 MOV A direct