ARM汇编STM&LDM知多少

2023年01月03日04:03:02 科技 1238


0

前述


在日常编写Bug的时候,不知是否经过这样一种情况,我明明只是在函数中多加了一个临时变量,结果程序执行就异常了。我屮艸芔茻...


我碰到的一次情况是该函数程序访问数组本来就越界了,但是还能正常工作,就因为加了一个临时变量,栈内容发生了变化,就因为一个变量的偏移,在对数组操作时刚好设置给了LR寄存器,导致子程序返回有误,程序执行逻辑异常。


上述的这种问题,常规调试是无法发现的,甚至问题出现在那个地方都定位不到。


都说汇编代码时程序员的最后一根救命稻草。接下来就来介绍一下汇编中最常用的STM/LDM指令。


LDM翻译为Load Multiple registers.

STM翻译为Store Multiple registers.


语法格式如下:

LDM{addr_mode}{cond} Rn{!}, reglist{^}
STM{addr_mode}{cond} Rn{!}, reglist{^}



1

addr_mode


LDM 和 STM 指令提供了四种不同的寻址方式。寻址模式决定基址寄存器的行为,并在下表中说明。

ARM汇编STM&LDM知多少 - 天天要闻


  • I为Increment(递增)
  • D为Decrement (递减)
  • B为Before
  • A为After


模式决定了基址寄存器是在执行指令前地址增减还是指令执行后增减。


LDM 和 STM 指令也可用于从堆栈中压入或弹出寄存器。

ARM汇编STM&LDM知多少 - 天天要闻


  • D为Descending(降序)。
  • A是Ascending (升序)单词首字母。
  • F是单词Full 首字母,意思为当前的栈指针指向是最后一个入栈的元素。
  • E是单词Empty单词首字母,意思是当前的栈指针指向的是下一个空闲空间。


这四组描述的是栈的生长方向是降序还是升序,以及当前栈指针指向是栈中最后一项元素还是空闲空间。


2

Cond


条件指令仅在程序状态寄存器中的条件标志匹配时执行。例如,BEQ(带有 EQ 条件的 B 指令)仅在设置 Z 标志时分支。如果 {cond} 字段为空,则始终执行指令。

ARM汇编STM&LDM知多少 - 天天要闻


3

Rn


Rn是基址寄存器,ARM 寄存器保存传输的初始地址。Rn 不能是 PC。


4


是一个可选的后缀。如果 !存在时,将最终地址写回 Rn。


5

reglist


是要加载的一个或多个寄存器的列表,用大括号括起来。它可以包含寄存器范围。如果它包含多个寄存器或寄存器范围,则必须用逗号分隔。寄存器 R0 到 R15 (PC) 的任意组合都可以在 ARM 状态下传输,但在 Thumb 状态下有一些限制。


6

^


是可选后缀,仅在 ARM 状态下可用。您不得在用户模式或系统模式下使用它。数据被传入或传出用户模式寄存器,而不是当前模式寄存器。


7

示例


最后看一个示例,如下图,在右上角有一个行汇编指令。

STMDB R13!,{R4-R6,R14}


ARM汇编STM&LDM知多少 - 天天要闻

注意,当执行到这一行代码时,栈指针(SP)的地址是0x3FFFC00,上图已经为执行后的结果。


逐步分析,STM为存贮指令,DB解释为当前栈地址是降序的且当前的栈指针指向栈中的最后一个元素。所以指令执行之前一定要让SP指向下一个空闲地址,执行完之后再将SP地址递减。


因为有!所以该指令执行完之后需要将最后的地址写回给Rn(即SP)。所以最后SP的地址为0x3fffbf0


注意,因为栈地址是递减的,所以最先入栈的是R14,从右往左。如果栈是递增的则反之。


你 学废了吗?

END


嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:ARM汇编STM&LDM知多少 - 天天要闻

转载自:typedef

文章来源于ARM汇编STM&LDM知多少

原文链接:https://mp.weixin.qq.com/s/FZaBy_HAkRlg-TlGicWJuw

科技分类资讯推荐

引领科技豪华MPV新风尚 第二代腾势D9西安车展亮相 - 天天要闻

引领科技豪华MPV新风尚 第二代腾势D9西安车展亮相

兼具宜商气度与家用温情的科技豪华旗舰MPV,第二代腾势D9迎来西安地区正式亮相。新车依托全球新能源MPV冠军底蕴,以第二代刀片电池、双阀云辇-C、天神之眼5.0智驾等核心技术全面升级,兼顾商务体面与家庭舒适,为西北高端用户带来一站式全能出行解决方案。
采购禁入!科华数据材料造假被拒门外 - 天天要闻

采购禁入!科华数据材料造假被拒门外

本报(chinatimes.net.cn)记者胡雅文 北京报道这家赶上AI算力风口的公司,因投标材料造假,被相关采购方列入禁入名单两年,其此前提出的复议申请也被正式驳回。相关采购平台近日发布公告,明确驳回科华数据股份有限公司(下称“科华数据”,002335.SZ)此前提交的复议申请。早在一年前,科华数据已被认定在“信息通信枢纽...
快评乐道L80:15万元级买大五座,这波值得冲? - 天天要闻

快评乐道L80:15万元级买大五座,这波值得冲?

日前,乐道L80正式发布并开启预售,其整车购买预售价为24.58万元起,租电购买预售价则低至15.98万元起。面对大型SUV市场“细分再细分”之竞争趋势,这款乐道年度重磅新车都有哪些优势?又能否成为“大五座SUV革新之作”?下面,圈哥就带大家全方位感受。
成都直击凯威德:纯电全尺寸SUV的张扬与大气 - 天天要闻

成都直击凯威德:纯电全尺寸SUV的张扬与大气

4月22日,凯迪拉克以奥斯卡级盛典规格,将上海保利大剧院点亮为璀璨舞台,在品牌代言人倪妮与全场嘉宾的共同见证下,凯迪拉克全尺寸纯电公路旗舰——凯威德耀然上市。新车共推出长续航四驱Pro、高性能四驱Ultra两款配置,官方售价区间为46.88万-50.88万元。