Wandle einen
Beispiel: double a = -3.7d; 0: ldc2_w #2; //double -3.7d 3: dstore_1 float b = (float)a; 4: dload_1 5: d2f 6: fstore_3 Binäre Darstellung: -3.7d = (110000000000 110110011001100110011 0011001100110011001100110011010)b -3.7f = (110000000 110110011001100110011 01)b Die Variable
Wandle einen
Siehe auch Beispiele zu Beispiel: double a = -3.7d; 0: ldc2_w #2; //double -3.7d
3: dstore_1
int b = (int)a; 4: dload_1
5: d2i
6: istore_3
Wandle einen
Siehe auch Beispiele zu
Beispiel: double a = -3.7d; 0: ldc2_w #2; //double -3.7d
3: dstore_1
long b = (long)a; 4: dload_1
5: d2l
6: lstore_3
Addiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und addiert: result = value1' + value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: double a = 1.0; 0: dconst_1
1: dstore_1
double b = 2.0; 2: ldc2_w #2; //double 2.0d
5: dstore_3
double c = a + b; 6: dload_1
7: dload_3
8: dadd
9: dstore 5
Lade einen
Mit Hilfe von arrayref und index
wird ein Beispiel: double[] d = {4.0, 5.0}; 0: iconst_2
1: newarray double
3: dup
4: iconst_0
5: ldc2_w #2; //double 4.0d
8: dastore
9: dup
10: iconst_1
11: ldc2_w #4; //double 5.0d
14: dastore
15: astore_1
double d0 = d[0]; 16: aload_1
17: iconst_0
18: daload
19: dstore_2 Mit
Speichere einen
Auf dem Operandenstapel befinden sich, vor der Ausführung des Befehls, die
Referenz auf das Array, der Index des Elements im Array und der zu speichernde
Vergleiche zwei
Die Werte value1' und value2'
werden aus value1 und value2 durch eine
Value Set Conversion ermittelt. Falls ein Vergleichswert (oder
beide) die Konstante Beispiel: Siehe dazu
Vergleiche zwei
Die Werte value1' und value2'
werden aus value1 und value2 durch eine
Value Set Conversion ermittelt. Falls ein Vergleichswert (oder
beide) die Konstante Beispiel: Siehe dazu
Lege die Beispiel: double d = 0.0; 0: dconst_0
1: dstore_1
Lege die Beispiel: Siehe dazu
Dividiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und die folgende Division wird durchgeführt: result = value1' / value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: double a = 1.0; 0: dconst_1
1: dstore_1
double b = 2.0; 2: ldc2_w #2; //double 2.0d
5: dstore_3
double c = a / b; 6: dload_1
7: dload_3
8: ddiv
9: dstore 5
Lade einen
Der Eintrag value im Array bei diesem Index muss vom
Typ Beispiel: public class Test {
public static void main(String[] args) {
double d1 = args.length; 0: aload_0
1: arraylength
2: i2d
3: dstore_1
double d2 = 0.0; 4: dconst_0
5: dstore_3
double d3 = 1.0; 6: dconst_1
7: dstore 5
double d4 = d1 + d2 + d3; 9: dload_1
10: dload_3
11: dadd
12: dload 5
14: dadd
15: dstore 7
}
} Das Laden der Zahlenwerte aus dem Array der lokalen Variablen übernehmen
zunächst die mit einem Byte codierten JVM-Befehle
Lade den
Der Eintrag im Array bei Index 0 muss vom Typ
Lade den
Der Eintrag im Array bei Index 1 muss vom Typ
Lade den
Der Eintrag im Array bei Index 2 muss vom Typ
Lade den
Der Eintrag im Array bei Index 3 muss vom Typ
Multipliziere zwei
Die beiden obersten Elemente werden vom Stapel genommen und miteinander multipliziert: result = value1' * value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: double a = 1.0; 0: dconst_1
1: dstore_1
double b = 2.0; 2: ldc2_w #2; //double 2.0d
5: dstore_3
double c = a * b; 6: dload_1
7: dload_3
8: dmul
9: dstore 5
Negiere einen
Es gilt: result = -value'. Die
Berechnung gilt, falls value' nicht Beispiel: double a = 1.0; 0: dconst_1
1: dstore_1
double b = -a; 2: dload_1
3: dneg
4: dstore_3
Berechne den
Die beiden obersten Elemente werden vom Stapel genommen und die folgende
Berechnung wird durchgeführt: result = value1' -
(value2' * q).
Die Berechnung gilt, falls value1' und value2'
nicht Beispiel: 10.7 % 4.1 = 2.5 double a = 10.7; 0: ldc2_w #2; //double 10.7d
3: dstore_1
double b = 4.1; 4: ldc2_w #4; //double 4.1d
7: dstore_3
double c = a % b; 8: dload_1
9: dload_3
10: drem
11: dstore 5 Der Inhalt der Variablen
Gebe einen
Der Rückgabewert value wird vom Stapel genommen und an den Aufrufer der Methode zurückgegeben, indem dieser auf den Operandenstapel des Methodenaufrufers gelegt wird. Beispiel: public class Test {
public static double method1() { public static double method1();
Code:
double a = 3.0; 0: ldc2_w #2; //double 3.0d
3: dstore_0
return a; 4: dload_0
} 5: dreturn
public static void main(String[] args) {
double b = method1();
}
}
Speichere einen
Die Beispiel: Siehe
Speichere einen
Die Beispiel: Siehe
Speichere einen
Die Beispiel: Siehe
Speichere einen
Die Beispiel: Siehe
Speichere einen
Die Beispiel: Siehe
Subtrahiere zwei
Die beiden obersten Elemente werden vom Stapel genommen und subtrahiert: result = value1' - value2'. Die Werte value1' und value2' werden aus value1 und value2 durch eine Value Set Conversion ermittelt. Beispiel: double a = 2.0; 0: ldc2_w #2; //double 2.0d
3: dstore_1
double b = 1.0; 4: dconst_1
5: dstore_3
double c = a - b; 6: dload_1
7: dload_3
8: dsub
9: dstore 5
Verdoppele das oberste Element value des Operandenstapels.
Der Typ von value ist aus Typkategorie 1 (interner Typ, siehe auch Tabelle 4.7). Beispiel: public class Test {
long l = 0;
public long test() { public long test();
Code:
return l++; 0: aload_0
1: dup
2: getfield #2; //Field l:J
5: dup2_x1
6: lconst_1
7: ladd
8: putfield #2; //Field l:J
} 11: lreturn
} Zunächst wird mit Hilfe von | value | | objectref | ------------- Durch die Anweisung | value | | objectref | | value | ------------- Der Befehl
Erzeuge ein Duplikat des obersten Elements value1 des Operandenstapels und füge dieses neu erzeugte Element vor dem zweitletzten Element des Stapels ein.
Der Typ von value1 und value2 ist aus Typkategorie 1 (interner Typ, siehe auch Tabelle 4.7). Beispiel: Siehe dazu
Erzeuge ein Duplikat des obersten Elements value1 des Operandenstapels und füge dieses neu erzeugte Element entweder vor dem zweitletzten Element oder vor dem drittletzten Element des Stapels ein, abhängig vom Typ (Typkategorie) der Elemente an der Spitze des Operandenstapels (siehe dazu auch Tabelle 4.7).
1. Möglichkeit: Die Typen der drei obersten Elemente des Operandenstapels sind aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value3, value2, value1 --> ..., value1, value3, value2, value1
Das generierte Duplikat von value1 wird vor dem drittletzten Element des Operandenstapels eingefügt.
2. Möglichkeit: Der Typ des obersten (letzten) Elements des Operandenstapels ist aus Typkategorie 1 (interner Typ) und das vorletzte Element ist aus Typkategorie 2. Operandenstapel: ..., value2, value1 --> ..., value1, value2, value1
Das generierte Duplikat von value1 wird vor dem zweitletzten Element des Operandenstapels eingefügt.
Beispiel: Siehe dazu
Verdoppele entweder die beiden obersten Elemente oder nur das oberste Element des Operandenstapels, abhängig vom Typ (Typkategorie) der Elemente an der Spitze des Stapels (siehe dazu auch Tabelle 4.7).
1. Möglichkeit: Die Typen der zwei obersten Elemente des Operandenstapels sind aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value2, value1 --> ..., value2, value1, value2, value1
Die generierten Duplikate von value1 und value2 werden, entsprechend der Operandenstapel-Beschreibung, dem Stapel hinzugefügt.
2. Möglichkeit: Der Typ des obersten Elements des Operandenstapels ist aus Typkategorie 2. Operandenstapel: ..., value --> ..., value, value
Das generierte Duplikat von value wird zusätzlich auf den Operandenstapel gelegt.
Beispiel: Siehe dazu
Verdoppele entweder die beiden obersten Elemente oder nur das oberste Element des Operandenstapels und füge diese neu erzeugten Elemente bzw. das neu erzeugte Element entweder vor dem drittletzten Element oder vor dem zweitletzten Element des Stapels ein, abhängig vom Typ (Typkategorie) der Elemente an der Spitze des Operandenstapels (siehe dazu auch Tabelle 4.7).
1. Möglichkeit: Die Typen der drei obersten Elemente des Operandenstapels sind aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value3, value2, value1 --> ..., value2, value1, value3, value2, value1
Die generierten Duplikate von value1 und value2 werden, entsprechend der Operandenstapel-Beschreibung, vor dem drittletzten Element des Stapels eingefügt.
2. Möglichkeit: Der Typ des obersten (letzten) Elements des Operandenstapels ist aus Typkategorie 2 und das vorletzte Element ist aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value2, value1 --> ..., value1, value2, value1
Das generierte Duplikat von value1 wird vor dem zweitletzten Element des Operandenstapels eingefügt.
Beispiel: Siehe
Verdoppele entweder die beiden obersten Elemente oder nur das oberste Element des Operandenstapels und füge diese neu erzeugten Elemente bzw. das neu erzeugte Element entweder vor dem viertletzten Element, vor dem drittletzten Element oder vor dem zweitletzten Element des Stapels ein, abhängig vom Typ (Typkategorie) der Elemente an der Spitze des Operandenstapels (siehe dazu auch Tabelle 4.7).
1. Möglichkeit: Die Typen der vier obersten Elemente des Operandenstapels sind aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value4, value3, value2, value1 --> ..., value2, value1, value4, value3, value2, value1
Die generierten Duplikate von value1 und value2 werden, entsprechend der Operandenstapel-Beschreibung, vor dem viertletzten Element des Stapels eingefügt.
2. Möglichkeit: Der Typ des obersten (letzten) Elements des Operandenstapels ist aus Typkategorie 2, das zweitletzte Element und das drittletzte Element sind aus Typkategorie 1 (interner Typ). Operandenstapel: ..., value3, value2, value1 --> ..., value1, value3, value2, value1
Das generierte Duplikat von value1 wird vor dem drittletzten Element des Operandenstapels eingefügt.
3. Möglichkeit: Die Typen der beiden obersten (letzten) Elemente des Operandenstapels sind aus Typkategorie 1 (interner Typ) und das drittletzte Element ist aus Typkategorie 2. Operandenstapel: ..., value3, value2, value1 --> ..., value2 value1, value3, value2, value1
Die generierten Duplikate von value1 und value2 werden, entsprechend der Operandenstapel-Beschreibung, vor dem drittletzten Element des Stapels eingefügt.
4. Möglichkeit: Die Typen der beiden obersten Elemente des Operandenstapels sind aus Typkategorie 2. Operandenstapel: ..., value2, value1 --> ..., value1, value2, value1
Das generierte Duplikat von value1 wird vor dem zweitletzten Element des Operandenstapels eingefügt.
Beispiel: Siehe dazu
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||