ZHCU947E June 2015 – January 2023
加载地址决定了加载程序将段的原始数据放在何处。对该段的任何引用(例如其中的标号)都会引用其运行地址。请参阅GUID-BF516D04-80F5-4057-BADD-5A739DF53956.html#GUID-BF516D04-80F5-4057-BADD-5A739DF53956,以简要了解加载和运行地址。
如果您只为某个段提供了一个分配(加载或运行),该段只会分配一次,并会在相同的地址加载和运行。如果您提供了这两个分配,该段会被视作两个大小相同的段来进行分配。这意味着,这两个分配都会占用存储器映射中的空间,并且彼此不能叠加,也不能与其他段叠加。(UNION 提供了一种叠加段的方式;请参阅GUID-7D6B3B4D-3EAD-400C-9E89-535AB0216509.html#GUID-7D6B3B4D-3EAD-400C-9E89-535AB0216509。)
如果加载地址或运行地址包含额外的参数,例如对齐或阻塞,请在相应的关键字后列出。在遇到关键字 load 后,与分配相关的一切内容都会影响加载地址,直到遇到关键字 run,在此之后,一切内容都会转而影响运行地址。加载和运行分配完全独立,因此其中任何一个的资格(例如对齐)都不会对另一个产生影响。您还可以先指定运行地址,再指定加载地址。可以使用括号来提高可读性。
下面的示例指定了加载和运行地址。
本例中,对齐只会应用到加载:
.data: load = SLOW_MEM, align = 32, run = FAST_MEM
下例中使用了括号,但作用与上例完全相同:
.data: load = (SLOW_MEM align 32), run = FAST_MEM
下例会针对运行分配将 FAST_MEM 对齐到 32 位并将所有加载分配对齐到 16 位:
.data: run = FAST_MEM, align 32, load = align 16
有关运行时重定位的更多信息,请参阅GUID-0E218719-C852-4F99-8D70-2A319EC0B8EB.html#GUID-0E218719-C852-4F99-8D70-2A319EC0B8EB。