-2

汇编程序生成的可重定位机器代码有什么用?如果生成,那么获取该可重定位机器代码将其转换为绝对代码有什么用?

我看了这个视频。 https://www.youtube.com/watch?v=Qkwj65l_96I&t=309s

在那他提到了绝对和相对机器代码

4

1 回答 1

3

所以可重定位代码使用相对地址?

不,至少不一定。

还是您的意思是“与位置无关的代码”而不是“可重定位代码”?

汇编程序生成的可重定位机器代码有什么用?

从理论上讲,您可以一次组装整个程序。(事实上​​,当我为历史悠久的 CPU 编写汇编程序时,我已经这样做了。)

然而,这有一个主要缺点:

考虑以下代码行:

mov [myVariable], eax

假设变量myVariable位于 address 0x1234560。然后在机器代码中,您将获得以下指令:

mov [0x1234560], eax

现在您修改了项目中的一个文件,该文件由大约 200 个文件组成(这对于汽车行业的项目来说是典型的)。假设您在项目开始时向某个文件添加了一些说明。

这意味着项目中该文件之后的所有元素(文件)的地址都将更改。假设myVariable现在的地址不再是0x1234560but 0x1234870

这意味着我们的代码行现在必须翻译成以下指令:

mov [0x1234870], eax

因此,您项目中的所有文件都必须重新组装!

如果您有可重定位代码,则会生成以下指令:

mov [0], eax

...以及一些信息,地址0必须替换为 的地址myVariable

这意味着当 200 个文件之一发生更改时,只需替换地址。

于 2017-09-04T19:20:35.897 回答