2013-04-25 62 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