即时寻址模式差异?



最近当我研究寻址模式的概念时,第一种类型是即时寻址模式,请考虑示例ADD #NUM1,R0(从左到右执行指令)

这里,NUM1的地址是否存储在寄存器R1中? 当我们做ADD #4,R0让它指向下一个数据时呢,当我们使用#4时,我知道它在寄存器 R0 的内容中添加了 4。当我们使用#NUM1#4时有区别吗?请解释一下!

我们使用#NUM1#4有区别吗

在可执行文件中CPU实际运行的最终机器代码中,不,没有。

如果你有一个直接创建可执行文件的汇编程序(没有单独的链接步骤),那么汇编程序将在汇编时知道NUM1的数字地址,并简单地将其扩展为立即,产生与您编写add #0x700, R0完全相同的机器代码。 (假设本示例的NUM1标签最终位于地址0x700

例如,如果add #imm, R0的机器编码是00 00 imm16,那么你会得到00 00 07 00(假设立即使用位端)。

在这里,NUM1 的地址是否存储在寄存器 R1 中?

不,它已添加到R0。 如果 R0 以前包含4,则 R0 现在将保存地址NUM1+4

R1 不受影响。


通常,您有一个汇编程序和一个单独的链接器(例如as foo.s -o foo.o组装然后与ld -o foo foo.o链接)。

数字地址在组装时不可用,仅在链接时可用。 对象文件格式保存符号重定位的元数据,链接器在决定代码的加载位置后,允许链接器填充绝对数字地址。

生成的机器代码仍将相同。

最新更新