汇编程序生成的可重定位机器码有什么用?以及为什么它之后会转化为绝对值?
What is the use of relocatable machine code which is generated by Assembler? and why its get converted into absolute afterwards?
汇编器生成的可重定位机器码有什么用?如果生成,那么获取可重定位机器代码将其转换为绝对代码有什么用?
我看了这个视频。
https://www.youtube.com/watch?v=Qkwj65l_96I&t=309s
他提到了绝对和相对机器码
so the relocatable code uses relative addresses?
没有。至少不一定。
或者您的意思是 "position-independent code" 而不是 "relocatable code"?
What is the use of relocatable machine code which is generated by Assembler?
理论上您可以一次 assemble 整个程序。 (事实上 ,当我为具有历史意义的 CPU 编写 assembler 时,我已经这样做了。)
然而这有一个主要缺点:
考虑以下代码行:
mov [myVariable], eax
假设变量 myVariable
位于地址 0x1234560
。然后在机器代码中你将有以下指令:
mov [0x1234560], eax
现在您修改项目中的一个文件,该文件由大约 200 个文件组成(这对于汽车行业的项目来说很典型)。假设您在项目开始时向某个文件添加了一些说明。
这意味着项目中该文件之后的所有元素(文件)的地址都将更改。假设 myVariable
现在的地址不再是 0x1234560
而是 0x1234870
.
这意味着我们的代码行现在必须翻译成以下指令:
mov [0x1234870], eax
因此,您项目中的所有文件都必须再次 assembled!
如果您有可重定位代码,则会生成以下指令:
mov [0], eax
...以及地址0
必须替换为myVariable
的地址的一些信息。
这意味着只有当 200 个文件中的一个文件发生更改时必须替换地址。
汇编器生成的可重定位机器码有什么用?如果生成,那么获取可重定位机器代码将其转换为绝对代码有什么用?
我看了这个视频。 https://www.youtube.com/watch?v=Qkwj65l_96I&t=309s
他提到了绝对和相对机器码
so the relocatable code uses relative addresses?
没有。至少不一定。
或者您的意思是 "position-independent code" 而不是 "relocatable code"?
What is the use of relocatable machine code which is generated by Assembler?
理论上您可以一次 assemble 整个程序。 (事实上 ,当我为具有历史意义的 CPU 编写 assembler 时,我已经这样做了。)
然而这有一个主要缺点:
考虑以下代码行:
mov [myVariable], eax
假设变量 myVariable
位于地址 0x1234560
。然后在机器代码中你将有以下指令:
mov [0x1234560], eax
现在您修改项目中的一个文件,该文件由大约 200 个文件组成(这对于汽车行业的项目来说很典型)。假设您在项目开始时向某个文件添加了一些说明。
这意味着项目中该文件之后的所有元素(文件)的地址都将更改。假设 myVariable
现在的地址不再是 0x1234560
而是 0x1234870
.
这意味着我们的代码行现在必须翻译成以下指令:
mov [0x1234870], eax
因此,您项目中的所有文件都必须再次 assembled!
如果您有可重定位代码,则会生成以下指令:
mov [0], eax
...以及地址0
必须替换为myVariable
的地址的一些信息。
这意味着只有当 200 个文件中的一个文件发生更改时必须替换地址。