对象代码与机器代码

时间:2014-07-10 16:07:34

标签: assembly compiler-construction operating-system programming-languages

机器代码是程序被翻译成的指令的特定于处理器的二进制表示;来自处理器体系结构指令集的最低级指令。

操作系统是负责通过硬件架构将(((二进制)))指令传递给处理器的代理。

译者所做的最抽象的翻译因此应该是二元指令。

汇编程序接收汇编代码,该代码具有与处理器架构指令(具有二进制表示)一一对应的指令,并生成对象代码。

链接器的产量不再是链接的对象文件,在此阶段不会发生转换。加载模块是对象代码。 I.e。:OS加载到RAM的代码是对象代码(不是指令的二进制表示)。

问题1:二进制表示是否保存在操作系统中?

问题2:目标代码转换为二进制表示的是什么?是操作系统(或安装在其上的语言运行库,如果有的话)?如果它是运行时的工作,那么所有语言实现都有安装的运行时吗?早于OS的代理是否可以完成这项工作?

问题3:加载到RAM的代码真的是对象代码而不是二进制表示吗?或者加载程序是否将目标代码转换为其二进制表示。

1 个答案:

答案 0 :(得分:3)

您误解了目标文件。首先来看看这个问题:

What does an object file contain?

目标文件执行包含目标平台的二进制机器语言指令,因此没有"翻译器"包含在它们中的二进制代码与目标CPU上执行的内容之间的任何类型。

我认为您的困惑源于对象文件包含其他信息,例如符号表和常量。链接器的工作是收集所有这些信息并将其打包成可执行文件。

旁注:这个答案是假设C / C ++的观点。在虚拟机上执行的Java等语言在编译和执行之间都有其他层。