奇怪的是,我无法找到关于str
如何在汇编语言中工作的解释。
我明白以下......
str r1,[r2]
...将寄存器1中的任何内容r1
存储在寄存器2的地址r2
中。但是,我想解释当方括号更复杂时str
如何工作。例如:
str r1,[r0,r3,lsl#2]
这里发生了什么?我想知道r1
的价值最终会在哪里,以及它的价值。我无法测试它,因此我将猜测我的想法。
r3
在逻辑上移位2.然后将其添加到r0
。最后,r1
被添加到r0
。
这是我的猜测,虽然对我来说这听起来不太正确。有人可以为我澄清一下吗?
答案 0 :(得分: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
在执行过程中的特定时间点的实际值,然后您才能知道其中的任何内容。这就像问y
中y = f(x) : x * 2
的价值是多少?对x
没有任何了解。
r3在逻辑上移位2.然后将其添加到r0。
是
最后,r1被添加到r0。
r1
中的数据存储(未添加到)由左侧计算的位置。
答案 1 :(得分:2)
r3在逻辑上移位2.然后将其加到r0。最后,r1被添加到r0。
r1
未添加到任何内容中。它存储在您在前两个句子中描述的地址计算的地址。即:
[r0 + (r3 << 2)] = r1
有关详细信息,请参阅“ARM体系结构参考手册”中的加载和存储字或无符号字节 - 缩放寄存器偏移量。
我想知道r1的值最终会在哪里,以及它的价值是什么。
如果在句子的第二部分你的意思是“我想知道r1
的价值是什么”那么答案是“根据给定的说法不可能说”信息”。它将具有最后分配给它的任何值。