汇编:循环程序设计

一、 实验要求

  1. 熟练掌握循环程序设计的基本方法
  2. 熟练掌握单片机外部存储空间的访问方法

二、 实验设计

 1.整体思路

先初始化一些寄存器和数据存储位置,然后调用两个子程序Procedure1和Procedure2,分别从SRC复制数据到DEST,一个从开头到末尾,另一个从末尾到开头。每个子程序在复制数据时使用循环,直到达到指定的复制次数(由NUM控制)。程序最后通过END标志结束。

2.流程图

3.主要模块设计思路及分析

(1)Procedure1子程序

  • Procedure1 负责向起始地址为SRC的片内存储中,顺序写入NUM个单字节数(数值不限),并以$字符(ASCII码)结尾。。
  • R0 用于计数,R1 存储 SRC 的地址。
  • 使用循环,CJNE 指令检查 R0 是否等于 NUM,如果等于,就跳到 ENGING1,否则继续执行。
  • 在循环中,从 SRC 读取数据到寄存器 A,然后使用 MOVX 指令将 A 的值写入到 DPTR 所指向的位置。然后增加计数器 R0 和地址 R1。
  • 再次使用 CJNE 指令检查 A 的值是否等于 '$',如果不等于,就回到 Write,否则跳到 ENGING1。

(2)Procedure2子程序

  • Procedure2 负责2.从SRC中,向起始地址为DEST的片外存储中,逆序拷贝之前存储的NUM个单字节数,并以$字符结尾。R0 用于计数,R1 存储 SRC 的地址。
  • 同样使用循环,CJNE 指令检查 R0 是否等于 NUM,如果等于,就跳到 ENGING2,否则继续执行。
  • 在循环中,从 SRC 读取数据到寄存器 A,然后使用 MOVX 指令将 A 的值写入到 DPTR 所指向的位置。然后增加计数器 R0,但是减小地址 R1 以实现逆序复制。
  • 再次使用 CJNE 指令检查 A 的值是否等于 '$',如果不等于,就回到 Copy,否则跳到 ENGING2。

              

三、 实现效果

四、总结

  1. 在一开始设计程序的时候,我以为给出的代码已经储存了SRC与DEST的地址位置,不需要在额外用寄存器再储存。事实证明,这是个很天真的想法,于是我使用R1与DPTR进行储存了。
  2. 在写入数据的时候,原先我想直接将R1,也就是记录num的寄存器直接与$比较,后面发现程序不允许。于是增加了中间商DPTR进行操作。
  3. 通过这次实验更加加深了对循环程序设计的认识,也懂了一些单片机外部储存空间的访问方法。

附录:

ORG 	0000HLJMP 	MAINORG 	2000H
MAIN:	SRC		DATA 	30HDEST   	XDATA 	2000HNUM	    DATA	20HACALL Procedure1ACALL Procedure2SJMP $Procedure1:			 ; 将数据从 SRC 复制到 DESTMOV R0, #0       ; R0 用于计数MOV R1, #SRC     ; R1 存储 SRC 的地址
MOV DPTR,#DEST   ; 保存DEST起始地址Procedure1_LOOP:CJNE R0, #NUM, Write   ; 检查R0是否等于NUM,如果不等于,则跳转到 Write SJMP ENGING1Write:MOV A, @R1       ; 从 SRC 读取数据到 A 寄存器MOVX @DPTR, A    ; 将 A 寄存器的值写入到 DPTR 所指向的位置INC R0           ; 增加计数器 R0INC R1           ; 增加指向下一个字节的地址CJNE A, '$', Write	   ; 查A的值是否等于'$',如果不等于,则跳转回 WriteSJMP ENGING1ENGING1:RET				 ; 从子程序返回Procedure2:			 ; 从 SRC 中,向起始地址为 DEST 的片外存储中,逆序拷贝之前存储的 NUM 个单字节数MOV R0, #0       ; R0 用于计数MOV R1, #SRC     ; R1 存储 SRC 的地址Procedure2_LOOP:	 CJNE R0, #NUM, copy	   ; 从SRC的末尾开始向 DEST 的末尾复制数据SJMP ENGING2Copy:MOV A, @R1       ; 从 SRC 读取数据到 A 寄存器MOVX @DPTR, A    ; 将 A 寄存器的值写入到 DPTR 所指向的位置INC R0           ; 增加计数器 R0DEC R1           ; 减小指向上一个字节的地址CJNE A, '$', Copy	   ; 检查A的值是否等于'$',如果不等于,则跳转回CopySJMP ENGING2ENGING2:RETEND

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

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

