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

问题描述 投票:24回答:7

虽然在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器以及所有其他内容的含义上的各种差异时,我只是对BYTCODE和汇编代码之间的差异感到困惑。

特别是wikipedia article的描述CIL的介绍使我感到困惑,因为它似乎互换地使用了两个术语(汇编代码和字节码),使我认为它们的含义可能完全相同。

assembly bytecode
7个回答
12
投票
汇编代码通常确实是指人类可理解的机器本地语言(即所谓的机器语言)形式。另一方面,字节码通常是一种可由字节码解释器解释的语言-因此它不是处理器的本地语言。

为什么那么混乱?您无法通过这种方式将汇编语言与字节码进行比较。当然,字节码也可以具有汇编代码-表示其为人类可读的形式,因为“汇编语言”并不一定意味着它适用于真实机器-而是某些本机语言的人类可读的形式-对于处理器,这种本地语言是机器代码-但您也可以使用伪(或解释)机器的汇编代码,例如Bytecode。

另请参见:Assembly Language

当然,更麻烦的是-就像您在此处的所有讨论中所看到的-因为IT人员(也是我自己)在措辞上往往比较松懈。在谈论机器代码时,经常使用“汇编语言”。当然这不是完全正确的,因为汇编语言只是某些机器代码的人类可读形式。


2
投票
[Assembly code通常用于指代在编译为Machine Code后可在虚拟机中的bytecode中由CPU执行的代码。

CIL引起的混乱可能与以下事实有关:CPU X的machine code可以由运行在CPU Y上的虚拟机解释(例如)。

[Note,可以设计虚拟机实现来解释any机器代码和/或字节码:它留给开发人员及其愿望(和时间);-)


2
投票
我记得,自从微控制器和微处理器问世以来,“汇编”一词就以一种人类可读的方式表示机器代码。在我看来,Microsoft使用相同的单词“ Assembly”来命名其dotNET Framework编译器生成的ByteCode引起了混乱。因此,在这种情况下,我想说的是,“字节码”对Java运行时的含义类似于对Microsoft dotNET运行时环境的“汇编”一词的新用法。我猜错了吗?

0
投票
汇编器是一种宏语言。这是用于指示CPU或其他设备的一组指令。它被翻译成可由CPU读取的指令的机器代码。

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


0
投票

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


0
投票
bytecode主要用于平台独立性,需要虚拟环境才能运行。汇编代码是可由cpu直接运行的人类可读机器代码(在较高级别上)。

Bytcode不是特定于机器/硬件的(直接处理硬件),而是汇编代码特定于机器/硬件的。


-2
投票
汇编代码是(表示)您正在编程的处理器的本机代码。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.