ARM中多寄存内存访问概念和栈的种类和应用

多寄存器内存访问指令

  • @ 多寄存器内存访问指令
    @ 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}

栈的种类和应用

  • 栈的概念
    栈的本质就是一段内存,程序运行时用于保存一些临时数据
    如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器
  • 栈的分类
    在这里插入图片描述
  • 空栈和满栈
    根据SP位置来区分,如果空栈的话,先压栈在移动指针,反之如果满栈的话,先移动指针,在压栈
  • 栈的分类
    栈分为空增、空减、满增、满减四种,ARM处理器一般使用满减栈(和之前的STMDB类似,减是往地址小的方向压栈)
  • 代码指令如下:
    @ 栈的种类与使用
    MOV R1,#1
    MOV R2,#2
    MOV R3,#3
    MOV R4,#4
    MOV R11,#0x40000020
    STMDB R11!,{R1-R4}
    LDMIA R11!,{R6-R9}
  • ARM内部一般用字母来表示满增、满减等等
    空增(EA)、空减(ED)、满增(FA)、满减(FD)
  • 汇编代码如下:
    MOV R1,#1
    MOV R2,#2
    MOV R3,#3
    MOV R4,#4
    MOV R11,#0x40000020
    STMFD R11!,{R1-R4}
    LDMFD R11!,{R6-R9}
  • 叶子函数的调用过程举例
    @ 初始化栈指针
    @ MOV SP,#0x40000020
    @MAIN:
    @ MOV R1,#10
    @ MOV R2,#5
    @ BL FUNC
    @ LDMFD SP!,{R1,R2}
    @ ADD R3,R1,R2
    @ B STOP
    @FUNC:
    @压栈保护现场
    @ STMFD SP!,{R1,R2}
    @ MOV R1,#10
    @ MOV R2,#20
    @ SUB R1,R2,R1
    @ MOV PC,LR
  • 非叶子函数的调用过程举例
    @ 初始化栈指针
    MOV SP,#0x40000020
    MAIN:
    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 R1,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

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

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

相关文章

Tensorflow2.0+部署(tensorflow/serving)过程备忘记录Windows+Linux

Tensorflow2.0部署(tensorflow/serving)过程备忘记录 部署思路:采用Tensorflow自带的serving进模型部署,采用容器docker 1.首先安装docker 下载地址(下载windows版本):https://desktop.docke…

基于springboot+vue实现早餐店点餐系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现早餐店点餐系统演示 摘要 多姿多彩的世界带来了美好的生活,行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面,信息技术至始至终都是成就行业发展的重要秘密。不论何种行业,大到国家、企业&#xff0…

文件操作上(c语言)

目录 1. 文件的作用2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名 3. 二进制文件和文本文件4. 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开与关闭4.3.1 文件的打开模式4.3.2 实例代码 1. 文件的作用 使用文件可以将数据进行持久化的保…

openssl调试记录

openssl不能直接解密16进制密文,需要把密文转化成base64格式才能解密 调试记录如下:

Qt 中Json文件的操作

Json文件的读取 QFile file("data.json"); //准备好的文件file.open(QIODevice::ReadOnly|QIODevice::Text);QByteArray arr file.readAll();QJsonDocument jsonDoc QJsonDocument::fromJson(arr);QJsonObject jsonObj jsonDoc.object();qint32 id jsonObj["…

Dubbo-记录

1.概念 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理…

Qt QListwidget与QStackedWidget或QTableWidget实现多界面切换的效果

文章目录 效果图使用QStackedWidget实现使用QTableWidget实现总结 效果图 使用QStackedWidget实现 QStackedWidget提供了一种堆栈式的界面布局方式。功能:QStackedWidget允许开发者在一个固定区域内显示多个子窗口或页面,但同时只显示其中一个子窗口&am…

windows下安装python3.8

