虽然在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器以及所有其他内容的含义上的各种差异时,我只是对BYTCODE和汇编代码之间的差异感到困惑。
特别是wikipedia article的描述CIL的介绍使我感到困惑,因为它似乎互换地使用了两个术语(汇编代码和字节码),使我认为它们的含义可能完全相同。
为什么那么混乱?您无法通过这种方式将汇编语言与字节码进行比较。当然,字节码也可以具有汇编代码-表示其为人类可读的形式,因为“汇编语言”并不一定意味着它适用于真实机器-而是某些本机语言的人类可读的形式-对于处理器,这种本地语言是机器代码-但您也可以使用伪(或解释)机器的汇编代码,例如Bytecode。
另请参见:Assembly Language
当然,更麻烦的是-就像您在此处的所有讨论中所看到的-因为IT人员(也是我自己)在措辞上往往比较松懈。在谈论机器代码时,经常使用“汇编语言”。当然这不是完全正确的,因为汇编语言只是某些机器代码的人类可读形式。
Assembly code
通常用于指代在编译为Machine Code
后可在虚拟机中的bytecode
中由CPU执行的代码。CIL引起的混乱可能与以下事实有关:CPU X的machine code
可以由运行在CPU Y上的虚拟机解释(例如)。
[Note,可以设计虚拟机实现来解释any机器代码和/或字节码:它留给开发人员及其愿望(和时间);-)
字节码是要解释的虚拟机的指令,在执行之前仍需要将其转换为机器码。
Assembled代码可在具有特定指令集的CPU上运行,而字节码则可以在任何可运行VM的CPU上的虚拟机(例如Java运行时)中执行。
Bytcode不是特定于机器/硬件的(直接处理硬件),而是汇编代码特定于机器/硬件的。
[字节码]是“命令”的二进制版本的术语,该二进制版本被编译为由解释程序或虚拟机执行。
本质上,字节码定义了虚拟处理器的操作码,而汇编则由物理处理器的操作码组成。 (我们现在将忽略CPU内部的微代码:-))