ARM程序集中str的说明

Bol*_*boa 1 assembly arm

奇怪的是,我找不到关于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.

这是我的猜测,虽然对我来说这听起来不正确.有人可以为我澄清一下吗?

cod*_*edd 5

str r1,[r0,r3,lsl#2]

这里发生了什么?

上面的说明基本上说:r0 + (r3 << 2) = r1或者,如果我们手动"扩展"位移:r0 + (r3 * 4) = r1

符号是<instruction> <src> [<dst>, <offset>, <shift>].

注意,偏移也可以是负的(例如-r3, #lsl2).

我想知道r1的价值最终会在哪里,以及它的价值.

你需要知道的实际值r0,并r3在执行过程中在特定时间点之前就可以知道这些.这就像问"什么是yin 的价值y = f(x) : x * 2?" 什么都不知道x.

r3在逻辑上移位2.然后将其加到r0.

是.

最后,将r1添加到r0.

在基准r1存储在(不添加到)由左手侧计算出的位置.