2014-03-25 89 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]! ;前索引

我希望你怀疑是这个方向。

问候。