2013-04-25 36 views
1

在ARM汇编中,我有跨越寄存器r3 - r9的数据。我想用stm指令从我在r0存储指令中的数据对齐

指令stm r0,{r3-r9}会把数据从寄存器旁边对方的地址开始将它们存储回内存。 但我要的是有存储的值之间的16个字节的空白,e.g做这样的事情:

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

这可能与stm指令或者是有一些捷径把戏?

+0

的'STM'指令让你指定目标地址是否应该向下或向上增长,但没有步幅应该是什么(它会是一个寄存器的大小,即一个字)。所以你可能需要使用一些你自己建议的解决方案。 – Michael 2013-04-25 12:30:54

+0

Thaks的评论..然后也许有一些技巧,而不是8 STRs? – NumberFour 2013-04-25 12:40:49

+0

这对NEON和交错加载和回写是可行的。 (好吧,7个寄存器虽然是一个坏数字。) – 2013-04-25 12:43:20

回答

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 
.... 
+0

第一个*形式*限于** 4k **或256个条目,用于16个字节的步幅。 – 2013-04-25 22:35:36