最近,当我研究寻址模式的概念时,第一种是立即寻址模式,请考虑示例ADD #NUM1,R0
(指令从左到右执行)
这里,NUM1
的地址是否存储在寄存器R1中?
当我们执行ADD #4,R0
使其指向下一个数据时该怎么办,当我们使用#4
时,我知道它将R4加4。使用#NUM1
和#4
有什么区别。请解释!
答案 0 :(得分:1)
使用
#4
和NUM1
时有区别
在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
链接)。
数字地址在汇编时不可用,仅在链接时可用。目标文件格式包含用于符号重定位的元数据,一旦链接器决定了将代码加载到的位置,链接器就可以填充绝对数字地址。
生成的机器代码仍然相同。