您的位置 首页 IOT

ARM中LDM,STM指令解析

这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令,关于LDM和STM的说

这儿比较下简单混杂的四条指令,现已在这4条指令的混杂上花费了许多精力,现在做个小结,LDR,STR,LDMSTM这四条指令,关于LDM和STM的阐明,见别的一个阐明文件,阐明晰这两个文件用于栈操作时的留意事项。

(1)LDR:L表明LOAD,LOAD的意义应该理解为:Load from memory into register。下面这条句子就阐明的很清楚:

LDRR1,[R2]

R1<——[R2]

便是把R2所指向的存储单元的内容的值(一个memory地址内的值),读取到R1中(一个register)

(2)STR:S表明STORE,STORE的意义应该理解为:Store from a register into memory。下面这条句子表明的很清楚:

STRR1,[R2]

R1——>[R2]

便是把寄存器R1中的内容“保存”到R2所指向的存储的单元中(一个memory地址)。

明显,这两条句子都有个特色,便是寄存器写在前面(左面)而内存地址写在后边(右边),数据传送的方向则是恰好相反的。

下面临LDM和STM介绍,运用sp来介绍,由于实践运用中,和sp一同运用更多。

(3)LDM:L的意义仍然是LOAD,便是Load from memory into register。

尽管貌似是LDR的晋级,可是,千万要留意,这个指令运转的方向和LDR是不一样的,是从左到右运转的。该指令是将内存中仓库内的数据,批量的赋值给寄存器,便是出栈操作;其间仓库指针一般对应于SP,留意SP是寄存器R13,实践用到的却是R13中的内存地址,仅仅该指令没有写为[R13],一起,LDM指令中寄存器和内存地址的方位相关于前面两条指令改变了,下面的比如:

LDMFDSP! ,{R0, R1, R2}

实践上能够理解为:LDMFD[SP]!,{R0, R1, R2}

意思为:把sp指向的3个接连地址段(应该是3*4=12字节(由于为r0,r1,r2都是32位))中的数据拷贝到r0,r1,r2这3个寄存器中去(假如这个当地还不明白的话,能够参看我文章最初说到的链接,里边有具体的图解)

(4)STM:S的意义仍然是STORE,与LDM是配对运用的,其指令格局上也类似,即差异于STR,是将仓库指针写在左面,而把寄存器组写在右边。

STMFDSP!,{R0}

相同的,该指令也可理解为: STMFD[SP]!,{R0}

意思是:把R0保存到仓库(sp指向的地址)中。

明显,这两个仓库操作指令也有个特色,便是寄存器组写在后边(右边)而仓库指针写在前面(左面),并且实践上运用的是仓库指针中的内存地址,这一点与前面两条指令是有差异的。

(弥补:sp后边的!,作用是指指令履行完后,对应的地址值赋给sp,关于例程的SDM,是说最终sp的值应该是sp+3*4=sp+12)

这四条指令中,前面两条和后边两条其实联络不多,反而是不同很大,因而,能够直接把这两组指令区别开来,以为它们之间没有联络,这样防止误解。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/260597.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部