3

我正在阅读 Joshua Engel 的“Java 虚拟机编程”一书,其中作者提供了名为 Oolong 的“JVM 汇编语言”。

据我了解,这是一种编译成 java 字节码的语言,它与原始的 java 字节码非常相似(那里使用了大量的字节码操作码)。如果是这样,那为什么叫汇编语言呢?那是因为它是低级语言并且看起来像字节码吗?

另一个问题是关于茉莉的。正如 Wikipedia 所说,它是“一个免费的开源汇编器,可以使用 Java 虚拟机指令集从人类可读的类似汇编器的语法创建类文件”。Jasmin 文件(也有 .j 扩展名)的语法看起来像 Oolong 的语法。它在那里使用吗?

4

3 回答 3

5

Oolong 是 JVM 的汇编语言。

...为什么叫汇编语言?

您最好在(例如) Wikipedia中查找“汇编语言”的含义。它本质上是一种在“语句”和目标机器的机器指令之间具有直接一对一映射1的语言。如果您将 JVM 视为目标机器,OOlong 匹配此描述。(在 Oolong 语句和 JVM 字节码指令之间存在一对一的映射。)

Jasmin 文件(也有 .j 扩展名)的语法看起来像 Oolong 的语法。它在那里使用吗?

我看到消息来源说 Oolong 的语法是“基于 Jasmin”,但我找不到任何详细描述语法的独立文档。

如果您有兴趣查看乌龙,这个 SO question 详细说明了从哪里下载它:


1 - 我过于简单化了。一些汇编语言支持“宏”,其中单个源语句可以映射到多个目标指令。阅读维基百科参考。

于 2012-06-21T06:53:40.353 回答
0

它使用堆栈、堆栈帧,并具有与真正的汇编语言相对应的字节码。它还有更高级别的指令,可以从内存中检索字段,但不是直接检索。您必须使用 getfield、putfield、invokespecial 等。由于 JVM 不在真正的硬件环境(如 Unix 内核)中运行,它不会像真正的操作系统那样做任何繁重的工作,比如制作进程、担心时间片和服务中断,与设备驱动程序通信等等。我不得不说 JVM 是 Java 和本机操作系统之间的中间件。这正是他们所说的......虚拟机。

于 2013-09-04T23:48:37.390 回答
-1

乌龙茶是中国茶,名字并不重要。请记住,Java 语言是由 java 编译器编译的。Java Bytecode 不是汇编语言,但您可以将其视为(JVM)Java 虚拟机的汇编语言。

于 2012-06-21T06:38:43.120 回答