存储指令中的数据对齐

Num*_*our 1 assembly arm

在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] 
...
Run Code Online (Sandbox Code Playgroud)

这可能与stm指令有关还是有一些快捷方法?

Mic*_*ael 5

STM指令允许您指定目标地址是向下还是向上增长,而不是步幅应该是什么(它将是寄存器的大小,即一个字).所以你可能不得不使用一些替代解决方案,就像你自己建议的那样.

例如:

str r3,[r0]
str r4,[r0,#16]
str r5,[r0,#32]
....
Run Code Online (Sandbox Code Playgroud)

要么

; 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
....
Run Code Online (Sandbox Code Playgroud)