ARM循环程序和子程序设计
1、计算下列两组数据的累加和并存入到sum1和 sum2 单元中。datal:0x12,0x935,0x17,0x100,0x95,0x345。
data2:0x357,0x778,0x129,0x188,0x190,0x155,0x167。
1.定义数据段
;定义数据段,类型为data(表示为数据段),权限为可读可写(程序可以读取和修改这里的数据)area datasegment,data,readwrite
data1 dcd 0x12, 0x935, 0x17, 0x100, 0x95, 0x345,0x0
data2 dcd 0x357, 0x778, 0x129, 0x188, 0x190, 0x155, 0x167,0x0
sum1 dcd 0
sum2 dcd 0end ;程序结束,对应entry
2.定义代码段
;定义代码段,数据类型为code(表示为代码段),权限为只读area codesegment,code,readonlyentry ;程序入口
startldr r0,=data1 ;将data1的地址加载到r0中ldr r1,=sum1 ;将sum1的地址加载到r1中bl sumnopldr r0,=data2ldr r1,=sum2bl sum ;调用子程序
endpoint b .summov r2,r0 ;r2对应datamov r3,r1 ;r3对应sum
loopldr r4,[r2],#4 ;将r2地址对应的值放到r4,r2向后移动4字节cmp r4,#0beq exit ;判断r4是否是data的结尾,是就进入exitadd r5,r5,r4 ;r5=r5+r4b loop
exitstr r5,[r3] ;将r5的值存储到r3地址对应的值上面mov r5,#0 ;将r5置为0mov pc,lr ;回到调用子程序的地方
3.调试程序
将data1的首地址存放到r0中,也就是0x8058,在Memory窗口中输入0x8050,然后找到第8个字节就可以看到存放了12,间隔4个字节存放0x935,而且是小端序存放,高位9在高地址d,地位35在低地址c。

在exit段设置断点,然后执行到此处,查看r5的值为0xE38,也就是data1数据的和。

将r5的值存储到r1地址对应的空间上面,跳出循环,r1的地址为0x8094,在Memory视图查看0x8090的第4个字节可以找到38,第5个字节找到0E,刚好就是data1的和0xE38,存储方式为小端序。

再次调用子程序计算data2的和,得到0x11CC。

由于sum1和sum2的地址,所以在Memory视图的0x8090的第8个字节和第9个字节处就是sum2的值,同样是小端序。
2、在字符串中搜索关键词,并返回关键词所在位置存储到order单元中。关键词:String
字符串:“string123456-St-abcd Stringabc.”
1.定义数据段
; 定义数据段area datasegment, data, readwrite
res dcb "String", 0 ;S的十六进制码是53
dest dcb "string123456-St-abcd Stringabc.", 0 ;s的十六进制码是73
order dcb 0 ; 存放关键词位置的单元
2.定义代码段
; 定义代码段area codesegment, code, readonlyentry
startldr r0, =res ldr r1, =dest ldr r4, =order mov r5, #0 ;计数器mov r6, #0 ;用于记录res的长度bl findstr
endpoint b . findstradd r5, r5, #1 ; 增加位置计数器ldrb r2, [r1], #1 ; 将r1的字符放到r2,r1移动一个字节cmp r2, #0 ; 检查是否到达字符串结尾beq exit ; 如果到达结尾,退出ldrb r3, [r0],#1 ; 将r0的字符放到r3,r0移动一个字节add r6,r6,#1 ; 增加res的长度cmp r3, #0 ; 检查关键词是否到达结尾beq found ; 如果关键词结束,表示找到了cmp r2, r3 ; 比较两个字符beq findstr ; 如果相等,继续搜索下一个字符; 如果不相等,重置关键词并继续搜索下一个字符ldr r0, =res ; 重置关键词的地址mov r6,#0 ; 重置res的长度b findstr ; 继续搜索foundsub r6,r6,#1sub r5,r5,r6 ; r5-r6就是字符串的开始位置str r5, [r4] ; 将找到的位置存储到 order 单元
exitbx lr ; 返回end
3.调试程序
将res的地址存放到r0中,将dest的地址存放到r1中,通过Memory视图可以查看dest和res字符串对应的16进制码。

设置断点到found处,可以发现r5的值为0x1C也就是28(刚好就是dest中String的末尾),r6的值为0x7,将r6减一变成0x6(String的长度),用r5-r6就可以得到22,也就是dest中String的开始位置。

