1

我已经为我在大学的汇编语言课程下载了 Jasmin JVM。我目前遇到一些困难。

如何编写 .j 文件: - 我尝试在 textedit 和 eclipse 中编写文件并将其保存为 .j 文件,然后将其移动到目录中,但它不会让我从终端运行它。

如果有人可以帮助我,或者引导我朝着正确的方向前进,那将不胜感激。

4

1 回答 1

3

Jasmin不是JVM,它是Java字节汇编器。

由于它是作为JAR部署的,因此您需要JRE 1才能使用它,但是安装整个JDK 2可能是更好的选择,因为无论如何您都将使用 Java 进行开发。

要运行它,假设java在您的PATH环境变量中,您可以:

  1. 移动到所在目录jasmin.jar并运行

    java -jar jasmin.jar <input>
    
  2. 编辑您的CLASSPATH环境变量以包含jasmin.jar文件名,然后在任何地方运行上面的命令。

为了充分理解 Jasmin 的指令,您最好阅读一些有关Java 类文件格式3的内容,尤其是有关各个部分的内容:标头、常量池、属性、方法4、字段。
最后你需要学习字节码指令

请注意,Jasmin 不是一个简单的低级汇编程序。
例如,它完全从和 等指令中抽象出常量getXXXinvokeXXX
还有一些指令有不同的名称(例如invokenonvirtual<-> invokespecial),请参阅此处以获取完整列表。

最后,需要扎实的JLSCLASS文件格式知识,特别是泛型和内部类是如何实现的。


一个简单的helloworld.j

.bytecode 51.0                                      ;Java 7
.class public helloworld
.super java/lang/Object



.method public static main([Ljava/lang/String;)V
    .limit stack 2             ;Max stack depth
    .limit locals 1            ;Locals + args = 0 + 1 = 1

    getstatic java/lang/System/out Ljava/io/PrintStream;                  
    ;Stack: System.out object

    ldc "Hello world!"                                                      
    ;Stack: System.out object, string

    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V          
    ;Stack: /

    return
.end method 

请注意,此类没有构造函数。

你可以组装和运行这个程序

java -jar jasmin.jar helloworld.j
java helloworld

1用于执行 Java 应用程序的二进制文件集。
2用于开发 Java 应用程序的二进制文件集,其中包括 JRE。
3维基百科概述。
4方法的代码实际上是前者的一个属性。

于 2016-09-14T09:30:26.783 回答