arm汇编指令之数据块传输(LDM,STM)详见
数据块传输指令用于加载(LDM)或者存储(STM)当前有效寄存器的任意子集。
它们支持所有可能的堆栈模式,维持空或者满的堆栈,此堆栈可以向上或者向下,在保存或者恢复内容,
移动主存储器的大数据块是非常有效的。
1,指令格式:
{cond} Rn{!}, {^}
*{cond} 条件代码
* 指令类型
*Rn 基址寄存器,其 不可以为R15
* 寄存器列表,寄存器范围包含在{}(比如{R0,R2-R7,R10}),其 可以是R0~R15的任意组合 。
由于R15是pc,对其操作可能会造成程序跳转, R15在最后一个被传输。
序号低的寄存器对应于存储器的低地址,不考虑{...}中的次序
*{!} 为可选后缀,
若选用该后缀,表示请求回写(W=1),则当数据传送完毕之后,将 最后的地址写入到基址寄存器(Rn)中,
否则,W=0。表示请求不写回, 基址寄存器的内容不改变。
*{^} 为可选后缀,
当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送外,还将 SPSR复制到CPSR中。
同时,该后缀还表示传入或传出的是 用户模式下的寄存器,而不是当前模式下的寄存器。
2,指令类型:
当LDM/STM没有被用于堆栈,而只是简单地表示地址前向增加,后向增加,前向减少,后向减少时,由IA,IB,DA,DB控制。
IA ----> Increment After 每次传送后地址加4
IB ----> Increment Before 每次传送前地址加4
DA ----> Decrement After 每次传送后地址减4
DB ----> Decrement Before 每次传送前地址减4
堆栈请求格式,FD,ED,FA,EA定义了前/后向索引和上/下位,F,E表示堆栈满或者空。
A 和D 定义堆栈是递增还是递减,如果递增,STM将向上,LDM向下,如果递减,则相反。
FA ----> Full Ascending 满递增堆栈
FD ----> Full Descending 满递减堆栈
EA ----> Empty Ascending 空递增堆栈
ED ----> Empty Descending 空递减堆栈
示例:
两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只有前后一致即可),
而使用数据块指令进行压栈和出栈操作则需要考虑空与满,加与减对应的问题。
3,指令详解:
(1)IA
STMIA R0!,{R1,R2, R3,R14}
先传后增,寄存器→RAM
效果图:
(2)IB
STMIB R0!,{R1,R2, R3,R14}
先增后传,寄存器→RAM
效果图:
先增后传, RAM →寄存器
效果图:
(3)DA
STMDAR0!,{R1,R2, R3,R14}
先传后减, 寄存器→ RAM
效果图:
LDMDAR0!,{R1,R2, R3,R14}
先传后减, RAM → 寄存器
效果图:
(4)DB
STMDBR0!,{R1,R2, R3,R14}
先减后传,寄存器→ RAM
效果图:
LDMDBR0!,{R1,R2, R3,R14}
先减后传, RAM → 寄存器
效果图:
(5)FA
STMFASP!,{R0,R1,R2,R14}
满递增入栈,R13为基址地址
效果图:
LDMFASP!,{R0,R1,R2,R14}
满递增出栈,R13为基址地址
效果图:
(6)FD
STMFDSP!,{R0,R1,R2,R14}
满递减入栈,R13为基址地址
效果图:
LDMFDSP!,{R0,R1,R2,R14}
满递减出栈,R13为基址地址
效果图:
(7)EA
STMEASP!,{R0,R1,R2,R14}
空递增入栈,R13为基址地址
效果图:
LDMEASP!,{R0,R1,R2,R14}
空递增出栈,R13为基址地址
效果图:
(8)ED
STMEDSP!,{R0,R1,R2,R14}
空递减入栈,R13为基址地址
效果图:
LDMEDSP!,{R0,R1,R2,R14}
空递减出栈,R13为基址地址
效果图:
arm汇编指令之数据块传输(LDM,STM)详见相关推荐
- ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结
1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...
- arm汇编指令详细整理及实例详解
目录 一.简介 二.ARM 汇编指令说明 2.1 32位数据操作指令 2.2 32位存储器数据传送指令 2.3 32位转移指令 2.4 其它32位指令 三.实例讲解 3.1 MRS 3.2 MSR 3 ...
- arm汇编指令——分析问题的利器
文章目录 arm汇编指令为什么重要 1. 主导问题 2. arm汇编指令分类介绍 通用寄存器 状态寄存器 数据转移指令 寻址格式 运算指令 比较指令 跳转指令 3. 反汇编接口 4. 反汇编分析举例 ...
- 1.15.ARM汇编指令3之逻辑指令
ARM汇编指令之逻辑指令:and & orr & eor & bic * and 逻辑与操作指令,将operand2的值与寄存器Rn的值按位逻辑与操作,结果保存到Rd中. 指令 ...
- ARM汇编指令学习---基于启动文件startup.S分析
本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...
- 常用的ARM汇编指令总结
第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...
- 将用户数据分成一个个数据块传输的优点不包括( )
将用户数据分成一个个数据块传输的优点不包括( D ) A. 减少延迟时间 B. 提高错误控制效率 C. 使多个应用更公平地使用共享通信介质 D. 有效数据在协议数据单元(PDU)中所占比例更大 将用户 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- ARM 汇编指令 MOV32用法
前言 移植基于ARM平台的RTOS时,需要掌握一些基本的汇编指令,只有熟悉了这些ARM 的汇编指令,才能真正的掌握RTOS的移植方法 MOV32 指令,字面意思是 MOVE 一个 32位 值的意思,具 ...
- 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总
嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...
最新文章
- 蜘蛛搜索引擎_各大搜索引擎的蜘蛛特点
- js如何循环拼接字符串
- 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
- 不懂Python装饰器?教程双手奉上!
- 爬虫入门【10】Pyspider框架简介及安装说明
- JTable 学习一
- stc 串口收发 c语言,STC15W408AS串口通讯PC乱码
- java编译出现乱码_java编译乱码解决方法
- AVOD-代码理解系列(四)
- 彻底搞懂虚拟地址翻译为物理地址的过程
- Qt静态函数中的信号和槽问题
- 解决办法:.bat文件运行不了,管理员运行后闪退
- 梯度与Roberts、Prewitt、Sobel、Lapacian算子
- SV实验3 子系统验证和测试点划分
- 【ts】typeScript高阶:any和unknown
- wps表格l制作甘特图_甘特图是什么?-如何用WPS表格做甘特图
- 圆桌问题(数据结构作业+数组和链表)(1024程序员不容易,这次给源码)
- CSDN专访:吃喝玩乐背后的黑科技
- 2021年Linux技术总结(三):根文件系统(rootfs)
- 看,抽签问题还能这样写。。