相关文章

典籍知识问答模块AI问答bug修改

一、修改流式数据处理问题 1.问题描述&#xff1a;由于传来的数据形式如下&#xff1a; event:START data:350 data:< data:t data:h data:i data:n data:k data:> data: data: data: data: data:嗯 data:&#xff0c; 导致需要修改获取正常的当前信息id并更…

【金仓数据库征文】- 金融HTAP实战:KingbaseES实时风控与毫秒级分析一体化架构

文章目录 引言&#xff1a;金融数字化转型的HTAP引擎革命一、HTAP架构设计与资源隔离策略1.1 混合负载物理隔离架构1.1.1 行列存储分区策略1.1.2 四级资源隔离机制 二、实时流处理与增量同步优化2.1 分钟级新鲜度保障2.1.1 WAL日志增量同步2.1.2 流计算优化 2.2 物化视图实时刷…

季报中的FPGA行业:U型反转,春江水暖

上周Lattice,AMD两大厂商相继发布2025 Q1季报,尽管恢复速度各异,但同时传递出FPGA行业整体回暖的复苏信号。 5月5日,Lattice交出了“勉强及格”的答卷,报告季度营收1亿2000万,与华尔街的预期基本相符。 对于这家聚焦在中小规模器件的领先厂商而言,按照其CEO的预期,长…

使用 javap 深入理解 Java 字节码

引言 Java 是一种广泛使用的高级编程语言,其独特之处在于编译后的代码不是直接的机器码,而是一种称为字节码的中间表示形式。字节码存储在 .class 文件中,由 Java 虚拟机 (JVM) 解释或即时编译为特定平台的机器码。这种设计赋予了 Java 平台无关性,即“一次编写,到处运行…

LeetCode_sql刷题(3482.分析组织层级)

题目描述&#xff1a;3482. 分析组织层级 - 力扣&#xff08;LeetCode&#xff09; 表&#xff1a;Employees ------------------------- | Column Name | Type | ------------------------- | employee_id | int | | employee_name | varchar | | manager_id …

工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望

一、引言 1.1 研究背景与意义 在工业 4.0 的大背景下&#xff0c;工业生产的智能化、自动化水平不断提高&#xff0c;对工业场景的巡检工作提出了更高的要求。传统的人工巡检方式不仅效率低下、成本高昂&#xff0c;而且容易受到人为因素的影响&#xff0c;难以满足现代工业生…

《棒球万事通》球类运动有哪些项目·棒球1号位

以棒球运动为例&#xff0c;棒球运动涉及多个核心项目和比赛形式&#xff0c;以下为主要分类&#xff1a; 一、比赛环节 投球&#xff08;Pitching&#xff09; 防守方投手向击球员投球&#xff0c;目标是让对方难以击中或制造出局。 击球&#xff08;Batting&#xff09; …

第五项修炼:打造学习型组织

最近一直接到的需求&#xff0c;都是公司董事长或总经理都特别推崇《第五项修炼&#xff1a;打造学习型组织》的内容&#xff0c;让各个层级的管理者都持续学习、应用、实践。我不禁开始反思&#xff0c;这背后到底隐藏着什么原因&#xff1f; 随着商业环境的变化和复杂性的增加…

国内AWS CloudFront与S3私有桶集成指南:安全访问静态内容

在现代web应用架构中,将静态内容存储在Amazon S3中并通过CloudFront分发是一种常见且高效的做法。本指南将详细介绍如何创建私有S3桶,配置CloudFront分配,并使用Origin Access Identity (OAI)来确保安全访问。 步骤1:创建S3桶 首先,我们需要创建一个名为"b-static&…

BUUCTF——Nmap

BUUCTF——Nmap 进入靶场 类似于一个nmap的网站 尝试一下功能 没什么用 看看数据包 既然跟IP相关 伪造一个XXF看看 拼接了一下没什么用 果然没这么简单 尝试一下命令注入 构造payload 127.0.0.1 | ls 应该有过滤 加了个\ 直接构造个php木马上传试试 127.0.0.1 | <?…

