多寄存器内存访问指令与栈

news2024/11/19 2:33:44

目录

一、多寄存器内存访问指令

二、多寄存器内存访问指令的寻址方式

 三、栈的种类与使用

3.1栈的概念

3.2栈的分类

四、栈的应用举例

        4.1叶子函数的调用过程举例

 4.2非叶子函数的调用过程举例


一、多寄存器内存访问指令


        @ MOV R1, #1
        @ MOV R2, #2
        @ MOV R3, #3
        @ MOV R4, #4
        @ MOV R11,#0x40000020
        @ STM R11,{R1-R4}
        @ 将R1-R4寄存器中的数据写入到以R11为起始地址的内存空间中
        @ LDM R11,{R6-R9}
        @ 将以R11为起始地址的内存空间中的数据读取到R6-R9寄存器中


        
        @ 当寄存器编号不连续时,使用逗号分隔
        @ STM R11,{R1,R2,R4}


        @ 不管寄存器列表中的顺序如何,存取时永远是低地址对应小编号的寄存器
        @ STM R11,{R3,R1,R4,R2}


        @ 自动索引照样适用于多寄存器内存访问指令
        @ STM R11!,{R1-R4}
        

 

二、多寄存器内存访问指令的寻址方式


        @ MOV R1, #1
        @ MOV R2, #2
        @ MOV R3, #3
        @ MOV R4, #4
        @ MOV R11,#0x40000020
        @ STMIA R11!,{R1-R4}
        @ 先存储数据,后增长地址
        @ STMIB R11!,{R1-R4}
        @ 先增长地址,后存储数据
        @ STMDA R11!,{R1-R4}
        @ 先存储数据,后递减地址
        @ STMDB R11!,{R1-R4}
        @ 先递减地址,后存储数据
        

 

 
三、栈的种类与使用

3.1栈的概念

    栈的本质就是一段内存,程序运行时用于保存一些临时数据

    如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器等

3.2栈的分类

 

增栈:压栈时栈指针越来越大,出栈时栈指针越来越小

减栈:压栈时栈指针越来越大,出栈时栈指针越来越小

满栈:栈指针指向最后一次压入到栈中的数据,压栈时需要先移动栈指针到相邻位置然后再压栈

空栈:栈指针指向最后一次压入到栈中的数据的相邻位置,压栈时可直接压栈,之后需要将栈指针移动到相邻位置

栈分为空增(EA)、空减(ED)、满增(FA)、满减(FD)四种ARM处理器一般使用满减栈

 由于是满减栈使用STMDB进行压栈使用LDMIA进行出栈

        @ MOV R1, #1
        @ MOV R2, #2
        @ MOV R3, #3
        @ MOV R4, #4
        @ MOV R11,#0x40000020
        @ STMFD R11!,{R1-R4}
        @ LDMFD R11!,{R6-R9}
        

因为是FD可以直接用FD省的算怎么入怎么出,编译器会自动替换

  

四、栈的应用举例


        
4.1叶子函数的调用过程举例


得到了一个不应该的结果,由于主函数和子函数使用相同的寄存器,但用的值不同,在不增加寄存器的前提下让结果正确,就用到了栈。

        
        @ 初始化栈指针
        @ MOV SP, #0x40000020
@ MIAN:
        @ MOV R1, #3
        @ MOV R2, #5
        @ BL  FUNC
        @ ADD R3, R1, R2
        @ B STOP
        
@ FUNC:
        @ 压栈保护现场
        @ STMFD SP!, {R1,R2}
        @ MOV R1, #10
        @ MOV R2, #20
        @ SUB R3, R2, R1
        @ 出栈恢复现场
        @ LDMFD SP!, {R1,R2}
        @ MOV PC, LR
        

 
4.2非叶子函数的调用过程举例

        @ MOV SP, #0x40000020
@ MIAN:
        @ MOV R1, #3
        @ MOV R2, #5
        @ BL  FUNC1
        @ ADD R3, R1, R2
        @ B STOP        
@ FUNC1:
        @ STMFD SP!, {R1,R2,LR}
        @ MOV R1, #10
        @ MOV R2, #20
        @ BL  FUNC2
        @ SUB R3, R2, R1
        @ LDMFD SP!, {R1,R2,LR}
        @ MOV PC, LR
