bytecode - 字节码和微码有什么区别?

标签 bytecode machine-code instruction-set microcoding

我在维基百科上阅读有关机器代码、微代码和字节码的内容。
看起来微代码比机器代码更底层,而字节码似乎更高级。
我没有真正理解某些东西如何比机器代码更底层,更一般地说,它们与机器代码有何关系。

最佳答案

请参阅维基百科的网页以了解这些术语,在右栏中显示:

源代码是任何代码集合,可能带有注释,使用人类可读的编程语言编写,通常为纯文本。微代码将机器指令、状态机数据或其他输入转换为详细的电路级操作序列。它将机器指令与底层电子设备分开,以便可以更自由地设计和更改指令。

"I didn't realy get how something can be more low-level than machine code, and more generally, how both (bytecode and microcode) of them relate to machine code."

一个类比是,机器代码告诉 CPU 要使用哪个微代码(子例程)。

大约半个世纪前我就知道 Intel 8080背下来后,它对某些人来说是可读的。现代处理器拥有更大的指令集,我认为可以公平地说,大多数人(甚至某些人)都熟悉他们当今最喜欢的处理器的整个机器代码指令集。

对于特定的处理器架构,任何处理器的机器代码大部分都是重叠的,例如,您可以在 AMD 处理器上运行大多数英特尔优化的机器代码(反之亦然),但每个处理器的微代码不交叉兼容。

程序依赖于特定的处理器,并且没有钩子(Hook)来允许根据所使用的处理器选择不同的子例程,通常这些是驱动程序或高度优化的程序旨在尽可能快地执行(或占用最少的内存,或其他权衡) - 这些程序(或驱动程序)通常有多个版本,以适应制造商的 CPU 的特定版本,这尤其常见与 ARM CPUs其中每个内核支持不同的指令集,并且内存有限(因此在嵌入式系统中容纳各种处理器是不切实际的,并且毫无意义)。

以上内容旨在提供易于理解的解释,点击上面的链接可提供更准确和深入的解释。

关于bytecode - 字节码和微码有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201849/

相关文章:

java - 如何合理地确定代码块已被 JIT 编译?

python - STORE_NAME 和 STORE_GLOBAL 在主要范围内是等价的吗?

haskell - GHC 核心为 "bytecode"?

c - 将文件中的 MachineCode 加载到内存中并在 C 中执行——mprotect 失败

assembly - 软件在什么阶段转换为实际的硬件信号?

java - Java字节码中 "GOTO"后面的数字是什么?

assembly - Z80 汇编程序/机器代码中的字节/字/地址是有符号的还是无符号的?

x86-64 - x86_64,i386,ia64和其他此类术语代表什么?

riscv - 为什么 JALR 对偏移量的 LSB 进行编码?

assembly - MOV 和 LEA 有什么区别?