title: LDM与STM指令详解
date: 2019/2/26 17:58:00
toc: true
---

LDM与STM指令详解

指令形式如下,这里的存储方向是针对寄存器的

Load Multiple (LDM) and Store Multiple (STM)
LDM{<cond>}<addressing_mode> Rn{!}, <registers>{^}
STM{<cond>}<addressing_mode> Rn{!}, <registers>{^}

LDM,加载寄存器列表

LDMIA R2, {R0-R3} ; Reload R0-R3 from temporary storage

STM,存储寄存器列表

STMIA R13, (R0-R3) ; Put R0-R3 into temporary storage
看下STR
STR R0, [R7, #0x7C] ; Store word from R0 to address R7 + 124
摘自汇编器指南
^ 为一个可选后缀,仅可用于 ARM 状态。 不可在用户模式或系统模
式下使用该后缀。 该后缀具有下列功能:
• 如果指令为 LDM (具有任何寻址模式)且 reglist 包含 pc
(r15),则除了正常的多寄存器传送外,还会将 SPSR 复制到
CPSR 中。 这是为了从异常处理程序返回。 请仅在异常模式下
使用此后缀。
• 否则,数据将被送入或送出用户模式寄存器,而不是当前模
式寄存器。

!

! 表示更新表示目标地址的寄存器在操作后是否更新这个表示地址的寄存器的值,如果没有则

  • LDM中,Rn不变
  • STM中,Rn不变

LDM ^

LDM{<cond>}<addressing_mode> <Rn>, <registers_without_pc>^

For an LDM instruction that does not load the PC, this indicates that User mode registers are to be loaded.

LDM{<cond>}<addressing_mode> <Rn>{!}, <registers_and_pc>^

For an LDM instruction that loads the PC, this indicates that the SPSR of the current mode iscopied to the CPSR.

  • 如果操作的寄存器有pc,则表示恢复spsr到cpsr,并跳转到pc,一般切换模式返回都需要这样,这个应该在异常模式下使用
  • 否则,表示存储的是用户模式的寄存器,比如我现在在异常模式,用这个方式的话**设置的是用户状态的寄存器sp**

STM ^

STM{<cond>}<addressing_mode> <Rn>, <registers>^

For an STM instruction, indicates that User mode registers are to be stored.

表示操作的是用户模式的寄存器,比如我现在在异常模式,用这个方式的话读取的的是用户状态的寄存器sp,也就是说将用户模式的sp存到某个地方

如果不用这个指令,想获取到用户的寄存器,我们需要切换到系统模式,因为系统模式和用户模式的sp是公用的

MOVS

这里插入讲一下指令后跟个S,表示更新cpsr,MOVS PC,R14
This restores the PC (from R14_und) and CPSR (from SPSR_und) and returns to the instruction following
the Undefined instruction.

参考

关于指令,找不到的话看 ARM Architecture Reference Manual.pdf,直接google一下就有pdf了

或者点击这里

中文的pdf RealView_ARM_汇编指南.pdf

转载于:https://www.cnblogs.com/zongzi10010/p/10443652.html

LDM与STM指令详解相关推荐

  1. arm-linux-ld中的参数,arm-linux-ld指令详解

    arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...

  2. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  3. movsb movsw movsd 指令详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u013490896/article/d ...

  4. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  5. C#中的预处理指令详解

    这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...

  6. pragma comment的使用 pragma预处理指令详解

    pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一个注 ...

  7. PUSHA/PUSHAD POPA/POPAD 指令详解

    PUSHA/PUSHAD POPA/POPAD 指令详解 官方文档的解释 在<Intel Architecture Software Developer's Manual Volume 2:In ...

  8. Dockerfile 指令详解1

    Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...

  9. 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结

    JSP基础.指令.四大作用域九大隐式对象总结 (一)JSP基础 一.JSP概述 jsp其实是java动态页面技术 HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据. Ser ...

最新文章

  1. 10 迭代器与生成器
  2. (原创)speex与wav格式音频文件的互相转换(二)
  3. getOrDefault()和subList()
  4. 可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理
  5. 关联规则应用场景实例十则
  6. iText操作Word工具类
  7. java 类的域_Java类中对象域的初始化
  8. android学习笔记---1.为应用添加新的Activity,中使用Intent(意图),结果码,请求码,得到新打开Activity 关闭后返回的数据,Bundle类的作用
  9. Vim 的几个彩蛋。。
  10. HDU 4983 Goffi and GCD(数论)
  11. 左耳朵谈个人成长:做正确的事,等着被开除
  12. eRPC:通过实现双向请求的串行通讯传输(dual serial transport)支持client/server混合运行
  13. 面包机面包/蛋糕配方
  14. VM虚拟机分区硬盘/安装win10系统
  15. 罗格斯大学电气与计算机工程专业怎么样,罗格斯大学计算机工程排行,千万得细心点听懂...
  16. 房地产估值法研究报告_房地产估值方法
  17. 如何通过电脑cmd查看android设备日志
  18. 【HTML5】------- JavaScript 实现网页版HTML5发送语音功能
  19. 第二章 STC51开发环境搭建
  20. pragma warning

热门文章

  1. 分布式事务 Seata
  2. 正则-某字符在字符串中出现的次数、字母数字下划线常用正则表达式
  3. 气传导耳机怎么样?最好的气传导耳机推荐
  4. linux 占用端口命令,linux释放占用端口
  5. Matlab:运算符优先级
  6. “新四化”:危机下的汽车产业转型路标
  7. JS拖动水晶球特效代码
  8. 学计算机可以买轻薄本吗,轻薄便携笔记本盘点
  9. 基于单片机的电梯(四层)控制系统设计
  10. java springBoot项目代码加密总结