奇怪的是,我找不到关于str
汇编语言工作方式的解释。
我了解以下...
str r1,[r2]
......将存储无论是在寄存器1 r1
,寄存器2的地址r2
。但是,我想解释一下str
方括号复杂得多时的工作方式。例如:
str r1,[r0,r3,lsl#2]
这里发生了什么?我想知道r1
最终的价值,以及它的价值是什么。我无法对其进行测试,因此我将对我的想法进行猜测。
r3
在逻辑上移位2。然后将其添加到中r0
。最后,r1
被添加到中r0
。
这是我的猜测,尽管即使对我来说,这听起来也不正确。有人可以帮我澄清一下吗?
str r1,[r0,r3,lsl#2]
这里发生了什么?
上面的指令基本上说:r0 + (r3 << 2) = r1
,或者如果我们手动“扩展”位移:r0 + (r3 * 4) = r1
记号是<instruction> <src> [<dst>, <offset>, <shift>]
。
请注意,偏移量也可以为负数(例如-r3, #lsl2
)。
我想知道r1的值将在哪里结束,其值将是多少。
你需要知道的实际值r0
,并r3
在执行过程中在特定时间点之前就可以知道这些。这就像问“ y
in的值是y = f(x) : x * 2
什么?” 一无所知x
。
r3在逻辑上移位2。然后将其添加到r0。
是的。
最后,将r1添加到r0。
在基准r1
被存储在(不添加到)由左手侧计算出的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句