praktikum compilerbau sitzung 9 java bytecodepraktikum compilerbau sitzung 9 – java bytecode prof....
TRANSCRIPT
![Page 1: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/1.jpg)
Praktikum CompilerbauSitzung 9 – Java BytecodeProf. Dr.-Ing. Gregor SneltingMatthias Braun und Sebastian Buchwald
KIT – Universität des Landes Baden-Württemberg undnationales Großforschungszentrum in der Helmholtz-Gemeinschaft
IPD Snelting, Lehrstuhl für Programmierparadigmen
www.kit.edu
![Page 2: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/2.jpg)
1. Letzte Woche
2. Java Bytecode
3. Jasmin Bytecode Assembler
4. Sonstiges
2 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 3: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/3.jpg)
Letzte Woche
Was waren die Probleme?
Hat soweit alles geklappt?
3 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 4: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/4.jpg)
1. Letzte Woche
2. Java Bytecode
3. Jasmin Bytecode Assembler
4. Sonstiges
4 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 5: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/5.jpg)
Java Technologie
Compiler
MyProgram.classMyProgram.java
Java Virtual Machine
Java Virtual Machine
Portable Zwischensprache: Bytecode
Als virtuelle Maschine spezifiziert
Umfangreiche Bibliothek
Laufzeitsystem
The Java Virtual Machine Specificationhttp://java.sun.com/docs/books/jvms/
5 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 6: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/6.jpg)
Virtuelle Maschine - Laufzeitsystem
Heap: Speicher für Objektinstanzen. Getypt, automatischeSpeicherbereinigung (Garbage Collection), gemeinsamerSpeicher für alle Threads.
Method Area: Code für Methoden, nur lesbar.
Runtime Constant Pool: Konstante Daten (Literale,Typinformationen, . . . )Threads: Je Thread:
Program CounterJVM Stack: Activation Records (Stackframes)Native Method Stack: Für Laufzeitsystem (meist in C/C++geschrieben)
6 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 7: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/7.jpg)
Activation Records (Stackframe)
Rücksprungadresse
dynamischer Vorgängerlokale Variablen:
Methodenparameter (Impliziter this Parameter an Position 0) p0,p1, . . .Lokale Variablen v0, v1, . . .
p0 p1 . . . v0 v1 . . .
Operandenstack
7 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 8: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/8.jpg)
Bytecode, Operandenstack
Stackbasierter Bytecode: Operanden und Rückgabewerte liegenauf Operandenstack.
Kürzere Befehlscodierung da Operanden und Ziele nicht explizit.
Maximale Stackgröße pro Methode im .class-File angegeben.
Beispiel:
57...
top
0
2...
top
0
isub (7 − 5 = 2)
8 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 9: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/9.jpg)
Instruktionen
Typen bekannt aus Java
Instruktionen explizit typisiert: iadd (int), fadd (float)Instruktionsklassen:
Lesen/Schreiben von lokalen Variablen (?load, ?store <x>, . . . )Lesen/Schreiben von Feldern (getfield, putfield, . . . )Sprungbefehle (ifeq, ifnull, tableswitch, . . . )Methodenaufrufe (invokevirtual, invokestatic, . . . )Objekterzeugung (new, newarray, ..)Arithmetische Berechnungen (?mul, ?add, . . . )
9 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 10: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/10.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 ? ...
Stack:Befehl:
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 11: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/11.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 ? ...
Stack: ⊥ ? ?
Befehl:
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 12: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/12.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 ? ...
Stack: 1 ⊥ ?
Befehl: iconst_1
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 13: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/13.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: ⊥ ? ?
Befehl: istore_3
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 14: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/14.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: 5 ⊥ ?
Befehl: iload_2
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 15: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/15.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: 6 5 ⊥
Befehl: iload_3
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 16: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/16.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: 30 ⊥ ?
Befehl: imul
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 17: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/17.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: 7 30 ⊥
Befehl: iload_1
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 18: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/18.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 7 5 1 ...
Stack: 37 ⊥ ?
Befehl: iadd
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 19: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/19.jpg)
Beispiel: Ausdruck berechnen
void calc(int x, int y) {int z = 6;x = x + y * z;}
Lokale Variablen:
[0] [1] [2] [3] [4]this x y z ...0x? 37 5 1 ...
Stack: ⊥ ? ?
Befehl: istore_1
// Lade Konstante 1iconst_1// Schreibe in zistore_3// Lade yiload_2// Lade ziload_3// y ∗ zimul// Lade xiload_1// x + (y ∗ z)iadd// Speichere xistore_1
10 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 20: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/20.jpg)
Beispiel: Fibonnaci-Berechnung
public int fib(int steps) {int last0 = 1;int last1 = 1;while (--steps > 0) {int t = last0 + last1;last1 = last0;last0 = t;}return last0;}
iconst_1 // Konstante 1istore_2 // in last0 (Var 2) schreibeniconst_1 // Konstante 1istore_3 // in last1 (Var 3) schreibeniinc 1, −1 // steps (Var 1) dekrementiereniload_1 // steps (Var 1) ladenifle 24 // Falls <=0, springeiload_2 // last0 (Var 2) ladeniload_3 // last1 (Var 3) ladeniadd // addiere (last0+last1)istore 4 // in t (Var 4) schreibeniload_2 // last0 (Var 2) ladenistore_3 // in last1 (Var 3) schreibeniload 4 // t (Var 4 laden)istore_2 // in last0 (Var 2) schreibengoto 4 // springe zum Schleifenbeginniload_2 // last0 (Var 2) ladenireturn // Verlassen mit Wert11 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 21: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/21.jpg)
Methodenaufrufe
1. Bezugsobjekt auf den Stack (falls nicht static)
2. Parameter auf den Stack
3. invokevirtual / invokestatic ausführen:Folgendes passiert vor / nach dem Aufruf automatisch:3.1 Array für Parameter und lokale Variablen anlegen (Größe ist
angegeben)3.2 Returnadresse (Program Counter+1) und alten Framepointer
sichern3.3 Neuen Framepointer setzen3.4 this Pointer und Parameter vom Stack ins Parameter Array
kopieren3.5 Zu Methodenanfang springen und Code ausführen3.6 Returnwert auf den Stack3.7 Alten Framepointer setzen und zur Returnadresse springen
4. Returnwert vom Stack holen und weiterverarbeiten
12 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 22: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/22.jpg)
Beispiel: Methodenaufruf
int bar() {return foo(42);}
int foo(int i) {return i;}
Konstantenpool#2 Method #3.#16#3 class #17#11 Asciz foo#12 Asciz (I)I#16 NameAndType #11:#12#17 Asciz Test
int bar();aload_0bipush 42invokevirtual #2ireturn
int foo(int);iload_1ireturn
13 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 23: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/23.jpg)
Deskriptoren
Namen von Klassen, Feldern und Methoden müssen einemfestgelegtem Schema entsprechen. (siehe JVMS 4.3)
Klassennamen: java.lang.Object→ Ljava/lang/Object;
Typen: int→ I, void→ V, boolean→ Z
Methoden: void foo(int, Object)→foo(ILjava/lang/Object;)VDeskriptor: ( Parametertypen ) RückgabetypIdentifiziert über “Name × Deskriptor”
Felder: boolean b→ b:ZIdentifiziert nur über “Name”
Konstruktoren: Name ist <init>, Static Initializer <clinit>
14 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 24: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/24.jpg)
Objekt erzeugen & initialisieren
1. Objekt anlegen→ Speicher reservieren
2. Objekt initialisieren→ Konstruktor aufrufen
Hinweis: Jede Klasse braucht einen Konstruktor (Defaultkonstruktor)!
class Test {Test foo() {return new Test();}}
#1 java/lang/Object.<init>()V#2 Test#3 Test.<init>()V
Test();aload_0invokespecial #1;return
Test foo();new #2;dupinvokespecial #3;areturn
15 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 25: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/25.jpg)
Beispiel: Array anlegen und daraufzugreifen
public void arr() {int[] array = new int[10];array[7] = 42;
}
bipush 10 // Konstante 10newarray int // array anlegen vom Typ intastore_1 // in variable array (var 1) speichernaload_1 // variable array (var 1) ladenbipush 7 // Konstante 7bipush 42 // Konstante 42iastore // Wert (42) auf array index (7)
// von array("array") schreibenreturn // Aus Funktion zurueckkehren
16 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 26: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/26.jpg)
Beispiel: Auf Feld zugreifen
class field {public field field;public void setNull() {
field = null;}
}
aload_0 // Parameter0 (this) auf Stackaconst_null // null−Referenz auf den Stackputfield field:Lfield; // Schreibe Wert (null)
// auf Feld field:Lfield; von Objekt(this)return // Aus Funktion zurueckkehren
17 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 27: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/27.jpg)
1. Letzte Woche
2. Java Bytecode
3. Jasmin Bytecode Assembler
4. Sonstiges
18 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 28: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/28.jpg)
Jasmin Assembler
Bytecode Assembler:
Assemblersprache für Java Bytecode
Leichter lesbar→ debuggen
Sprungmarken statt Bytecodepositionen
Automatischer Aufbau des Konstantenpools
http://jasmin.sourceforge.net/
Aufruf: java -jar jasmin.jar <Datei>
19 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 29: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/29.jpg)
Jasmin Klasse
Header:
.class <Modifier> <ClassName>
.super <SuperClass>
Methode:
.method <Modifier> <Name and Deskriptor><Code>.end method
Feld:
.field <Modifier> <FieldName> <Descriptor> [= <Value>]
20 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 30: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/30.jpg)
Beispiel: Jasmin Code
.class Test
.super java/lang/Object
.method public <init>()Vaload_0invokenonvirtual java/lang/Object/<init>()Vreturn
.end method
.method foo()LTest;.limit locals 1.limit stack 2new Testdupinvokespecial Test/<init>()Vareturn
.end method
21 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 31: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/31.jpg)
Steuerfluss mit Sprungmarken
void foo(int z) {int i = 0;while (i < z) {i = i + 1;}}
.method foo(I)V.limit locals 2.limit stack 3iconst_0istore_2l1:iload_2iload_1if_icmpge l2iload_2iconst_1iaddistore_2goto l1l2:return.end method
22 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting
![Page 32: Praktikum Compilerbau Sitzung 9 Java BytecodePraktikum Compilerbau Sitzung 9 – Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald KIT – Universität](https://reader035.vdocuments.mx/reader035/viewer/2022081621/61292140a2e73e3312072de2/html5/thumbnails/32.jpg)
Zum Schluss
Anmerkungen?
Probleme?
Fragen?
23 23. Juni 2010 Matthias Braun – Sitzung 9 – Java Bytecode IPD Snelting