5.2. Einführendes Beispiel: HelloWorld.j
Ausgehend vom folgenden kurzen Java-Quelltext, der zu der Textausgabe
"Hello World!" führt, soll der zugehörige Jasmin-Quelltext angegeben und erläutert
werden.
/* HelloWorld.java */
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Das Jasmin-Listing enthält zunächst einen Kommentar und anschließend die
Direktive .bytecode
, mit der die Version des Klassendateiformats
festgelegt wird, das durch den Assembler Jasmin erzeugt wird.
Aus den beiden darauffolgenden Direktiven .class
und .super
,
wird der Name der Klasse und deren Superklasse bestimmt. Die Superklasse im Beispiel
ist definitionsgemäß die Wurzelklasse der Klassenhierarchie Object
, die
im Gegensatz zum Java-Quelltext innerhalb des Assemblerprogramms explizit angegeben
werden muss. Mit der Direktive .method
wird der Beginn einer Methodendefinition
angekündigt und die Angabe .end method
schließt die Definition ab.
Listing 5.1. HelloWorld.j
. Der Quelltext für den Java-Assembler Jasmin kann
zu einer Klassendatei übersetzt werden, die nach Ausführung den Text "Hello World!"
ausgibt.
.bytecode 50.0
.class public HelloWorld
.super java/lang/Object
.method public <init>()V
.limit stack 1
.limit locals 1
aload_0
invokespecial java/lang/Object/<init>()V
return
.end method
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
Das Assembler-Listing besteht aus zwei Methoden, wobei die
erste Methode den Default-Konstruktor definiert, der den parameterlosen Konstruktor
der Superklasse Object
aufruft. Innerhalb von HelloWorld.java
ist lediglich die main
-Methode enthalten. Der Java-Compiler generiert
jedoch in diesem Fall automatisch einen Default-Konstruktor, dessen Aufgabe es ist
den parameterlosen Konstruktor der Superklasse aufzurufen. Die Klassendatei
HelloWorld.class
codiert also zwei Methoden und der vom Java-Compiler
automatisch erzeugte Konstruktor findet sich daher im Jasmin-Quelltext an entsprechender
Stelle wieder.
Die auszuführenden JVM-Befehle stehen zwichen den Direktiven .mehtod
und .end method
. Innerhalb der beiden Methodendefinitionen sind noch die
Methodendirektiven .limit stack
und .limit locals
enthalten, die die maximale Größe des Operandenstapels bzw. des Arrays der lokalen
Variablen der Methode festlegen. Die Übersetzung des Assembler-Quelltexts in eine
Klassendatei kann durch die Kommandozeile
> java Jasmin HelloWorld.j
erfolgen. Die im aktuellen Verzeichnis erzeugte Datei HelloWorld.class
kann mit der folgenden Anweisung ausgeführt werden:
> java HelloWorld
Es wird der gewünschte Text "Hello World!" auf dem Bildschirm ausgegeben.