汇编代码和字节码有什么区别?

时间:2009-11-23 11:01:37

标签: assembly bytecode

在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器和其他所有内容的各种差异时,我只是对bytcode和汇编代码之间的区别感到困惑。

特别是介绍这个wikipedia article来描述CIL让我很困惑,因为它似乎可以互换地使用这两个术语(汇编代码和字节码),这让我觉得它们可能意味着完全一样。

7 个答案:

答案 0 :(得分:11)

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

为什么会出现混乱?您无法通过这种方式比较汇编语言与字节代码。当然,字节代码也可以有一个汇编代码 - 这意味着它是一个人类可读的形式,因为“汇编语言”并不意味着它是一个真正的机器 - 但它是一种人类可读形式的某种母语 - 对于处理器,这种本机语言是机器代码 - 但您也可以使用伪代码(如译码)的伪(或解释)机器的汇编代码。

另见: Assembly Language

当然还有进一步的困扰 - 就像你在这里的所有讨论中都可以看到的那样 - 因为IT人员(也是我自己)的措辞往往不严谨。在谈论机器代码时经常使用“汇编语言”。这当然不完全正确,因为汇编语言只是某些机器代码的人类可读形式。

答案 1 :(得分:2)

Assembly code通常用于表示编译为Machine Code后,在虚拟机中由bytecode执行时由CPU执行的代码。

CIL混淆的根源可能与CPU X的machine code可以由在CPU Y上运行的虚拟机解释(例如)有关。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

字节代码是要解释的虚拟机的指令,仍然需要在执行之前转换为机器代码。

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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

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

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

答案 6 :(得分:-1)

字节码主要用于平台独立性,需要虚拟环境才能运行。

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

字节码不是机器/硬件专用的(直接处理硬件),而是汇编代码是机器/硬件专用的。