ARM汇编指令-STMFD/LDMFD
2024-12-23 来源:cnblogs
根据调用规则ATPCS,程序一般都使用FD(FullDescending)类型的数据栈(满栈),那么对立的就由空栈类型的数据栈。空栈是指SP操作完后指向的地址空间是未使用的,反之满栈就是SP指向的地址已经使用了。所以对应到压栈出站时的操作就有一点点不一样。如果是满栈模型则会先执行栈指针的操作后在向栈指针指向的位置写入,反之就是先写入在移动栈指针。这里先要明确数据传输语法的基本语法格式。
数据传输指令语法格式:
CMD{cond} Rn{!}, reglist{^}
CMD 为命令有LDM*/STM*
cond 为条件码(可选)
Rn 为基址寄存器
{!} 可选后缀,选用后缀后表示请求回写,即当数据传输完成后将最后的地址写入到基址寄存器Rn中,不选用则基址寄存器内容不改变
{^} 该后缀表示后面的寄存器都是用户模式下的寄存器;其次当CMD为LDM且寄存器列表中包含R5(PC)时,除正常传输数据还需要将SPSR复制到CPSR
LDM和STM还分为两种情况,一种是普通数据传送,还有一个是用于堆栈的操作时。
普通数据传输过程中使用IA IB DA DB区别基址的移动方向,其中A和B分别表示befor和after,I和D分别表示Increment和Decrement。
xxxIA 传送后地址增加4
xxxIB 传送前地址增加4
xxxDA 传送后地址减少4
xxxDB 传送前地址减少4
用于堆栈时用FD,ED,FA,EA来区别栈操作的方式其实就是区别一下方式是相同的。F表示Full (满栈)而E表示Empty(空栈)。A表示Ascenging(递增),D表示Descending(递减)。组合起来就是:
xxxFD 满栈递减栈(ARM核通常时这种)
xxxFA 满栈递增栈
xxxED 满栈递减栈
xxxEA 空栈递增栈
总结一下就是如下:
LD : load 加载,出栈操作
ST : store 存储,入栈操作
M : multi 多次
F: full 满栈,SP指向最后一个数据
E: empty 空栈,SP指向与最后一个数据相邻的下一个可写入存储单元
D: descending 递减,代表栈的增长方向
A: ascending 递增,代表栈的增长方向
STMFD/LDMFD指令详解
STMFD SP,{R0-R3}
;执行伪指令大致是:
;SP-4 = R3
;SP-8 = R2
;SP-12 = R1
;SP-16 = R0
;SP 的值未修改。
LDMFD SP,{R0-R3}
;执行伪指令大致是:
;R3 = SP-4
;R2 = SP-8
;R1 = SP-12
;R0 = SP-16
;SP 的值未修改。
STMFD SP!,{R0-R3}
;执行伪指令大致是:
;SP-=4
;SP = R3
;SP-=4
;SP= R2
;SP-=4
;SP= R1
;SP-=4
;SP = R0
;SP-=4
;SP 的值已修改。
STMED SP!,{R0-R3}
;执行伪指令大致是:
;SP = R3
;SP-=4
;SP= R2
;SP-=4
;SP= R1
;SP-=4
;SP = R0
;SP-=4
;SP 的值已修改。
参考:
http://blog.chinaunix.net/uid-28458801-id-3791987.html
https://blog.csdn.net/stephenbruce/article/details/51151147
https://www.jianshu.com/p/aa4695b6bc26
https://blog.csdn.net/weiwei_xiaoyu/article/details/20563479
- 基于ExecuTorch与Arm SME2的端侧机器学习推理加速
- 深入解析Arm Neoverse计算平台的技术架构与性能优势
- 端侧AI爆发催生芯片设计新范式,Arm技术授权订阅模式为产业铺就“快车道”
- Arm 执行副总裁:尚未向合作伙伴提供适用于 Windows 操作系统的 GPU
- Arm 赋能机器人:产品落地的底层技术
- 行业评论 从工具到平台:如何化解跨架构时代的工程开发和管理难题
- Arm Flexible Access 扩容升级,赋能更多企业加速芯片开发
- Microchip推出PIC32CM PL10 MCU系列,进一步扩展其 Arm@ Cortex@-M0+产品组合
- 云开发者正加速向 Arm 架构迁移:构建面向 AI 时代的未来基础设施
- Arm 计算平台加持,联想车计算推动 L4 级自动驾驶出租车规模化落地
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