一、从官网下载安装包 官网地址:https://www.python.org/downloads/ 华为云地址:https://mirrors.huaweicloud.com/python/ 第三方镜像:https://registry.npmmirror.com/binary.html?pathpython/ 注意:从python3.8.10版本开始…

PostgreSQL索引篇 | Hash索引

Hash索引 PostgreSQL版本为8.4.1 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) 在实际的数据库系统中,除了B-Tree外,还有多种数据结构可做索引,Hash表就是其中的一种。通过…

HTML_CSS_盒子模型

盒子模型组成 内容区域&#xff08;comtent&#xff09;内边距区域&#xff08;padding&#xff09;边框区域&#xff08;border&#xff09;外边距区域&#xff08;margin&#xff09; 布局标签 标签&#xff1a;<div> </div> 和 <span> …

Leetcode笔记——二叉树的迭代遍历

中序遍历&#xff1a; 定义一个 保存中间量的栈 和一个 结果数组 1. 模板写法 注释版&#xff1a; 背诵版&#xff1a; 前序遍历 1. 中 右 左 的顺序遍历 2. 模板写法&#xff0c;按中 左 右 的顺序遍历 后序遍历 1. 模板写法&#xff0c;按左 右 中 的顺序遍历 注释版&am…

FreeRTOS操作系统学习——同步互斥与通信

同步&#xff08;Synchronization&#xff09; 同步是一种机制&#xff0c;用于确保多个任务能够按照特定的顺序协调执行或共享数据。当一个任务需要等待其他任务完成某个操作或满足某个条件时&#xff0c;同步机制可以帮助任务进行协调和等待。 在FreeRTOS中&#xff0c;常见…

Spring官网中查看MongoDB的API文档的详细步骤

目录 Spring官网中查看MongoDB的API文档的详细步骤1、进入 Spring 官网2、选择 Mongodb的文档介绍3、点击API文档4、进入文档查询页面 Spring官网中查看MongoDB的API文档的详细步骤 1、进入 Spring 官网 首先进入Spring的官网&#xff0c;然后点击【Spring Data】 2、选择 Mon…

Java二叉树 (2)

&#x1f435;本篇文章将对二叉树的一些基础操作进行梳理和讲解 一、操作简述 int size(Node root); // 获取树中节点的个数int getLeafNodeCount(Node root); // 获取叶子节点的个数int getKLevelNodeCount(Node root,int k); // 获取第K层节点的个数int getHeight(Node r…

P1958 上学路线

难度&#xff1a;普及- 题目描述 你所在城市的街道好像一个棋盘&#xff0c;有 a 条南北方向的街道和 b 条东西方向的街道。南北方向的 a 条街道从西到东依次编号为 1 到 a&#xff0c;而东西方向的 b 条街道从南到北依次编号为 1 到 b&#xff0c;南北方向的街道 i 和东西方…

单数码管(arduino)

1.连接方法 挨个点亮每个灯 #include <Arduino.h>int pin_list[] {4, 5, 19, 21, 22, 2, 15, 18}; int num_pins sizeof(pin_list) / sizeof(pin_list[0]); // 计算数组中的元素数量void setup() {// 设置每个引脚为输出for(int i 0; i < num_pins; i) {pinMode(p…

C语言:ctype和string库中的部分常用函数的应用和实现

在编程过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;C语言标准库中就提供了一系列的库函数&#xff0c;便于我们操作库函数。 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含…

Springboot 集成kafka 消费者实现ssl方式连接监听消息实现消费

证书准备&#xff1a;springboot集成kafka 消费者实现 如何配置是ssl方式连接的时候需要进行证书的转换。原始的证书是pem, 或者csr方式 和key方式的时候需要转换&#xff0c;因为kafka里面是jks 需要通过openssl进行转换。 证书处理&#xff1a; KeyStore 用于存储客户端的证…

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测 目录 分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测分类效果基…

【Python】进阶学习:OpenCV--一文详解cv2.namedWindow()

【Python】进阶学习&#xff1a;OpenCV–一文详解cv2.namedWindow() &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…