在ARM程序集中,我有跨寄存器r3 - r9
的数据。我想使用从stm
r0
指令将它们存储回内存
指令stm r0,{r3-r9}
会使寄存器中的数据彼此相邻。
但我想要的是在存储的值之间有一个16字节的间隙,例如:
str r3,[r0]
str r4,[r0,#16]
str r5,[r0,#32]
str r6,[r0,#48]
...
这可能是stm
指令还是有一些快捷方法?
答案 0 :(得分:5)
STM指令lets you specify whether the destination address should grow downwards or upwards,但不是步幅应该是什么(它是寄存器的大小,即一个字)。所以你可能不得不使用一些替代解决方案,就像你自己建议的那样。
例如:
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
....