@ FUNC2:
        @ STMFD SP!, {R1,R2}
        @ MOV R1, #7
        @ MOV R2, #8
        @ MUL R3, R1, R2
        @ LDMFD SP!, {R1,R2}
        @ MOV PC, LR
        
        @ 执行叶子函数时不需要对LR压栈保护,执行非叶子函数时需要对LR压栈保护

局部变量是栈中的,栈中数据不会自动清除所以,当分配一个新变量时,栈指针指到哪里变量的初始值就是该地址未清除时留下的值,而全局变量在BSS中,操作系统的初始化时会将这里自动清零,所以全局变量的初值是0.
        

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

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

相关文章

什么是物联网安全?

物联网安全是专注于保护物联网中连接的设备和网络的技术领域。物联网涉及将互联网连接添加到相互关联的计算设备、机械和数字机器、物体、动物或人的系统中。每个“事物”都提供了一个唯一的标识符以及通过网络自动传输数据的能力。如果设备没有得到适当的保护,允许…

寄存器模型的集成

前言:当拿到寄存器模型和总线后,就要实现总线适配器,这就是集成的过程。 接下来需要考虑选择与DUT寄存器接口一致的总线UVC, 该UVC会提供硬件级别的访问方式。 要完成一次硬件级别的总线传输, 往往需要考虑给出地址、 数据队列、 …

网鼎杯2020青龙组——filejava通关思路

目录 1、启动靶场,访问页面 2、BP抓包 (三)代码审计 1.XMLReader 2.SAXBuilder 3.SAXReader 4.SAXParserFactory 5.Digester 6.DocumentBuilderFactory 漏洞利用 0x0…

C++--数据结构--图解B树--B+树--B*树--0718 19

1、常见的搜索结构 种类 数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log_2 N)二叉搜索树无要求O(log_2 N)二叉平衡树无要求O(log_2 N)哈希无要求O(1) 如果数据量很大,比如有100G数据,无法一次放进内存中,那就只能放在磁盘上了…

互联网+时代的到来,让一站式婚庆管理系统成为潮流

自20世纪90年代初中国第一家婚庆公司成立至今,婚庆市场是越做越大。作为新兴产业的婚庆行业蕴藏着巨大的商机,婚庆市场空间日趋扩大,婚庆产业逐渐成为前景看好的朝阳产业。因此,市面上的婚庆企业也越来越多。但是想要在众多同行中…

Codeforces Round #841 (Div. 2) and Divide by Zero 2022 A-D

等System test的时候顺便水一篇吧233&#xff0c;感觉题目挺好的&#xff0c;但是我C、D都快要调完了&#xff0c;还是难受。 应该是我参加的今年最后一场比赛了。 Codeforces Round #841 (Div. 2) and Divide by Zero 2022 A. Joey Takes Money #include<bits/stdc.h&g…

数字射线检测图像质量

对比度 物体对比度 ΔI/I−μΔT/(1n)\Delta I/I -\mu \Delta T /(1n)ΔI/I−μΔT/(1n) 屏幕亮度 LkILkILkI 人眼感觉到的亮度 BKlnLBKln LBKlnL 人眼感觉到的亮度对比度 ΔBKln((LΔL)/L)\Delta B K ln((L\Delta L)/L)ΔBKln((LΔL)/L) 其中&#xff0c;III为射线强度 ΔB…

杭州市 智慧城市物联网支撑平台 功能规范 附下载地址

智慧城市物联网介绍 智慧城市是一个有机结合的大系统&#xff0c;涵盖了更透切的感知、更全面的互连&#xff0c;更深入的智能。物联网是智慧城市中非常重要的元素&#xff0c;它侧重于底层感知信息的采集与传输&#xff0c;城市范围内泛在网方面的建设。 通过智慧城市物联网支…

curl升级到7.87(centos7和TencentOS2.4 tk)

centos7升级curl到7.8.7,按照之前写过的一篇文章,大致按描述操作即可。只不过需要做一点点修正... CentOS 7升级curl_乐大师的博客-CSDN博客_centos7 curl升级 更新操作中会报错安装失败,提示如下: 针对这个问题只需要增加一个参数即可解决。 yum -y update curl --ena…

