MIPS 中的符号地址与标签
Symbolic Address vs Label in MIPS
我只是想确保我的定义准确无误。程序标签只是符号地址的另一种说法,还是有所不同且更具体?
几乎是;另请参阅 以了解更多关于符号是引用内存地址的方法的信息。它们对于避免手动重新计算每个循环顶部的数字地址(或实际上与相关分支的距离)非常有用。
它们对于无法进行 assemble 时间计算并且必须推迟到 link 时间的情况也很有用。
术语:标签定义符号。符号也可以用其他方式定义,但通常由标签定义。
foo:
单独在一行上(或在一行的开头)是一个 label.
foo
是 符号 ,您可以从其他地方引用它,例如 jal foo
或 bne foo
。或者用 la $t0, foo
将地址放入寄存器
您甚至可以引用其他源文件中的符号来导出符号,这样它们最终会出现在目标文件的 table 符号中 (.o
) 您的 assembler 从您的 asm 源创建。 (例如,您使用 .global foo
导出 foo
而不是将其仅保留为文件本地符号。)
在 GAS 语法(MARS 最常使用的语法)中,定义符号的其他方法是使用 .set
指令或 .weakref
来定义作为另一个标签别名的标签。或者 .comm
在 BSS 中保留一些 space 并指向它的符号名称。 (但没有使用 .bss
指令实际使 .bss
成为当前部分,因此这不是标签。)
我只是想确保我的定义准确无误。程序标签只是符号地址的另一种说法,还是有所不同且更具体?
几乎是;另请参阅
它们对于无法进行 assemble 时间计算并且必须推迟到 link 时间的情况也很有用。
术语:标签定义符号。符号也可以用其他方式定义,但通常由标签定义。
foo:
单独在一行上(或在一行的开头)是一个 label.
foo
是 符号 ,您可以从其他地方引用它,例如 jal foo
或 bne foo
。或者用 la $t0, foo
您甚至可以引用其他源文件中的符号来导出符号,这样它们最终会出现在目标文件的 table 符号中 (.o
) 您的 assembler 从您的 asm 源创建。 (例如,您使用 .global foo
导出 foo
而不是将其仅保留为文件本地符号。)
在 GAS 语法(MARS 最常使用的语法)中,定义符号的其他方法是使用 .set
指令或 .weakref
来定义作为另一个标签别名的标签。或者 .comm
在 BSS 中保留一些 space 并指向它的符号名称。 (但没有使用 .bss
指令实际使 .bss
成为当前部分,因此这不是标签。)