stmfd   sp!, {r0-r3, lr}         【属于8中寻址方式中的“堆栈寻址”】

上面这句ARM汇编指令的伪代码如下//SP指针地址变化过程
SP = SP - 4×4;        //4个寄存器,每个4个字节,该语句得到运算后的SP地址
address = SP;           //将运算后的地址赋给临时地址变量address//寄存器赋值给内存地址的赋值过程
for i = 0 to 2
Memory[address] = ri;   //将r0、r1、r2赋给内存有小到大的地址
address  = address + 4; //地址添加4后,将lr赋给最高的地址
Memory[address] = lr;   

SP栈指针指向的变化

图 1

图1中,左图是执行指令stmfd sp!, {r0-r3, lr}前,右图是执行stmfd sp!, {r0-r3, lr}指令之后,观察SP地址变化情况。

【注意】1、ARM规定,sp始终是指向栈顶位置的,stm指令把寄存器列表中索引最小的寄存器存在最低地址,所以R0在最低地址,向上依次是r1,r2,r3,lr。完成后SP指向保存r0的地址。

【详解】对于大多数的设计来说都是把栈底设置在高地址,栈顶设置在低地址,如图2所示。

即是说上面所说的首先要sp=sp-4×4,这里理解了之后就好理解了,那么执行这条指令后,栈中的数据顺序从栈底到栈顶为lr ,r3,r2,r1,r0,此时sp-->r0,即栈顶,这和堆栈的定义没有冲突,如果sp指向的是lr的话栈就没有用了哦。

【stmfd指令的两种处理方法】

第一种:先计算总共压入的数据个数,直接一次更改指针sp=sp-4*(number)并从低地址向高地址存入数据。

第二种:每压入一次就把sp=sp-1*4,同时一个一个的把数据从高地址向低地址压入

图 2

参考网址来源:https://blog.csdn.net/yxnyxnyxnyxnyxn/article/details/18302887

【ARM汇编】stmfd sp!, {r0-r3, lr}相关推荐

  1. ARM汇编基础详解(PS学习汇编的原因)

    目录 前言 1.GNU 汇编语法 2.Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令(内部寄存器数据非内存数据) 2.2 存储器访问指令(RAM) 2.3 压栈和出栈指令(了解) 2 ...

  2. arm汇编总结---让汇编不再神秘

    一.指令格式 <opcode>{<cond>}{S}     {Rd},    {Rn},   {shifer_operand} <opcode>:    指令操作 ...

  3. ARM汇编指令以及伪指令

    文章目录 ARM寄存器 ARM指令的一般编码格式 ARM指令的条件域 ARM寻址方式 数据处理指令的操作数寻址方式 立即数寻址方式 寄存器寻址方式 寄存器移位寻址方式 字或无符号字节的Load/Sto ...

  4. linux 汇编 preserve8,ARM汇编伪指令

    分类: LINUX 2009-10-21 16:39:09 ARM 汇编程序的由机器指令,伪指令和宏指令组成.伪指令不像机器指令那样在处理器运行期间由机器执行,而是汇编程序对源程序汇编期间由汇编程序处 ...

  5. linux汇编伪指令大全,ARM汇编伪指令

    分类: LINUX 2009-10-21 16:39:09 ARM 汇编程序的由机器指令,伪指令和宏指令组成.伪指令不像机器指令那样在处理器运行期间由机器执行,而是汇编程序对源程序汇编期间由汇编程序处 ...

  6. 常用的ARM汇编指令总结

    第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...

  7. ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH

    ARM的六大类指令集---LDR.LDRB.LDRH.STR.STRB.STRH ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则 ...

  8. ARM汇编与GCC汇编

    ARM汇编与GCC汇编 /** 您忘记正确设置程序集.要解决此问题,请在文件开头发出这些指令: */ .syntax unified .cpu cortex-m3 .fpu softvfp .thum ...

  9. arm汇编学习(二)

    一.STMFD SP!,{R4-R7,R11,LR} 表示依次把R4-R7,R11,LR放入SP中,LR在高位 参考: http://blog.chinaunix.net/uid-26435987-i ...

  10. arm汇编中ldr、str、stm、ldm的用法

    https://blog.csdn.net/q75197694/article/details/48287781 这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,L ...

最新文章

  1. nginx 同一个IP上配置多个HTTPS主机
  2. Windows 10 关闭Hyper-V
  3. CodeSmith NetTier模板生成的代码框架用法 (转)
  4. CMS 系统之 iframe 结构
  5. HDU.2111 Saving HDU(贪心)
  6. Redhat5.2yum源更新为centos源
  7. 聊一聊HTTP缓存机制
  8. action评测 osmo_Osmo Action与GoPro 7的七大对决,评测谁是运动相机王者?
  9. 企业如何选择SSL证书?
  10. editormd支持上传视频
  11. zabbix邮箱告警配置
  12. 77GHz毫米波雷达快速chirp信号技术(五):CAPON Beamforming
  13. 基于ROS的机器人设计
  14. jQuery UI插件之datepicker的自定义设置
  15. 小程序如期而至,赶快看看有哪些好玩的小程序吧
  16. Navicat使用技巧(附快捷键)(多年总结,待完善)
  17. 自动添加Opera搜索串
  18. 区块链 : 历史、现在与未来
  19. 凸优化笔记11(黄金分割法)
  20. 购物商场积分卡小程序开发制作

热门文章

  1. 百度地图api实现的定位,导航,附近搜索
  2. C#腾讯地图Web端定位地址搜索及手机导航
  3. css实现人走路效果,纯css实现机器人走路动画
  4. AngularJS中的$resource使用与Restful资源交互
  5. ros入门保姆级教程之召唤小乌龟
  6. 【STL】rb_tree (multi)set (multi)map
  7. return function和return function()的区别
  8. 把一个内含7个元素的数组中的第3~第5个元素拷贝到内含3个元素的数组中
  9. 期货现货升跌水(期货下跌现货一定下跌吗)
  10. 同wifi,手机控制电脑以及智能家具实现代码