当前位置: 首页 > news >正文

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

相关文章:

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

目录 一.一般传送指令&#xff0c;即mov指令 1.16位传送&#xff08;仅1条&#xff09; 2.8位传送 &#xff08;1&#xff09;目的字节为A&#xff08;累加器&#xff09; &#xff08;2&#xff09;目的字节为Rn(工作寄存器) &#xff08;3&#xff09;目的字节为direct…...

【Golang】使用泛型对数组进行去重

背景&#xff1a; 要求写一个方法&#xff0c;返回去重后的数组。数组的类型可能是int64&#xff0c;也可能是string&#xff0c;或是其他类型。 如果区分类型的话&#xff0c;每增加一个新的类型都需要重新写一个方法。 示例代码&#xff1a; //对int64数组进行去重 func DeD…...

Ps:画笔工具的基本操作

画笔工具 Brush Tool是 Ps 中最常用的工具&#xff0c;广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行&#xff0c;但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Ps 中许多…...

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验&#xff09; 一、 环境信息1.1 硬件信息1.2 软件信息 二、 流程介绍三、 前提概要3.1 安装部署3.2 JAR包准备3.2.1 数据源3.2.2 目标源 3.3 脚本模版 四、快速体验五、常见问题5.1 Mysql通信异常5.2 MySQL无Key同步异常5…...

35.逻辑运算符

目录 一.什么是逻辑运算符 二.C语言中的逻辑运算符 三.逻辑表达式 三.视频教程 一.什么是逻辑运算符 同时对俩个或者俩个以上的表达式进行判断的运算符叫做逻辑运算符。 举例&#xff1a;比如去网吧上网&#xff0c;只有年满十八周岁并且带身份证才可以上网。在C语言中如果…...

ASP.NET Core 启用CORS

浏览器的安全阻止一个域的本地页面请求另外不同域的本地页面&#xff0c;这个限制叫同源策略&#xff0c;这个安全特性用来阻止恶意站点从别的网站读取数据 例如假如我有一个页面叫A.html https://foo.example/A.html 现在页面A.html有一个ajax代码尝试读取B.html的HTML的源…...

io.lettuce.core.RedisCommandExecutionException

io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…...

vue3 导出数据为 excel 文件

文章目录 安装插件封装组件 -- Export2Excel.js多表封装界面使用 -- 数据处理成二维数组更多 菜鸟最近做了一个需求&#xff0c;就是需要上传表单并识别&#xff0c;然后识别出来的内容要可以修改&#xff0c;然后想的就是识别内容变成 form 表单&#xff0c;所以并没有使用 Sp…...

PyQt6简介

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…...

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

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

软件工程第十二周

软件作坊、软件危机、软件过程控制、重型控制、敏捷、DevOps 这些术语概括了软件开发历史和实践中的几个重要概念和阶段。让我们逐一解析它们&#xff1a; 软件作坊&#xff08;Software Craftsmanship&#xff09;&#xff1a;这是软件开发的早期模式&#xff0c;强调个人技能…...

electron 问题记录

23年11月24 electron项目npm install 卡在一个地方不动 原因&#xff1a;主要是 install electron 会卡住 解决方法&#xff1a; # 先解决install electron卡死 npm install -g cnpm --registryhttps://registry.npmmirror.com cnpm install electron# 然后下载其他依赖 np…...

nodejs+vue+python+PHP+微信小程序-留学信息查询系统的设计与实现-安卓-计算机毕业设计

1、用户模块&#xff1a; 1&#xff09;登录&#xff1a;用户注册登录账号。 2&#xff09;留学查询模块&#xff1a;查询学校的入学申请条件、申请日期、政策变动等。 3&#xff09;院校排名&#xff1a;查询国外各院校的实力排名。 4&#xff09;测试功能&#xff1a;通过入学…...

JWT和Token之间的区别

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…...

UserRole

Qt::UserRole 是 Qt::ItemDataRole 枚举中的一个成员&#xff0c;用于表示自定义数据角色&#xff08;Data Role&#xff09;的起始值。 在 Qt 中&#xff0c;Qt::ItemDataRole 枚举用于标识项&#xff08;Item&#xff09;中不同类型的数据。这些数据角色包括 Qt::DisplayRol…...

java学习part10 this

90-面向对象(进阶)-关键字this调用属性、方法、构造器_哔哩哔哩_bilibili 1.java的this java的this性质类似cpp的this&#xff0c; 但它是一种引用&#xff0c;所以用 this. xxx来调用。 this代表当前的类的实例&#xff0c;所以必须和某个对象结合起来使用&#xff0c;不能…...

Spring Cloud + Nacos 项目启动失败【No spring.config.import property has been defined】

在 Spring Cloud 项目使用 bootstrap.yaml 配置文件&#xff0c;添加 nacos 等相关参数配置&#xff0c;启动服务抛入如下异常&#xff1a; org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set ... …...

CANopen协议【SDO】

SDO&#xff1a; SDO是读写单个寄存器。主要用于配置伺服驱动器参数。 1 收发功能&#xff1a; //public unsafe struct VCI_CAN_OBJ //CAN数据帧 【单帧对象】//{// public uint ID;// 帧ID。 【11bit】数据右对齐。 详情请参照&#xff1a; 《8.附件1&#xff1…...

9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数

1 什么是迭代器&#xff0c;生成器&#xff0c;装饰器 2 django的信号用过吗&#xff1f;如何用&#xff0c;干过什么 3 什么是深拷贝&#xff0c;什么是浅拷贝&#xff0c;如何使用 3.1 浅拷贝 3.2 深拷贝 3.3 扩展(slice操作符和list构造函数) 1 什么是迭代器&#xff0c;生成…...

RabbitMQ之发送者(生产者)可靠性

文章目录 前言一、生产者重试机制二、生产者确认机制实现生产者确认&#xff08;1&#xff09;定义ReturnCallback&#xff08;2&#xff09;定义ConfirmCallback 总结 前言 生产者重试机制、生产者确认机制。 一、生产者重试机制 问题&#xff1a;生产者发送消息时&#xff0…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...