34

在寻找源代码、字节码、汇编代码、机器代码、编译器、链接器、解释器、汇编器等所有含义的各种差异时,我只对字节码和汇编代码之间的区别感到困惑。

特别是这篇描述 CIL 的维基百科文章的介绍让我感到困惑,因为它似乎可以互换使用这两个术语(汇编代码和字节码),这让我认为它们的含义可能完全相同。

4

7 回答 7

17

汇编代码通常确实意味着机器本机语言(所谓的机器语言)的人类可读形式。另一方面,字节码通常是一种可以被字节码解释器解释的语言——所以它不是处理器的本地语言。

那为什么会混乱呢?您不能以这种方式比较汇编语言与字节码。当然,字节码也可以有汇编代码——意味着它的人类可读形式,因为“汇编语言”并不一定意味着它适用于真实机器——但它是某种本地语言的人类可读形式——对于处理器,这种本地语言是机器代码——但你也可以拥有伪(或解释)机器的汇编代码,如字节码。

另见: 汇编语言

当然,进一步的痛苦也随之而来——就像您在此处的所有讨论中看到的那样——因为 IT 人员(包括我自己)往往措辞松懈。在谈到机器代码时,经常使用“汇编语言”。这当然不是完全正确的,因为汇编语言只是某些机器代码的人类可读形式。

于 2009-11-23T13:36:19.023 回答
3

我记得自从微控制器和微处理器出现以来,Assembly 这个词就被用来以人类可读的方式指定机器代码。在我看来,微软通过使用相同的词“Assembly”来命名他们的 dotNET Framework 编译器生成的 ByteCode 引起了混乱。因此,在这种情况下,我会说“字节码”对 Java 运行时的含义类似于“Assembly”一词的新用法对 Microsoft dotNET 运行时环境的含义。我认为这是错误的吗?

于 2013-01-13T00:24:28.073 回答
2

Assembly code通常用于指代一旦编译为,就可以在虚拟机中Machine Code由 CPU 执行的代码。bytecode

对 CIL 造成混淆的原因可能与machine codeCPU X 可以由运行在 CPU Y 上的虚拟机解释(例如)有关。

请注意,可以制作虚拟机实现来解释任何机器代码和/或字节码:它留给开发人员和他们的愿望(以及他们手中的时间);-)

于 2009-11-23T11:08:47.667 回答
0

汇编代码可以在具有特定指令集的 CPU 上运行,而字节码可以在可以运行 VM 的任何 CPU 上的虚拟机(例如 Java 运行时)中执行。

于 2009-11-23T13:51:29.633 回答
0

汇编程序是一种宏语言。它是一组用于指示 CPU 或其他设备的指令。它被翻译成机器代码,这些机器代码是 CPU 可读的指令。

字节码是虚拟机要被解释的指令,在执行之前仍然需要翻译成机器码。

于 2009-11-23T11:10:26.697 回答
-1

字节码主要是为了平台独立,需要虚拟环境才能运行。

汇编代码是由 CPU 直接运行的人类可读的机器代码(在更高级别)。

字节码不是机器/硬件特定的(直接处理硬件),但汇编代码是机器/硬件特定的。

于 2020-01-13T03:01:52.003 回答
-2

汇编代码是(代表)您正在编程的处理器的本机代码。

字节码是“命令”的二进制版本的术语,被编译为由解释器或虚拟机执行。

本质上,字节码定义了虚拟处理器的操作码,而汇编由物理处理器的操作码组成。(我们现在将忽略 CPU 内的微码 :-))

于 2009-11-23T11:09:45.293 回答