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

目录

一.一般传送指令,即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.hqwc.cn/news/215607.html

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

相关文章

Python报错:AttributeError(类属性、实例属性)

Python报错&#xff1a;AttributeError&#xff08;类属性、实例属性&#xff09; Python报错&#xff1a;AttributeError 这个错误就是说python找不到对应的对象的属性&#xff0c;百度后才发现竟然是初始化类的时候函数名写错了 __init__应该有2条下划线&#xff0c;如果只有…

逆矩阵相关性质与例题

1.方阵的行列式&#xff1a;就是将方阵中的每一个元素转换至行列式中。 1.性质一&#xff1a;转置方阵的行列式等于转置前的行列式。&#xff08;对标性质&#xff1a;行列式与它的转置行列式相等&#xff09; 2.性质二&#xff1a;|ka||a|*k的n次方&#xff0c;n为方阵阶数。 …

Feign接口请求返回异常 no suitable HttpMessageConvert found for response type

问题场景&#xff1a; 后端调用feign接口请求, 接口返回异常, no suitable HttpMessageConvert found for response type 问题描述 报错异常如下&#xff1a; //根据图片特征 去查询人员信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…

ErphpdownV16.21插件 安装教程和插件下载

ErphpdownV16.21插件下载_新版本 上传插件并解压 登入后台插件管理启动ErphpdownV16.21插件即可 启动后设置即可使用此版本为学习版插件 功能介绍&#xff1a; Erphpdown会员推广下载专业版 经过完美测试运行于wordpress 3.x-6.x版本。后续会增加更多实用的功能。已针对此插件…

Javaweb之前端工程化的详细解析

3 前端工程化 3.1 前端工程化介绍 我们目前的前端开发中&#xff0c;当我们需要使用一些资源时&#xff0c;例如&#xff1a;vue.js&#xff0c;和axios.js文件&#xff0c;都是直接再工程中导入的&#xff0c;如下图所示&#xff1a; 但是上述开发模式存在如下问题&#xff…

物联网AI MicroPython学习之语法 实时时钟RTC

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; RTC 介绍 模块功能: 实时时钟RTC驱动模块 接口说明 RTC - 构建RTC对象 函数原型&#xff1a;RTC()参数说明&#xff1a; 无 返回值&#xff1a; 构建的RTC对象。 datetime - RTC时钟操作 函数原型&a…

导入PIL时报错

在导入PIL时,报以下错误: 查找原因 参考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安装PIL时,报如下的错误。 查找说是python版本与wheel文件版本不同,确认本机python版本 …

【深度学习】卷积神经网络结构组成与解释

卷积神经网络是以卷积层为主的深度网路结构&#xff0c;网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积&#xff08;元素相乘再求和&#xff09;的操作。 1. 卷积层 常见的卷积操作如下&#xff1a; 卷积操作解释图解标准卷…

Oracle SQL 注入上的 Django GIS 函数和聚合漏洞 (CVE-2020-9402)

漏洞描述 Django 于2020年3 月4日发布了一个安全更新&#xff0c;修复了 GIS 函数和聚合中的 SQL 注入漏洞。 参考链接&#xff1a; Django security releases issued: 3.0.4, 2.2.11, and 1.11.29 | Weblog | Django 该漏洞要求开发者使用 JSONField/HStoreField;此外&…

Vue服务端渲染——同构渲染

Vue.js 可以用于构建客户端应用程序&#xff0c;组件的代码在浏览器中运行&#xff0c;并输出 DOM 元素。同时&#xff0c;Vue.js 还可以在 Node.js 环境中运行&#xff0c;它可以将同样的组件渲染为字符串并发送给浏览器。这实际上描述了 Vue.js 的两种渲染方式&#xff0c;即…

nodejs微信小程序+python+PHP-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

electron windows robotjs 安装教程

Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘&#xff0c;获取屏幕内容&#xff0c;配合electron可做很多自动化操作。windows下配置环境有很多坑&#xff0c;很多文章都太旧了。试了很多次发现了…