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 0
    end ;程序结束,对应entry

2.定义代码段

 ;定义代码段,数据类型为code(表示为代码段),权限为只读
    area codesegment,code,readonly
    entry ;程序入口
start
    ldr r0,=data1 ;将data1的地址加载到r0中
    ldr r1,=sum1 ;将sum1的地址加载到r1中
    bl sum
    nop
    ldr r0,=data2
    ldr r1,=sum2
    bl sum ;调用子程序
endpoint b .

sum
    mov r2,r0 ;r2对应data
    mov r3,r1 ;r3对应sum
loop
    ldr r4,[r2],#4 ;将r2地址对应的值放到r4,r2向后移动4字节
    cmp r4,#0
    beq exit  ;判断r4是否是data的结尾,是就进入exit
    add r5,r5,r4 ;r5=r5+r4
    b loop
exit
    str r5,[r3] ;将r5的值存储到r3地址对应的值上面
    mov r5,#0 ;将r5置为0
    mov 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, readonly
    entry
start
    ldr r0, =res                 
    ldr r1, =dest                
    ldr r4, =order               
    mov r5, #0  ;计数器
    mov r6, #0  ;用于记录res的长度
    bl findstr
endpoint b .                 

findstr
    add 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                     ; 继续搜索

found
    sub r6,r6,#1
    sub r5,r5,r6                  ; r5-r6就是字符串的开始位置
    str r5, [r4]                  ; 将找到的位置存储到 order 单元
exit
    bx 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中就可以了。

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

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

相关文章

蓝桥杯刷题——day5

蓝桥杯刷题——day5 题目一题干解题思路一代码解题思路二代码 题目二题干解题思路代码 题目一 题干 给定n个整数 a1,a2,⋯ ,an,求它们两两相乘再相加的和,即: 示例一: 输入: 4 1 3 6 9 输出: 117 题目链…

1_linux系统网络性能如何优化——几种开源网络协议栈比较

之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然…

opencv——识别图片颜色并绘制轮廓

图像边缘检测 本实验要用到Canny算法,Canny边缘检测方法常被誉为边缘检测的最优方法。 首先,Canny算法的输入端应为图像的二值化结果,接收到二值化图像后,需要按照如下步骤进行: 高斯滤波。计算图像的梯度和方向。非极…

Edge SCDN深度解析,边缘安全加速的创新实践

边缘安全加速(Edge Secure Content Delivery Network,SCDN)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为…

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,主要解决这类问题。 1. 单体架构 特点: 所有资源(应用程序、数据库、文件)集中在一台服务器上。适用场景: 小型网站&am…

Golang囊地鼠gopher

开发知识点-golang 介绍红队专题-Golang工具Fscan简介主要功能ubuntu 安装windows 安装常用命令:项目框架源文件common目录Plugins目录Webscan目录入口点插件扫描类型爆破插件common.ScantypeWebtitle函数webpoc扫描POC 执行CEL-GO 实践CEL指纹识别免杀源码特征参考链接红队专…

多分类交叉熵与稀疏分类交叉熵

总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…

360极速浏览器不支持看PDF

360安全浏览器采用的是基于IE内核和Chrome内核的双核浏览器。360极速浏览器是源自Chromium开源项目的浏览器,不但完美融合了IE内核引擎,而且实现了双核引擎的无缝切换。因此在速度上,360极速浏览器的极速体验感更佳。 展示自己的时候要在有优…

零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…

麒麟信安推出支持信创PC的新一代云桌面方案,助力政务信创高效安全运维

12月11日,在第二届国家新一代自主安全计算系统产业集群融通生态大会上,麒麟信安发布了支持信创PC的新一代云桌面方案,该方案是基于国际TCI架构实现国产PC机云化纳管在国内的首次发布,并与银河麒麟桌面操作系统、长城国产PC整机实现…

vim优化

1.编辑如下内容&#xff1a; cat > /root/.vimrc <<EOF set tabstop2 " 设置 Tab 为 2 个空格 set shiftwidth2 " 设置自动缩进为 2 个空格 set expandtab " 将 Tab 转换为空格 " 基本设置 set number syntax on" 快捷键设置…

hive—常用的日期函数

目录 1、current_date 当前日期 2、now() 或 current_timestamp() 当前时间 3、datediff(endDate, startDate) 计算日期相差天数 4、months_between(endDate, startDate) 日期相差月数 5、date_add(startDate, numDays) 日期加N天 6、date_sub(startDate, numDays) 日期减…

医学分割数据集肾结石分割数据集labelme格式359张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;359 标注数量(json文件个数)&#xff1a;359 标注类别数&#xff1a;1 标注类别名称:["kidney stone"] 每个类别标注的框数&…

Vulnstack红日安全内网域渗透靶场2实战攻略

一&#xff1a;环境搭建 新增的网卡VMnet2&#xff0c;ip调成10段。 PC配置如下&#xff1a; DC在该环境中充当是域控。DC配置如下 &#xff1a; WEB配置&#xff1a;需要两块网卡&#xff0c;相当于网关服务器。 作者把外网网段都写成了192.168.111.1/24&#xff0c;我们可以…

基础库urllib的使用

学习爬虫&#xff0c;其基本的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢?请求需要我们自己构造吗?我们需要关心请求这个数据结构怎么实现吗?需要了解 HTTP、TCP、IP层的网络传输通信吗?需要知道服务器如何响应以及响应的原理吗? 可能…

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示&#xff1a;系统弹出提示框&#xff0c;告知用户有新版本的 Ubuntu 可用&#xff0c;询问用户是否想要升级。 认证窗口&#xff1a;显示了一个认证…

【环境搭建】Python、PyTorch与cuda的版本对应表

一个愿意伫立在巨人肩膀上的农民...... 在深度学习的世界里&#xff0c;选择合适的工具版本是项目成功的关键。CUDA、PyTorch和Python作为深度学习的三大支柱&#xff0c;它们的版本匹配问题不容忽视。错误的版本组合可能导致兼容性问题、性能下降甚至项目失败。因此&#xff0…

SpringBoot 学习

SpringBoot 学习 什么是 Springboot Spring Boot 是 Spring 提供的一个子项目&#xff0c;用于快速构建 Spring 应用程序 传统的问题&#xff1a; 导入依赖繁琐项目配置繁琐 SpringBoot 的特性 起步依赖&#xff1a;整合所有 web 的依赖配置好了自动配置&#xff1a;bean…

计算机网络-传输层 TCP协议(下)

目录 TCP核心机制五&#xff1a;流量控制 TCP核心机制六&#xff1a;拥塞控制 TCP核心机制七&#xff1a;延迟应答 TCP核心机制八&#xff1a;捎带应答 TCP核心机制九&#xff1a;面向字节流 粘包问题 TCP核心机制十&#xff1a;异常处理 &#xff08;1&#xff09;进程…

【游戏设计原理】10 - 科斯特的游戏理论

科斯特的游戏理论强调了游戏与学习之间的关系&#xff0c;认为“玩得开心”与“学习”是紧密相连的。换句话说&#xff0c;游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环&#xff0c;这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…