什么是绝对代码,为什么在编译时知道它?

时间:2014-05-08 21:36:26

标签: compiler-construction operating-system compile-time

在学习我的操作系统概念决赛时,我偶然发现了

Compile time: If memory location knows, **absolute code** can be generated;
must recompile code if starting location changes

示例给出的绝对代码是中断向量表。我想知道这个语句究竟意味着什么,为什么在编译时知道中断向量表?

2 个答案:

答案 0 :(得分:6)

它表示在已知的固定内存地址加载的代码。由于该地址是固定的,因此可以编译跳转直接指向其目标内存地址,无需在加载时使用相对跳转指令或修复任何内容。

答案 1 :(得分:4)

给出的答案是正确的,但还有另一种情况。在嵌入式系统中,当编译ROM时,通常代码的最终地址是相对较早的决定。对于小芯片,设计人员决定将代码的许多部分放置在芯片的存储空间中,并且通常还存在存储器映射的I / O位置。对于ROM,ROM的目标地址将是已知的。

在这种情况下,仍有两种可能性。一个是编译器可以生成直接寻址这些位置的代码(以及C ++帮助中的新放置等功能)。另一个是编译器生成绝对寻址和可重定位代码的混合。在每种情况下,具有“定位器”功能的特殊链接器输出具有绝对寻址的最终代码。在每种情况下,最终地址都是绝对的,不需要运行时修复。