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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java中的String.format()方法详解

介绍 String.format() 是 Java 中的一个字符串格式化方法&#xff0c;它用于生成指定格式的字符串。这个方法可以接受一个或多个参数&#xff0c;并将它们按照指定的格式插入到字符串中。它使用了类似于 C 语言中的 printf 函数的语法。 String.format() 方法的使用格式如下&…

Tars框架 Tars-Go 学习

Tars 框架安装 网上安装教程比较多&#xff0c;官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…

微机原理_3

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 在 8086 微机系统中&#xff0c;完成对指令译码操作功能的部件是&#xff08;)。 A. EU B. BIU C. SRAM D. DRAM 使计算机执行某…

【Rust日报】2023-11-22 Floneum -- 基于 Rust 的一款用于 AI 工作流程的图形编辑器

Floneum -- 基于 Rust 的一款用于 AI 工作流程的图形编辑器 Floneum 是一款用于 AI 工作流程的图形编辑器&#xff0c;专注于社区制作的插件、本地 AI 和安全性。 Floneum 有哪些特性&#xff1a; 可视化界面&#xff1a;您无需任何编程知识即可使用Floneum。可视化图形编辑器可…

2023年金融信创行业研究报告

第一章 行业概况 1.1 定义 金融信创是指在金融行业中应用的信息技术&#xff0c;特别是那些涉及到金融IT基础设施、基础软件、应用软件和信息安全等方面的技术和产品。这一概念源于更广泛的“信创 (信息技术应用创新)”&#xff0c;即通过中国国产信息技术替换海外信息技术&a…

某60区块链安全之未初始化的存储指针实战二学习记录

系列文章目录 文章目录 系列文章目录未初始化的存储指针实战二实验目的实验环境实验工具实验原理实验内容实验过程EXP利用 未初始化的存储指针实战二 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 实验…

【Vue】图片切换

上一篇&#xff1a; vue的指令 https://blog.csdn.net/m0_67930426/article/details/134599378?spm1001.2014.3001.5502 本篇所需要的指令有&#xff1a; v-on v-bind v-show <!DOCTYPE html> <html lang"en"> <head><meta charset"…

【微服务专题】SpringBoot自动配置源码解析

目录 前言阅读对象阅读导航前置知识笔记正文0、什么是自动配置0.1 基本概念0.2 SpringBoot中的【约定大于配置】0.3 从SpringMVC看【约定大于配置】0.4 从Redis看【约定大于配置】 一、EnableAutoConfiguration源码解析二、SpringBoot常用条件注解源码解析2.1 自定义条件注解2.…

基于 STM32Cube.AI 的嵌入式人脸识别算法实现

本文介绍了如何使用 STM32Cube.AI 工具开发嵌入式人脸识别算法。首先&#xff0c;我们将简要介绍 STM32Cube.AI 工具和 STM32F系列单片机的特点。接下来&#xff0c;我们将详细讨论如何使用 STM32Cube.AI 工具链和相关库来进行人脸识别算法的开发和优化。最后&#xff0c;我们提…

仿 美图 / 饿了么,店铺详情页功能

前言 UI有所不同&#xff0c;但功能差不多&#xff0c;商品添加购物车功能 正在写&#xff0c;写完会提交仓库。 效果图一&#xff1a;左右RecyclerView 联动 效果图二&#xff1a;通过点击 向上偏移至最大值 效果图三&#xff1a;通过点击 或 拖动 展开收缩公告 效果图四&…

2021年12月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行下列程序,屏幕上可以看到几只小猫? A:1 B:3 C:4 D:0 答案:B 第2题 下列程序哪个可以实现:按下空格键,播放完音乐后说“你好!”2秒? A: B: C:

知虾官网:探索跨境电商数据的新平台

随着电子商务的快速发展&#xff0c;跨境电商已成为全球贸易的重要组成部分。为了帮助企业更好地了解市场、选品、分析竞争对手和科学运营&#xff0c;知虾官网应运而生。本文将为您介绍知虾官网的功能和优势&#xff0c;以及广州萌啦信息科技有限公司的背景。 一、知虾官网的功…

Python中classmethod的妙用

更多Python学习内容&#xff1a;ipengtao.com 在Python中&#xff0c;classmethod装饰器为开发者提供了一种强大的工具&#xff0c;使得类方法的定义和使用更加灵活。本文将深入探讨classmethod的妙用&#xff0c;通过丰富的示例代码展示其在不同场景下的实际应用。 类方法与实…

【JavaWeb】TomcatJavaWebHTTP

Tomcat&JavaWeb&HTTP 文章目录 Tomcat&JavaWeb&HTTP一、Tomcat1.1 版本选择及安装1.2 目录1.3 WEB项目部署的方式 二、IDEA中Java Web开发部署流程三、HTTP协议3.1 发展历程3.2 HTTP协议的会话方式3.3 请求报文3.4 响应报文 一、Tomcat Tomcat是Apache 软件基…

postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第35讲&#…

【CVE-2021-1675】Spoolsv打印机服务任意DLL加载漏洞分析

漏洞详情 简介 打印机服务提供了添加打印机的接口&#xff0c;该接口缺乏安全性校验&#xff0c;导致攻击者可以伪造打印机信息&#xff0c;在添加新的打印机时实现加载恶意DLL。这造成的后果就是以system权限执行任意代码。 影响版本 windows_10 20h2 windows_10 21h1 win…

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法&#xff1a; 第一步&#xff1a;需要自备华硕6个底包工厂安装包&#xff08;EDN.KIT.OFS.SWP.HDI.TLK&#xff09;或者自己备份的iso/esd/wim等镜像恢复 支持系列&#xff1a; 灵耀系列原装系统 无畏系列原装系统 枪…

原型 原型对象 原型链

在面向开发对象开发过程中对每一个实例添加方法&#xff0c;会使每一个对象都存在该添加方法造成空间浪费 通过对原型添加公共的属性或方法&#xff0c;使所有实例对象都可访问 原型为了共享公共的成员 prototype 原型: JS为每个构造函数提供一个属性prototype(原型),它的值…

黑马点评笔记 分布式锁

文章目录 分布式锁基本原理和实现方式对比Redis分布式锁的实现核心思路实现分布式锁版本一Redis分布式锁误删情况说明解决Redis分布式锁误删问题分布式锁的原子性问题分布式锁-Redission分布式锁-redission可重入锁原理分布式锁-redission锁重试和WatchDog机制分布式锁-redissi…

oled的使用 动态的变量 51

源码均在IIC手写程序中 外部中断实现变量加一 #include "reg52.h" #include "main.h" #include <intrins.h> #include "OLED.h" #include "bmp.h" #include "Delay.h" sbit LED1 P1^0; sbit LED2 P1^1; sbit LED3…