ZHCUAU3J January 2018 – March 2024
加载地址决定了加载程序将段的原始数据放在何处。对该段的任何引用(例如其中的标号)都会引用其运行地址。
如果您只为某个段提供了一个分配(加载或运行),该段只会分配一次,并会在相同的地址加载和运行。如果您提供了这两个分配,该段会被视作两个大小相同的段来进行分配。这意味着,这两个分配都会占用存储器映射中的空间,并且彼此不能叠加,也不能与其他段叠加。(UNION 提供了一种叠加段的方式;请参阅节 12.5.7.2。)
如果加载地址或运行地址包含额外的参数,例如对齐或阻塞,请在相应的关键字后列出。在遇到关键字 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
有关运行时重定位的更多信息,请参阅节 9.5。