目标代码、机器代码和汇编代码之间有什么区别?

你能举例说明它们的不同吗?


当前回答

汇编代码是人类可读的机器代码表示:

mov eax, 77
jmp anywhere

机器代码是纯十六进制代码:

5F 3A E3 F1

我猜你指的是目标文件中的目标代码。这是一种机器代码的变体,不同之处在于跳转是参数化的,这样链接器就可以填充它们。

汇编程序用于将汇编代码转换为机器代码(目标代码)。 链接器链接多个对象(和库)文件以生成可执行文件。

我曾经用纯十六进制写过一个汇编程序(没有汇编程序可用),幸运的是,这是在古老的6502上写的。但我很高兴有奔腾操作码的汇编器。

其他回答

其他答案很好地描述了差异,但你也要求视觉。下面的图表显示了它们从C代码到可执行文件的过程。

程序的源文件被编译成目标文件,然后链接器将这些目标文件链接在一起,生成一个包含您的体系结构的机器代码的可执行文件。

当目标文件和可执行文件被文本编辑器打开时,都以可打印和不可打印字符的形式涉及到体系结构的机器代码。

尽管如此,文件之间的二分法是,目标文件可能包含未解析的外部引用(例如printf)。因此,它可能需要链接到其他对象文件。也就是说,需要解析未解析的外部引用,以便通过与其他目标文件(如C/ c++运行时库)的链接来获得良好的可运行的可执行文件。

这里讨论程序集代码。

汇编语言是一种用于计算机编程的低级语言。它实现了数字机器代码和编程特定CPU架构所需的其他常量的符号表示。”

这里讨论机器代码。

机器代码或机器语言是由计算机中央处理单元直接执行的指令和数据系统。

基本上,汇编代码是一种语言,它由汇编程序(类似于编译器)翻译成目标代码(CPU运行的本机代码)。

8b5d32是机器代码

Mov ebx, [ebp+32h]为组装体

lmylib。所以包含8b5d32是目标代码

汇编是人类可以理解的简短的描述性术语,可以直接转换为CPU实际使用的机器代码。

虽然汇编程序在某种程度上为人类所理解,但它仍然是低水平的。做任何有用的事情都需要大量的代码。

所以我们使用高级语言,如C, BASIC, FORTAN(好吧,我知道我和自己约会过)。当编译这些代码时,会生成目标代码。早期语言以机器语言作为目标代码。

现在的许多语言,如JAVA和c#,通常编译成字节码,这些字节码不是机器代码,而是在运行时容易解释以产生机器代码的字节码。