立即寻址模式不同吗?

时间:2018-12-04 16:41:12

标签: cpu-architecture

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

这里,NUM1的地址是否存储在寄存器R1中? 当我们执行ADD #4,R0使其指向下一个数据时该怎么办,当我们使用#4时,我知道它将R4加4。使用#NUM1#4有什么区别。请解释!

1 个答案:

答案 0 :(得分:1)

  

使用#4NUM1时有区别

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

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

例如如果00 00 imm16的机器编码为00 00 07 00,那么您将得到4(假设位尾数是立即数)。

  

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

否,它是添加到R0。如果R0先前包含NUM1+4,则R0现在将保留地址as foo.s -o foo.o

R1不受影响。


通常您有一个汇编程序和一个单独的链接器(例如,ld -o foo foo.o要进行汇编,然后与ItemSource链接)。

数字地址在汇编时不可用,仅在链接时可用。目标文件格式包含用于符号重定位的元数据,一旦链接器决定了将代码加载到的位置,链接器就可以填充绝对数字地址。

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