我已经为大学的汇编语言课程下载了Jasmin JVM。我目前遇到了一些困难。
如何编写.j文件: - 我尝试在textedit和eclipse中编写文件并将其保存为.j文件,然后将其移动到目录中,但它不会让我从终端运行它。
如果有人可以帮助我,或者让我朝着正确的方向前进,那将非常感激。
答案 0 :(得分:3)
Jasmin 不 a JVM,它是Java bytecode汇编程序。
由于它部署为JAR,您需要JRE 1 才能使用它,但安装整个JDK 2 可能是一个更好的选择,因为无论如何你都要用Java开发。
要运行它,假设{<1}}位于您的 PATH 环境var中,您可以:
移至java
所在的目录并运行
jasmin.jar
编辑您的 CLASSPATH 环境var以包含java -jar jasmin.jar <input>
文件名,然后在任何地方上面运行上面的命令。
为了完全理解Jasmin的指令,你最好阅读有关Java class file format 3 的内容,特别是关于各个部分:标题,常量池,属性,方法 4 ,字段。
最后,您需要学习byte code instructions。
小心Jasmin不是一个简单的,低级别的汇编程序
例如,它完全从jasmin.jar
和getXXX
等指令中抽象出常量池
此外,某些说明也有不同的名称(例如invokeXXX
&lt; - &gt; invokenonvirtual
),有关完整列表,请参阅here。
最后,必须具备JLS和 CLASS 文件格式的扎实知识,特别是如何实现泛型和内部类。
一个简单的invokespecial
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
1 执行Java应用程序的二进制文件集 2 用于开发Java应用程序的二进制文件集,包括JRE 3 关于Wikipedia的概述 4 方法的代码实际上是前者的属性。