80C51单片机----数据传送类指令

news2024/11/16 9:21:46

目录

一.一般传送指令,即mov指令

1.16位传送(仅1条)

2.8位传送

(1)目的字节为A(累加器)

(2)目的字节为Rn(工作寄存器)

(3)目的字节为direct

(4)目的字节为@Ri

二.特殊传送指令

1.读ROM中常数表的表项指令MOVC

(1)以DPTR内容为基址

(2)以PC内容为基址

2.读片外RAM及接口单元数据的指令MOVX

3.堆栈操作指令PUSH和POP

4.数据交换指令:XCH,XCHD和SWAP

(1)字节交换指令XCH

(2)半字节交换指令


看此篇文章前 ,建议回顾一下这篇文章(7种寻址方式):

http://t.csdnimg.cn/pzV8q

数据传送类指令是指计算机指令集中用于在寄存器之间或者内存和寄存器之间传输数据的指令。这些指令通常用于将数据从一个位置移动到另一个位置,或者从内存中加载数据到寄存器,反之亦然。

数据传送类指令通常不会直接影响标志寄存器的状态。这意味着当执行数据传送指令时,标志寄存器中的条件码通常不会被修改。

标志寄存器通常包含了一些用于控制程序执行流程的条件标志,比如零标志、进位标志、符号标志等。这些标志在执行算术运算或者逻辑运算时会被设置或清除,用于后续的条件分支或者其他操作。

数据传送指令,比如将数据从一个寄存器复制到另一个寄存器,或者将数据从内存加载到寄存器中,这些操作并不直接涉及算术或逻辑运算,因此一般不会修改标志寄存器的状态。

传送类指令分为两类:一般传送,特殊传送

一.一般传送指令,即mov指令

1.16位传送(仅1条)

将16位的立即数,送到DPTR中,并且覆盖原来DPTR中的内容

MOV DPTR, #data16

例:执行指令MOV DPTR,#1234H后,(DPH)=?,(DPL)=?

(DPTR)=#1234H,其中(DPH)=#12H (DPL)=#34H

2.8位传送

通用格式:MOV <目的字节>,<源字节>;其中目的字节可以是A(累加器),Rn(工作寄存器),direct(寄存器的直接地址),@Ri(工作寄存器的间接寻址)

(1)目的字节为A(累加器)

其中“;”表示这条指令的注释,例如MOV A,Rn ; A<-(Rn)表示把Rn的内容复制一份,放到A中,覆盖A中原来的内容。

(2)目的字节为Rn(工作寄存器)

例1:执行指令  MOV R6,#50H后,(R6)=?

将立即数50H,放到R6中,并覆盖R6中原来的内容,所以(R6)=#50H

例2:编程实现将R3中的内容送入R4中

这句话不能翻译为MOV R3, R4,因为这句话目的字节是Rn时,原字节不能是工作寄存器

所以应该先将寄存器R3中的内容放到寄存器A中,再将A中的内容放到R4中

MOV A,R3

MOV R4,A

(3)目的字节为direct

例:若(R1)=#50和H,(50H)=#18H,执行指令MOV 40H,@R1后,(40H)=?

MOV 40H,@R1==MOV 40H,50H,所以(40H)=#18H

(4)目的字节为@Ri

例:若(R1)=#30H,(A)=#20H,执行指令MOV @R1,A后,(30H)=?

MOV @R1,A == MOV 30H,A,所以将A中的内容放到30H,将30H中原来的内容覆盖,所以(30H)=#20H

二.特殊传送指令

1.读ROM中常数表的表项指令MOVC
(1)以DPTR内容为基址

MOVC A,@A+DPTR;A<-((A)+(DPTR))

答案:B 

(2)以PC内容为基址

MOVC A ,@A+PC; A<-((A)+(PC))

1000H:MOVC A,@A+PC,表示程序存储器ROM中地址为1000H的存储单元存储的是MOVC A,@A+PC 

A的内容是30H,而PC是下一条从程序存储器中取出指令的地址,所以PC=1001H,所以

MOVC A,@A+PC==MOVC A, 1031H,将地址为1031H的内容放到A中,覆盖A中的原来的内容

所以把程序存储器1031H单元的内容送入累加器A中

2.读片外RAM及接口单元数据的指令MOVX

注:用@Ri寻址时,高8位地址由P2口提供

关于读片外RAM:

MOV DPTR,#2040H:(DPTR)=#2040H

MOVX A,@DPTR:等价于MOVX A,2040H,表示将片外RAM,地址为2040H的内容,放到片内的累加寄存器A中,并且覆盖A中原来的内容。这就是读片外RAM

MOV 60H,A:把A中的内容复制一份,送到地址是60H的存储单元中,覆盖60H原来的内容

这个程序的功能:将片外RAM,地址是2040H的存储单元的数据,传送到了单片机内部地址是60H的存储单元中,并且覆盖了其原本的内容。

关于写片外RAM:

MOV A,40H:把40H中的内容复制一份,放到A中,并且覆盖A原本的内容

MOV DPTR ,#2560H:(DPTR)=#2560H

