2014-03-25 121 views
0

什麼是這些指令的結果呢? (任何建議,我怎麼可能由剛剛運行我的代碼回答這個自己?)這些ARM彙編指令的含義是什麼?

STR.W R8, [R3], #4 
STR.W R8, [R3], #4 
STR.W R8, [R3], #4 
STR.W R8, [R3], #4 
STR.W R8, [R3], #4 
STR.W R8, [R3], #4 
STR.W R8, [R3] 

我知道,每個指令將加載到R8 R3的值使增量以4比R3,但我很困惑是在這些裝置的最後,R8的價值是什麼?

難道[R3 + 16]?或[R3 + 4],[R3 + 8],...,[R3 + 16]?

+1

*將裝載R3的值劃分R8 *是錯誤的。這是'STR'的倒退; **會將值存儲到來自R8 **的R3地址。這看起來像一些'memset()'類型的代碼。調試器中的單步。 –

+0

@BBBank是什麼讓你說16位? –

+1

@BitBank:我想'STR.W'是*的Thumb2 *指令編碼?我認爲他們存儲32位。否則,它會是'STRH'? OP並不完全清楚他們在哪種模式。 –

回答

3
STR.W R8, [R3], #4 

該指令存儲在r8r3保持的地址保持的32位值。然後它將立即值4添加到r3

A8.6.195 STR (register) 

Store Register (register) calculates an address from a base register value 
and an offset register value, stores a word from a register to memory. The 
offset register value can optionally be shifted. For information about memory 
accesses see Memory accesses on page A8-13. 

Encoding T2  ARMv6T2, ARMv7 
STR<c>.W <Rt>,[<Rn>,<Rm>{,LSL #<imm2>}] 

STR<c><q> <Rt>, [<Rn>], <Rm>{, <shift>} Post-indexed: index==FALSE, wback==TRUE 
0

R8中包含的值是什麼?

總是相同的值,你沒有改變它。你總是改變R3指向的內存值。

回顧代碼:

STR.W R8, [R3], #4 /* *r3 ← r8 then r3 ← r3 + 4 */ 

正如ARM文檔說:

STR {類型} {COND}室溫,[Rn中],#offset;後索引

另一件事是:

STR.W R8, [R3, +#4] /* *r3 ← r8 + 4 */ 

STR {類型} {COND}室溫,[Rn中{,#offset}];直接偏移

最後:

STR.W R8, [R3, #4]! /* r3 ← r3 + 4 then *R3 ← R8 */ 

STR {類型} {} COND室溫,[Rn,則#offset]! ;前索引

我希望你懷疑是這個方向。

問候。