MIPS 中的符号地址与标签

Symbolic Address vs Label in MIPS

我只是想确保我的定义准确无误。程序标签只是符号地址的另一种说法,还是有所不同且更具体?

几乎是;另请参阅 以了解更多关于符号是引用内存地址的方法的信息。它们对于避免手动重新计算每个循环顶部的数字地址(或实际上与相关分支的距离)非常有用。

它们对于无法进行 assemble 时间计算并且必须推迟到 link 时间的情况也很有用。


术语:标签定义符号。符号也可以用其他方式定义,但通常由标签定义。

foo: 单独在一行上(或在一行的开头)是一个 label.

foo 符号 ,您可以从其他地方引用它,例如 jal foobne foo。或者用 la $t0, foo

将地址放入寄存器

您甚至可以引用其他源文件中的符号来导出符号,这样它们最终会出现在目标文件的 table 符号中 (.o) 您的 assembler 从您的 asm 源创建。 (例如,您使用 .global foo 导出 foo 而不是将其仅保留为文件本地符号。)

在 GAS 语法(MARS 最常使用的语法)中,定义符号的其他方法是使用 .set 指令或 .weakref 来定义作为另一个标签别名的标签。或者 .comm 在 BSS 中保留一些 space 并指向它的符号名称。 (但没有使用 .bss 指令实际使 .bss 成为当前部分,因此这不是标签。)