MOVX @DPTR,A:等价于MOVX 2560H,A ,表示把A的内容复制一份,放入片外RAM,地址为2560H的存储单元,并把其原来的内容覆盖,这就是写片外RAW

这个程序的功能: 将40H存储单元的数据,传送到片外RAM,地址为2560H的存储单元中,覆盖其原来的内容。

例:把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去,试用汇编语言编写程序

思路:将片外RAM存储器2040H单元中的数据传送到累加寄存器A中,再从累加寄存器中写数据到片外RAM中

MOV DPTR ,#2040H

MOVX A,@DPTR

MOV DPTR,#2560H

MOVX @DPTR,A

注:不能写为 MOVX #2560H,#2040H

MOVX访问的是片外RAM,地址是16位二进制,P0口送低第八位,P2口送高八位,答案是B

(P2)=#20H,(R0)=#00H,MOVX A,@R0:表示读片外RAM,片外RAM地址高八位由P2提供,第八位地址由Ri提供,所以这个指令可以表示将片外RAM 2000H中的内容送到A中,所以(A)=2000H中的内容=#80H

3.堆栈操作指令PUSH和POP

堆栈用于子程序调用时保护返回地址或老用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。

堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元。

入栈指令:单片机先将SP的内容+1,再把寄存器的内容送到SP指向的内存单元中

