1

在 ARM 汇编中,我有跨寄存器的数据r3 - r9stm我想使用从我拥有的地址开始的指令将它们存储回内存r0

指令stm r0,{r3-r9}会将来自寄存器的数据彼此相邻放置。但我想要的是在存储的值之间有一个 16 字节的间隙,例如执行以下操作:

str r3,[r0]
str r4,[r0,#16]
str r5,[r0,#32]
str r6,[r0,#48] 
...

这可以通过stm指令实现还是有一些捷径?

4

1 回答 1

5

STM 指令允许您指定目标地址应该向下还是向上增长,但不能指定步幅应该是多少(它将是寄存器的大小,即一个字)。因此,您可能不得不使用一些替代解决方案,例如您自己建议的解决方案。

例如:

str r3,[r0]
str r4,[r0,#16]
str r5,[r0,#32]
....

或者

; Slightly simpler since it's obvious that the stores are spaced 16 bytes apart,
; altough it doesn't preserve the original value of r0 like the above version
str r3,[r0],#16
str r4,[r0],#16
str r5,[r0],#16
....
于 2013-04-25T12:45:06.987 回答