奇怪的是,我找不到关于str
汇编语言如何运作的解释.
我明白以下......
str r1,[r2]
Run Code Online (Sandbox Code Playgroud)
...将r1
寄存器2的地址中存储寄存器1中的任何内容r2
.但是,我想解释str
方括号更复杂时的工作原理.例如:
str r1,[r0,r3,lsl#2]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我想知道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
被存储在(不添加到)由左手侧计算出的位置.