将结果存放到order,也就是r4中就可以了。

相关文章:
ARM循环程序和子程序设计
1、计算下列两组数据的累加和并存入到sum1和 sum2 单元中。datal:0x12,0x935,0x17,0x100,0x95,0x345。 data2:0x357,0x778,0x129,0x188,0x190,0x155,0x167。 1.定义数据段 ;定义数据段,类型为data(表示为数据段),权限为可读可写(程序可以读取和修改这…...
静态路由、RIP、OSPF、BGP的区别
静态路由:是管理员手动将路由写入到路由器中,配置简单开销小,但不能适应网络变化,只用于小型的网络 RIP,路由信息协议,属于距离矢量路由协议的一种,根据跳数来判断最优路由,如果跳数…...
知识分享第二十八天-数学篇一
组合.二项式定理.常见导数 组合 让我们通过一个具体的例子来理解组合(Combinations)的概念 假设你有一个装有5个不同颜色球的袋子:红、蓝、绿、黄和紫。你想从中随机抽取3个球, 不考虑顺序,那么你可以有多少种不同的…...
BigDecimal在进行除法运算时需要注意四舍五入的位置
我们在进行A除B的时候,需要将四舍五入的逻辑放入除法的过程中就定义,不要等到A/B结果出来了再去进行四舍五入,这样会出现问题。下面举例 10%3 我们拿10除3为例,很明显,结果是一个除不尽的小数3.3333… 直接除 publi…...
第二部分:进阶主题 14 . 性能优化 --[MySQL轻松入门教程]
MySQL性能优化是一个广泛的话题,它涉及到数据库设计、查询语句的编写、索引的使用、服务器配置等多个方面。下面是一些常见的MySQL性能优化策略: 1. 数据库和表结构优化 下面是三个关于MySQL数据库和表结构优化的具体示例: 示例 1: 合理选…...
Mac电脑设置鼠标的滚轮方向
Mac电脑使用鼠标时,上下滚动,方向与Windows相反,如果要保持与Windows一致,则下载MOS这个软件,然后在MOS中进行配置,就可以让鼠标操作方式与Windows一致。 软件下载地址: https://mos.caldis.me…...
【LDAP】LDAP概念和原理介绍
目录 一、前言 二、什么是LDAP? 2.1 什么是目录服务? 2.2 LDAP的介绍 2.3 为什么要使用LDAP 三、LDAP的主要产品线 四、LDAP的基本模型 4.1 目录树概念 4.2 LDAP常用关键字列表 4.3 objectClass介绍 五、JXplorer工具使用 一、前言 对于许多的…...
Android系统(android app和系统架构)
文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下:一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发?并不完全是:Android定义…...
Android HandlerThread、Looper、MessageQueue 源码分析
Android HandlerThread、Looper、MessageQueue 源码分析 简介 在 Android 开发中,大家应该对 HandlerThread 有一定了解。顾名思义,HandlerThread 是 Thread 的一个子类。与普通的 Thread 不同,Thread 通常一次只能执行一个后台任务&#x…...
HTML知识点详解教程
文章目录 HTML知识点详解教程1. HTML基本语法2. HTML标签详解2.1 分区标签 <div>2.2 标题标签 <h1> ~ <h6>2.3 段落标签 <p>2.4 图片标签 <img>2.5 列表标签 <ul> 和 <ol>无序列表 <ul>有序列表 <ol> 2.6 超链接标签 &l…...
[数据结构#1] 并查集 | FindRoot | Union | 优化 | 应用
目录 1. 并查集原理 问题背景 名称与编号映射 数据结构设计 2. 并查集基本操作 (1) 初始化 (2) 查询根节点 (FindRoot) (3) 合并集合 (Union) (4) 集合操作总结 并查集优化 (1) 路径压缩 (2) 按秩合并 3. 并查集的应用 (1) 统计省份数量 (2) 判断等式方程是否成…...
科研绘图系列:R语言绘制网络图和密度分布图(network density plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…...
Linux中输入和输出基本过程
1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同,在f ile 结构体中存在一个 files_operations 结构体指针,对应的结构体保存所有文件操作的函 数指针(这个结构体也被称为…...
使用 acme.sh 签发和自动续期 ssl https 证书
acme.sh 是一个热度非常高的签发和自动续期 https 证书的工具,虽然官网上提供了充分的操作说明,但是不够简洁,本文以在 nginx 中签发和配置http 为例,列出必要的几个简单步骤。 安装 因为网络原因,github 大部分人是…...
spring重点面试题总结
bean的生命周期 在 Spring 中,BeanDefinition、Bean 实例化、依赖注入、Aware 接口的处理、以及 BeanPostProcessor 的前置和后置处理等,都是 Spring 容器管理 Bean 生命周期的关键部分。下面我将详细解释这些过程。 1. 通过 BeanDefinition 获取 Bean…...
新的一章:codegeex
三层结构的优点:可扩展性,可复用性...
游戏引擎学习第50天
仓库: https://gitee.com/mrxiao_com/2d_game Minkowski 这个算法有点懵逼 回顾 基本上,现在我们所处的阶段是,回顾最初的代码,我们正在讨论我们希望在引擎中实现的所有功能。我们正在做的版本是初步的、粗略的版本,涵盖我们认…...
快速理解类的加载过程
当程序主动使用某个类时,如果该类还未加载到内存中,则系统会通过如下三个步骤来对该类进行初始化: 1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个…...
医院跌倒检测识别 使用YOLO,COCO ,VOC格式对4806张原始图片进行标注,可识别病人跌倒,病人的危险行为,病床等场景,预测准确率可达96.7%
医院跌倒检测识别 使用YOLO,COCO ,VOC格式对4806张原始图片进行标注,可识别病人跌倒,病人的危险行为,病床等场景,预测准确率可达96.7% 数据集分割 4806总图像数 训练组70% 3364图片 有效集20&#…...
[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用
Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...
JavaScript自动化PPT生成解决方案:PptxGenJS高效实践指南
JavaScript自动化PPT生成解决方案:PptxGenJS高效实践指南 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 在当今数…...
告别Blob分析:Halcon差异化模型在复杂印刷品检测中的降本增效实践
工业视觉新范式:Halcon差异化模型在精密印刷检测中的实战突破 印刷品质量检测一直是工业视觉领域的硬骨头——那些微米级的墨点缺失、毫厘间的字符偏移,以及生产线上的光影变幻,都在挑战传统算法的极限。当Blob分析遇上多印漏印、位置飘移、…...
3分钟掌握FlicFlac:高效音频格式转换工具完全指南
3分钟掌握FlicFlac:高效音频格式转换工具完全指南 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在数字音频处理领域,格式兼容性…...
2026年管棒材检测系统十强厂商最新深度评测
进入2026年下半年,全球管棒材检测系统行业正式迈入高质量发展攻坚期,行业发展主线聚焦于AI多模态融合与全流程数字化转型,技术迭代呈现“多技术协同、全场景适配”的核心特征。其中,相控阵超声(PAUT)、全聚…...
深度解析XGBoost环境配置:从零构建高性能梯度提升库
深度解析XGBoost环境配置:从零构建高性能梯度提升库 【免费下载链接】xgboost Scalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library, for Python, R, Java, Scala, C and more. Runs on single machine, Hadoop, Spark, Dask, Flink…...
用Rsoft DiffractionMOD给光伏减反膜‘算个命’:手把手教你仿真矩形光栅的反射谱
用Rsoft DiffractionMOD给光伏减反膜‘算个命’:手把手教你仿真矩形光栅的反射谱 在光伏组件研发中,减反射膜的性能直接影响着光电转换效率。传统试错法需要反复镀膜测试,成本高周期长。本文将演示如何通过Rsoft DiffractionMOD模块ÿ…...
终极AMD Ryzen调试工具SMUDebugTool:免费开源的硬件掌控神器
终极AMD Ryzen调试工具SMUDebugTool:免费开源的硬件掌控神器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
OpCore Simplify:告别繁琐配置,轻松构建黑苹果OpenCore EFI的智能工具
OpCore Simplify:告别繁琐配置,轻松构建黑苹果OpenCore EFI的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑…...
ThinkPad双风扇终极控制指南:TPFanControl2完全使用教程
ThinkPad双风扇终极控制指南:TPFanControl2完全使用教程 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否为ThinkPad笔记本的风扇噪音而烦恼ÿ…...
观察Taotoken用量看板如何帮助团队精打细算每一分token
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助团队精打细算每一分token 对于依赖大模型进行开发的团队而言,成本控制与预算规划是日常运…...