Linux系统安装Redis(实现远程登录)

目录 &#xff08;一&#xff09;下载和安装 &#xff08;二&#xff09;配置redis.con配置文件 1&#xff0c;开启远程连接有以下三步&#xff1a; 2&#xff0c;配置登录密码 ​&#xff08;三&#xff09;开放端口 1&#xff0c;开放Linux系统上的3306端口 2&#xff0…

记录一次Tomcat靶机渗透

Apache Tomcat&#xff0c;是世界上最广泛使用的Java Web服务器之一。带有默认配置的Tomcat服务器非常容易发现。发现暴露Web应用管理器的服务器也非常容易&#xff0c;它是一个应用&#xff0c;允许管理员启动、停止、添加和删除服务器中的应用。 信息搜集 第一步&#xff1a…

频谱分析误差主要表现在三个方面

频谱分析仪是研究电信号频谱结构的仪器&#xff0c;用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量&#xff0c;可用以测量放大器和滤波器等电路系统的某些参数&#xff0c;是一种多用途的电子测量仪器。它又可称为频域示波器、跟踪示波器、分析示波器…

基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法

普通数码相机记录了红、绿、蓝三种波长的光&#xff0c;多光谱成像技术除了记录这三种波长光之外&#xff0c;还可以记录其他波长&#xff08;例如&#xff1a;近红外、热红外等&#xff09;光的信息。与昂贵、不易获取的高光谱、高空间分辨率卫星数据相比&#xff0c;中等分辨…

【蚂蚁】Alluxio在蚂蚁集团大规模训练中的应用

本期内容我们邀请到了来自蚂蚁集团的开发工程师陈传迎老师&#xff0c;给大家分享Alluxio在蚂蚁集团是如何支持大规模模型训练的。 首先是关于引入Alluxio的背景&#xff1a; 为什么要引入Alluxio&#xff1f;Alluxio到底解决了什么问题&#xff1f; 带着这些问题&#xff0…

USDP使用笔记(八)Flink配置及简单测试

Flink配置Flink配置及简单测试 上一篇&#xff1a;https://lizhiyong.blog.csdn.net/article/details/123560865 将USDP2.0自带的Flink更换为Flink1.14后&#xff0c;还没有来得及改配置。不改配置用起来是有问题的&#xff0c;所以。。。本文主要就是改配置及简单测试效果。 …

基于ssm框架实现的Java web在线考试系统

一、项目简介 本项目是一套基于ssm框架实现的Java web在线考试系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

HITCON2022--ctf驱动逆向题

作者&#xff1a;selph HITCON CTF 2022 Writeup-checker 挺有意思的一道题&#xff0c;这里的关键函数是使用的动态生成执行操作&#xff0c;按照特定参数序列进行解密才能正常执行&#xff0c;否则一定会报错异常 checker 一共给了两个文件&#xff1a;checker.exe和chec…

VR数字政务:多功能一体化,政务服务更便民

越来越多的政务单位都是通过网络等线上信息化渠道&#xff0c;进行政务的推进以及落实、查询等功能的实施&#xff0c;在实际的政务应用中&#xff0c;VR技术可以打造集实景导航、窗口查询、在线申报等多功能为一体&#xff0c;实现数据多跑腿、群众少跑腿&#xff0c;有效提高…

Nginx 01篇——Nginx详细安装步骤以及Nginx各种启动方式

Nginx 01篇——Nginx详细安装步骤以及Nginx各种启动方式1. 前言2. 下载安装2.1 下载安装包2.2 安装2.2.1 离线安装2.2.1.1 安装步骤2.2.1.2 安装问题2.2.2 先安装所需依赖2.2.3 直接 yum 安装2.2.4 指定安装目录安装3. nginx 启动4. 启动后访问5. Nginx 启动等简单命令5.1 启动…

SVN,Git与Helix Core,谁的数据管理基础设施更安全?

2022年2月底&#xff0c;全球知名的半导体芯片公司英伟达被爆遭到勒索软件攻击&#xff0c;不久后&#xff0c;英伟达公司官方证实遭到入侵&#xff0c;攻击者已开始在线泄露员工凭据和私密信息。勒索软件组织表示&#xff0c;如果英伟达拒绝支付高达100万美元的赎金&#xff0…