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

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


当前回答

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

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

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

其他回答

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

还有一点没有提到,那就是有几种不同类型的汇编代码。在最基本的形式中,指令中使用的所有数字都必须指定为常量。例如:

$1902: BD 37 14 : LDA $1437,X
$1905: 85 03    : STA $03
$1907: 85 09    : STA $09
$1909: CA       : DEX
$190A: 10       : BPL $1902

The above bit of code, if stored at address $1900 in an Atari 2600 cartridge, will display a number of lines in different colors fetched from a table which starts at address $1437. On some tools, typing in an address, along with the rightmost part of the line above, would store to memory the values shown in the middle column, and start the next line with the following address. Typing code in that form was much more convenient than typing in hex, but one had to know the precise addresses of everything.

大多数汇编程序允许使用符号地址。上面的代码应该是这样写的:

rainbow_lp:
  lda ColorTbl,x
  sta WSYNC
  sta COLUBK
  dex
  bpl rainbow_lp

汇编程序将自动调整LDA指令,以便它引用映射到标签ColorTbl的任何地址。使用这种类型的汇编器,编写和编辑代码要比手工输入和维护所有地址容易得多。

8b5d32是机器代码

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

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

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

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

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

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

这里讨论程序集代码。

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

这里讨论机器代码。

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

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