NPN、PNP三极管的应用

由于电路知识实在是难以拿出手&#xff0c;在面试的时候被问到三极管相关问题&#xff0c;相当地尴尬。在网上简要地学习了相关的理论知识&#xff0c;在这里给出自己的理解。更为基础的原理在这里并不提及。我们面向实际应用学习即可。 我们知道常见的三极管总是硅管&#xff…

系统架构设计师案例分析题——软件架构设计篇

重中之重&#xff0c;本题争取拿下25满分~ 目录 一.核心知识 1.什么是架构风格 2.RUP的9个核心工作流 3.企业应用集成方式 4.软件质量属性 5.SySML系统建模语言9种图 6.云计算架构 7.中间件 8.构件、连接件、软件重用 9.层次型架构的缺点 10.架构开发方法ADM 11.微…

可变参数(Variadic Functions)- 《Go语言实战指南》

Go 语言允许函数接受不定数量的参数&#xff0c;也称“可变参数”。这为构建灵活的函数提供了便利&#xff0c;常用于求和、拼接等操作。 一、语法格式 func 函数名(参数名 ...类型) 返回值类型 {// 函数体 } 可变参数本质上是一个切片&#xff08;slice&#xff09;&#xf…

手机换IP真的有用吗?可以干什么?

在当今数字化时代&#xff0c;网络安全和个人隐私保护日益受到重视。手机作为我们日常生活中不可或缺的工具&#xff0c;其网络活动痕迹往往通过IP地址被记录和追踪。那么&#xff0c;手机换IP真的有用吗&#xff1f;它能为我们带来哪些实际好处&#xff1f;本文将为你一一解答…

Linux517 rsync同步 rsync借xinetd托管 配置yum源回顾

计划测试下定时服务 同步成功 是否为本地YUM源内容太少&#xff1f;考虑网络YUM源 单词拼错了 计划后面再看下 MX安装 参考 计划回顾配置YUM源 配置本地YUM源配置外网YUM源配置仓库YUM源&#xff08;不熟&#xff09; 参考 参考阿里云 配置完毕 本地yum源配置 先备份 再…

第三部分:内容安全(第十六章:网络型攻击防范技术、第十七章:反病毒、第十八章:入侵检测/防御系统(IDS/IPS))

文章目录 第三部分&#xff1a;内容安全第十六章&#xff1a;网络型攻击防范技术网络攻击介绍流量型攻击 --- Flood攻击单包攻击及防御原理扫描窥探攻击畸形报文攻击Smurf攻击Land攻击Fraggle攻击IP欺骗攻击 流量型攻击防御原理DDoS通用攻击防范技术 ---- 首包丢弃TCP类攻击SYN…

c++成员函数返回类对象引用和直接返回类对象的区别

c成员函数返回类对象引用和直接返回类对象的区别 成员函数直接返回类对象&#xff08;返回临时对象&#xff0c;对象拷贝&#xff09; #include <iostream> class MyInt { public:int value;//构造函数explicit MyInt(int v0) : value(v){}//加法操作,返回对象副本&…

阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统

在电商行业数据驱动决策的趋势下&#xff0c;高效获取商品详情数据成为企业洞察市场、优化运营的关键。通过阿里巴巴 1688 数据接口构建自动化商品详情采集系统&#xff0c;能够快速、精准地采集海量商品信息。本文将从开发准备、接口分析、代码实现等方面&#xff0c;详细介绍…

c语言 socket函数

c语言 socket函数 在 C 语言中,socket 函数是网络编程的核心函数之一,用于创建一个网络套接字(socket),它是网络通信的端点。以下是关于 socket 函数的详细介绍: 函数原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);参数说明 domai…

Linux进程通讯和原子性

在Linux系统中&#xff0c;进程间通信&#xff08;IPC&#xff09;和原子性是并发编程中的核心问题。以下是对这些概念的详细分步解释&#xff1a; 一、进程间通信&#xff08;IPC&#xff09;方法 1. 管道&#xff08;Pipe&#xff09; 匿名管道&#xff1a;用于父子进程等有…