1、为什么需要多寄存器访问指令?

ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案是stm/ldm

ldm  (load register mutiple)

stm(store register mutiple)

2、举例:stmia sp, {r0 - r12}(注意这里的-号不是减,而是范围)

(1)将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(即指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址······直到r12内容放入(0x3001030),指令完成。即将r0~r12的内容存入以sp为起始地址的内容空间里。

(2)一个访存周期同时完成13个寄存器的读写。

3、8种后缀(相对于入栈来说,比较简单)

先(后)传输的,肯定是空栈(满栈),然后看地址是增还是减

  • ia(increase after)先传输,再地址+4
  • ib(increase before)先地址+4,再传输
  • da(decrease after)先传输,再地址-4
  • db(decrease before)先地址-4,再传输
  • fd(full decrease)满递减堆栈
  • ed(empty decrease)空递减堆栈
  • fa(·······) 满递增堆栈
  • ea(·······)空递增堆栈

4、四种栈

(1)空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出。(因为空所以可以直接存入再移动)

(2)满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针。(因为满所以应该移动后再存入)

(3)增栈:栈指针移动时向地址增加的方向移动的栈。(相对于入栈来说?)

(4)减栈:栈指针移动时向地址减小的方向移动的栈。(相对于入栈来说?)

5、!的作用

ldmia r0, {r2 - r3}

ldmia r0!, {r2 - r3}

感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。

6、^的作用

ldmfd sp!, {r0 - r6, pc}

ldmfd sp!, {r0 - r6, pc}^

^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。

汇编指令的学习4——ldm/stm指令、栈的处理相关推荐

  1. arm ldm stm指令解析

    (1)LDR:L表示LOAD,LOAD的含义应该理解为:Load from memory into register LDR   R1,     [R2] R1<--[R2] 就是把R2所指向的 ...

  2. Vue学习(入门实例、常用指令)-学习笔记

    文章目录 Vue学习(入门实例.常用指令)-学习笔记 实例 常用指令 v-on v-bind v-for v-html v-if event v-model 双向数据绑定实现 - defineProp ...

  3. 汇编指令的学习2——常用的ARM指令

    一.常用ARM指令1:数据处理指令 (1)数据传输指令 mov mvn(源目标按位取反后赋给目标) (2)算术指令 add sub rsb adc sbc rsc (3)逻辑指令 and orr eo ...

  4. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  5. 【单片机】汇编指令入门学习|单片机启动代码汇编

     目录 汇编指令入门学习 [汇编指令]MSP430汇编指令 IAR下的汇编/单片机启动代码汇编 ARM 汇编&ARM 指令集 学习笔记 汇编指令入门学习   在进行汇编程序设计时,MSP430 ...

  6. 寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中.这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个 ...

  7. 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)

    title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...

  8. java虚拟机指令初步学习

    先做一个最简程序:然后反汇编一下: public class hello {public static void main(String[] args) { int a = 101;} } 然后来学习 ...

  9. 学mysql是学指令吗_学习Mysql (二) 常用指令

    环境搭建OK.可视化查看看得我一脸懵逼,还是命令行学习下. 常用指令: 1. 登录: mysql -h 主机名 -u 用户名 -p 注:本机localhost的话,-h部分可以省略.-p后面不写密码的 ...

最新文章

  1. Open Flash Chart组件的使用 及 与 jfreechart, FusionCharts 的比较
  2. 通过反射获取子类和父类定义的属性
  3. js切换换class
  4. Interview:算法岗位面试—11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码、项目考察、比赛考察、图像算法的考察等
  5. Java二分查找、折半查找
  6. 玩转短视频?守护视频安全?AI智能提速?一分钱体验? 阿里云视频点播大招盘点...
  7. SpringBoot 自定义线程池
  8. 深度学习与人工智能革命:part IV
  9. android 邮件发送html,如何发送HTML电子邮件
  10. openSUSE安装WPS
  11. 微信支付app支付怎么快速开通
  12. APA 论文的 格式 及 样式标准
  13. 简谈几种常用的库函数
  14. 借助Mendix打造敏捷开发和移动端应用的数字化维修服务平台
  15. 面试官都叫好的Synchronized底层实现,这工资开多少一个月?
  16. python数列求和,怎样在python求和
  17. TAP-Win32 Adapter OAS“的网络适配器删除后总是出现(kms激活器及win10激活)
  18. 【CV】MobileNet:使用深度可分离卷积实现用于嵌入式设备的 CNN 架构
  19. Ubuntu的ldconfig详解(解决*.so不是符号连接)
  20. 内嵌资源html,go 1.16 embed 实现资源文件(html, css, js等)内嵌

热门文章

  1. SOA架构设计经验分享—架构、职责、数据一致性
  2. json字符串转换成json对象
  3. WinForm 清空界面控件值的小技巧
  4. python3字符串属性(二)
  5. vba基本操作 -- 常用功能
  6. Android——Ubuntu android NDK 配置
  7. Delphi 记录类型- 结构指针
  8. CodeIgniter中运用composer安装依赖包
  9. 简单计算器 (关于栈的一种应用)
  10. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)