执行PUSH A时,先将SP的内容+1((SP)=#61H),再将A的内容送入SP所指向的内存单元(61H):(61H)=#30H

执行PUSH A时,先将SP的内容+1((SP)=#62H),再将B的内容送入SP所指向的内存单元(62H):(62H)=#70H

所以SP的内容是62H,61H单元的内容是#30H,62H单元的内容是#70H

出栈指令:先将SP指向的单元的内容赋给寄存器,将SP的内容-1,赋给SP

由上题可知:SP的内容是62H,61H单元的内容是#30H,62H单元的内容是#70H

执行POP A,首先将SP指向的存储单元的内容送给A,所以(A)=#70H,SP的内容-1,所以(SP)=#61H

执行POP B,首先将SP指向的存储单元的内容送给B,所以(B)=#30H,SP的内容-1,所以(SP)=#60H

所以(SP)=#60H,(A)=#70H,(B)=#30H

可以看到单片机执行完这4条语句后,A,B的内容互换了

4.数据交换指令:XCH,XCHD和SWAP
(1)字节交换指令XCH

例:若(R0) = #80H,(A)= #20H。执行指令 XCH A,R0 后,(A)=? (R0) = ?

R0与A的内容呼唤,即(A)=#80H,(R0)=#20H

例:编程实现将内部数据存储器30H和31H单元的内容互换

思路:将30H存储单元的内容赋给A,再将A的内容与31H存储单元的内容呼唤,最后将A的内容赋给30H单元。

MOV A,30H

XCH A,31H

MOV 30H,A

(2)半字节交换指令

XCHD是间址操作数的低半字节与A的低半字节互换。

XCHD A,@R0==XCHD A, 30H,因为(A)=#20H,其中2表示高半字节,0表示低半字节

执行XCHD,操作数的低半字节与A的低半字节互换,即(30H)=#60H,(A)=#27H

SWAP是累加器的高半字节和低半字节互换

(A)=03H

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

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

相关文章

pulseaudio是如何测试出音频延迟的

通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。 那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。 那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。 /*占位…

【maven】【IDEA】idea中使用maven编译项目,报错java: 错误: 找不到符号 【2】

idea中使用maven编译项目,报错java: 错误: 找不到符号 错误状况展示: 如果报这种错,是因为项目中真的找不到报错的方法或者枚举 字段之类的,但实际是 : 点击 File Path

人工智能-注意力机制之注意力汇聚:Nadaraya-Watson 核回归

查询&#xff08;自主提示&#xff09;和键&#xff08;非自主提示&#xff09;之间的交互形成了注意力汇聚&#xff1b; 注意力汇聚有选择地聚合了值&#xff08;感官输入&#xff09;以生成最终的输出。 本节将介绍注意力汇聚的更多细节&#xff0c; 以便从宏观上了解注意力机…

多功能PHP图床源码:Lsky Pro开源版v2.1 – 最新兰空图床

Lsky Pro是一款功能丰富的在线图片上传和管理工具&#xff0c;即兰空图床。它不仅可以作为个人云相册&#xff0c;还可以用作写作贴图库。 该程序的初始版本于2017年10月由ThinkPHP 5开发&#xff0c;经过多个版本的迭代&#xff0c;于2022年3月发布了全新的2.0版本。 Lsky Pro…

线上PDF文件展示

场景&#xff1a; 请求到的PDF&#xff08;url链接&#xff09;&#xff0c;将其展示在页面上 插件&#xff1a; pdfobject &#xff08;我使用的版本&#xff1a; "pdfobject": "^2.2.12" &#xff09; 下载插件就不多说了&#xff0c;下面将其引入&a…

基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码

基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于侏儒猫鼬优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

搜索引擎---项目测试

一)项目背景: 首先介绍一下项目:项目的目标是实现一个基于JAVAAPI的站内搜索引擎 java官方文档是在学习java语言中不可或缺的权威资料&#xff0c;相比于各种网站的Java资料&#xff0c;官方文档无论是语言表达还是组织方式都要更加全面和准确&#xff0c;因为没有人比作者更加…

代码规范有用吗?听听100W年薪谷歌大佬怎么说!

谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范&#xff0c;也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言&#xff0c;而是让大家遵守同一套规则&#xff0c;节省其他人阅读代码的成本&#xff0c;方便协作…

Element UI的Tabs 标签页位置导航栏去除线条

在实际开发中&#xff0c;我们调整了相关样式&#xff0c;导致导航栏的相关样式跟随不上&#xff0c;如下图所示&#xff1a; 因为我跳转了前边文字的样式并以在导航栏添加了相关头像&#xff0c;导致右边的线条定位出现问题&#xff0c;我在想&#xff0c;要不我继续调整右边…

电磁建模的分布式并行计算技术

本文提出了一种新的分布式并行电磁建模技术&#xff0c;以加快电磁结构的神经网络建模过程。现有的电磁建模技术通常需要反复改变微波器件的参数&#xff0c;驱动电磁模拟器以获得足够的训练和测试样本。随着电磁建模问题复杂性的增加&#xff0c;由于单台计算机的性能有限&…

【点云surface】 凹包重构

1 处理过程可视化 原始数据 直通滤波过滤后 pcl::ProjectInliers结果 pcl::ExtractIndices结果 凹包结果 凸包结果 2 处理过程分析&#xff1a; 原始点云 ---> 直通滤波 --> pcl::SACSegmentation分割出平面 -->pcl::ProjectInliers投影 --> pcl::ConcaveHull凹包…

rsyslog学习

rsyslog是什么 RSYSLOG&#xff08;Remote System Logging&#xff09;是一个开源的日志处理工具&#xff0c;用于在 Linux 和 Unix 系统上收集、处理和转发日志。它是一个健壮且高性能的日志处理程序&#xff0c;可以替换 Syslogd 作为标准的系统日志程序。RSYSLOG 提供了许多…

如何利用4G路由器构建茶饮连锁店物联网

随着年轻消费群体的增长&#xff0c;加上移动互联网营销的助推&#xff0c;各类新式奶茶消费风靡大街小巷&#xff0c;也促进了品牌奶茶连锁店的快速扩张。 在店铺快速扩张的局势下&#xff0c;品牌总部对于各间连锁店的零售统计、营销规划、物流调配、卫生监测、安全管理等事务…

qs-一个序列化和反序列化的JavaScript库

起因 一个业务场景中&#xff0c;最终得到一串字符"status[0]value1&status[1]value2" 通过解析&#xff0c;理应得到一个数组&#xff0c;却得到一个对象 于是展开问题排查 最终发现是qs.parse 这个地方出了问题 排查结果 qs解析这种带下标的字符串时&#xff…

视频号小店如何上架商品?新手应该怎么做?实操分享!

我是电商珠珠 视频号小店开通之后&#xff0c;很多人都不明白怎么去进行商品上架的。 其实&#xff0c;上架方式一共有两种&#xff0c;接下来我详细的来给大家讲一讲具体的上架流程。 一、软件 在商品上架的时候&#xff0c;我一般会用到软件来采集商品上架。 软件上架的…

19.oracle11g中的游标

oracle11g中的游标 一、案例引入二、什么是游标三、隐式游标1、隐式游标的属性2、创建语法3、示例 四、显示游标1、显示游标的属性2、创建语法3、示例 五、REF游标1、REF游标的属性2、创建语法3、示例 六、循环游标1、 循环游标的作用2、用for 与 loop 创建3、示例 一、案例引入…

渗透测试信息搜集

注&#xff1a;太简陋了&#xff0c;不忍直视 渗透测试信息收集 黑盒测试&#xff1a;给域名 灰盒测试&#xff1a;给域名、账户(或密码) 白盒测试&#xff1a;给域名、账户、密码 授权书 对安全公司进行授权 攻防演习 是对个人进行授权 渗透测试&#xff1a;&#xff0…

【2023.11.24】Mybatis基本连接语法学习➹

基本配置 1.如果使用Maven管理项目&#xff0c;需要在pom.xml中配置依赖。 2.安装Mybatis-3.5.7.jar包 3.进行XML配置&#xff1a;这里将文件命名为mybatis-config.xml 配置数据库连接XML文件 <?xml version"1.0" encoding"UTF-8" ?> <!DO…

【华为数通HCIP | 网络工程师】821-IGP高频题、易错题之OSPF(5)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

周报6_YMK

周报6 本周主要在看代码&#xff1a;看Medusa头的代码发现不是很了解base_model那部分&#xff0c;所以又去看了llama2的代码和一些相关博客。 重写了一部分佛山中医学院项目的代码&#xff0c;更规范一些。 调研CosmoFlow&#xff0c;是一个深度学习预测宇宙参数的模型&…