MIPS 中的注释有地址吗?
Do comments in MIPS have addresses?
我有一个关于 MIPS 中通常如何存储注释的幕后问题。主要是:为什么它们不影响依赖于位置的指令?这与它们的存储方式有关吗?
例如,假设我有一个像
这样的跳转语句
j Label
# I'm a comment. I don't do anything!
Label:
跳转指令可能是十六进制的 0x08100007
。无论该评论是否存在,指令都是相同的。至少,根据 MARS 4.5,我的 MIPS 模拟器。
但是,如果我改为在标签和跳转语句之间放置一条有意义的指令,则十六进制代码会递增。
j Label
addi $t0, $t0, 10
Label:
根据MARS,跳转的指令实际上以十六进制递增到0x08100008
。
那么,为什么注释没有将地址转移到跳转指令需要去的地方?
处理器不知道或看不到:
- 评论
- 数据声明
- 标签
它只看到机器代码指令——这些指令告诉它它需要知道的一切
- 接下来要执行什么指令
- 如何解释数据(variables/storage 个位置)
- 如何处理一些数据
由于注释在机器代码中没有表示,因此它们会被编译器或汇编程序删除。
标签被删除,除非它们是全局的 — 用于多文件编译(或者有时如果启用了调试)。
数据声明变成将存储在程序中的数据;数据将被加载到内存中 运行,但处理器只会看到数据,因为它通过程序的机器代码指令被引用为操作数。
我有一个关于 MIPS 中通常如何存储注释的幕后问题。主要是:为什么它们不影响依赖于位置的指令?这与它们的存储方式有关吗?
例如,假设我有一个像
这样的跳转语句 j Label
# I'm a comment. I don't do anything!
Label:
跳转指令可能是十六进制的 0x08100007
。无论该评论是否存在,指令都是相同的。至少,根据 MARS 4.5,我的 MIPS 模拟器。
但是,如果我改为在标签和跳转语句之间放置一条有意义的指令,则十六进制代码会递增。
j Label
addi $t0, $t0, 10
Label:
根据MARS,跳转的指令实际上以十六进制递增到0x08100008
。
那么,为什么注释没有将地址转移到跳转指令需要去的地方?
处理器不知道或看不到:
- 评论
- 数据声明
- 标签
它只看到机器代码指令——这些指令告诉它它需要知道的一切
- 接下来要执行什么指令
- 如何解释数据(variables/storage 个位置)
- 如何处理一些数据
由于注释在机器代码中没有表示,因此它们会被编译器或汇编程序删除。
标签被删除,除非它们是全局的 — 用于多文件编译(或者有时如果启用了调试)。
数据声明变成将存储在程序中的数据;数据将被加载到内存中 运行,但处理器只会看到数据,因为它通过程序的机器代码指令被引用为操作数。