在学习我的操作系统概念决赛时,我偶然发现了
Compile time: If memory location knows, **absolute code** can be generated;
must recompile code if starting location changes
示例给出的绝对代码是中断向量表。我想知道这个语句究竟意味着什么,为什么在编译时知道中断向量表?
答案 0 :(得分:6)
它表示在已知的固定内存地址加载的代码。由于该地址是固定的,因此可以编译跳转直接指向其目标内存地址,无需在加载时使用相对跳转指令或修复任何内容。
答案 1 :(得分:4)
给出的答案是正确的,但还有另一种情况。在嵌入式系统中,当编译ROM时,通常代码的最终地址是相对较早的决定。对于小芯片,设计人员决定将代码的许多部分放置在芯片的存储空间中,并且通常还存在存储器映射的I / O位置。对于ROM,ROM的目标地址将是已知的。
在这种情况下,仍有两种可能性。一个是编译器可以生成直接寻址这些位置的代码(以及C ++帮助中的新放置等功能)。另一个是编译器生成绝对寻址和可重定位代码的混合。在每种情况下,具有“定位器”功能的特殊链接器输出具有绝对寻址的最终代码。在每种情况下,最终地址都是绝对的,不需要运行时修复。