java字节码和汇编指令_汇编代码和字节码有什么区别?

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

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

如果您可以阅读Andrew Tanenbaums《结构化计算机组织》一书,他将在技术上正确定义这两个术语。

另请参见 这个关于Java的类似问题的答案。

另请参阅stackoverflow.com/questions/17511931/what-exactly-is-bytecode

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

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

也可以看看:

汇编语言

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

IT人员所做的(希望)是从形式中抽象出来。执行机器代码和汇编之间的映射是为了针对目标受众,CPU或人员进行优化。

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

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

请注意,可以设计虚拟机实现来解释任何机器码和/或字节码:它留给开发人员及其期望(和时间);-)

再次:汇编代码不是由真正的CPU执行的。执行的是"机器代码"。汇编代码是机器代码(或在某些情况下:字节码)的人类可读形式。

我记得,自从微控制器和微处理器问世以来,"汇编"一词就以一种人类可读的方式来表示机器代码。

在我看来,Microsoft通过使用相同的单词" Assembly"来命名其dotNET Framework编译器生成的ByteCode引起了混乱。

因此,在这种情况下,我想说的是,"字节码"对Java运行时的含义类似于对Microsoft dotNET运行时环境的"汇编"一词的新用法。

我认为这是错误的吗?

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

"汇编代码"也称为"机器代码",仅作说明。请参阅我的答案中的链接。

当您指的是"汇编代码"时,这当然不是机器代码,因为它必须首先由汇编器"汇编"-结果不是机器代码。

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

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

汇编程序不一定是宏语言。基本形式的汇编器只是机器可读的形式。

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

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

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

不完全正确。汇编代码是机器代码的人类可读形式。机器代码是处理器的本机代码。

@Juergen,您可以混合使用形式和内容,这取决于细节或上下文,它决定了诸如" cpu操作码","机器语言","汇编程序"之类的术语。在OP问题的背景下,它们是同等的恕我直言。

恕我直言,您将事情混为一谈,因为IT人员的措辞通常很松懈,所以事情变得混乱。汇编语言是某些机器语言(也可以是虚拟机-例如字节码)期间的人类可读表示。请参阅我在答案中链接的维基百科文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值