ZHCU947E June 2015 – January 2023
全局符号是在当前模块中访问但在另一模块中定义的符号(外部符号),或是在当前模块中定义并在另一模块中访问的符号。此类符号在各目标模块中均可见。您必须使用 .def、.ref 或 .global 指令将符号识别为外部符号:
.def | 该符号在当前文件中定义,并可在另一文件中使用。 |
.ref | 该符号在当前文件中引用,但在另一文件中定义。 |
.global | 该符号可以是上述任一种。汇编器会根据每个符号的情况选择 .def 或 .ref。 |
以下代码片段说明了这些定义。
.def x
.ref y
.global z
.global q
q: B B3
NOP 4
MVK 1, B1
x: MV A0,A1
MVKL y,B3
MVKH y,B3
B z
NOP 5
在此示例中,x 的 .def 定义表明它是在此文件中定义的外部符号,其他文件可以引用 x。y 的 .ref 定义表明它是在另一文件中定义的未定义符号。z 的 .global 定义表明它在某个文件中定义,并在此文件中可用。q 的 .global 定义表明它在此文件中定义,其他文件可以引用 q。
汇编器将 x、y、z 和 q 放置在目标文件的符号表中。当该文件与其他目标文件链接时,x 和 q 的条目会解析其他文件对 x 和 q 的引用。y 和 z 的条目使链接器在其他文件的符号表中查找 y 的定义和 z 的定义。
链接器尝试将所有引用与相应的定义匹配。如果链接器找不到符号的定义,它将打印有关未解析引用的错误消息。此类错误会阻止链接器创建可执行目标模块。
如果多次定义同一个符号,也会出现错误。