Die Architektur der Java VM

SeminarthemenDie Architektur der Java VMI.II.III.IV.• V. Befehlssatz • VI.VII.

V. Befehlssatz

↑ oben

V. 1 Zusammenfassung

Die JVM ist intern insofern streng getypt, dass jeweils nur genau bestimmte JVM-Typen von einem Befehl verarbeitet werden. Daher existieren für mathematische, logische und load & store Operationen seperate typspeziefische Befehle. D.h. es gibt z.B. je einen Befehl um zwei int's float's oder double's zu addieren, suptrahieren usw. . Welche Typen ein Befehl erwartet wird meist durch einen Prefix im Namen des Befehls angedeutet. Etwa addiert iadd int's und fadd float's. Nicht alle Typen der JVM werden so äquivalent unterstützt. Insbesondere für int gibt es noch einige zusätzliche Befehle, die auch für long, float und double nicht vorhanden sind. Ansonsten sind diese 4 jedoch ähnlich gut unterstützt. Die primitiven Typen byte, short und char werden hingegen nicht besonders vielseitig durch eigene Befehle unterstützt. Sie werden für die meisten Operationen von der JVM automatisch zu int erweitert, als solche verarbeitet, und per Typkonvertierung wieder auf ihre ausgangslänge abgeschnitten.

Volle Unterstützung durch Befehlssatz
KategoriePrefixJVM-Typ
1iint
2llong
1ffloat
2ddouble
1areference
Geringe Unterstützung durch Befehlssatz (sonst als int behandelt)
1cchar
1sshort
1bbyte

Die JVM unterteilt ihre Typen zudem in Kategorie 1 und Kategorie 2 Typen. Alle Typen, die durch einen 32-Bit-Wert dargestellt werden konnen gehören zur Kategorie 1 (belegen 1 Element des OS oder LV):

Kategorie 1 = ( int, float, returnAddress, reference, [ byte, short, char ] )

Die wenig unterstützten Typen sind nur impliziet Teil dieser Menge, da sie auf dem Operand-Stack oder in den lokalen Variablen als int abgelegt werden. Zur Kategorie 2 gehören die verbleibenden 64-Bit breiten Typen:

Kategorie 2 = ( long, double )

Diese belegen immer 2 aufeinander folgende Elemente des Operand-Stack oder der lokalen Variablen. Diese gehören untrennbar zusammen, und dürfen von Befehlen entwerder garnicht oder nur als Einheit (Paar) manipuliert werden. Daher existieren von einigen Befehlen zwei Varianten: Je eine für Kategorie 1 und eine für Kategorie 2 Typen. Zum Beispiel entnimmt pop das oberste Kat1-Element vom Operand-Stack, pop2 die obersten 2 Kat1-Elemente oder das oberste Kat2-Element.

Der Befehlssatz der JVM ist so gestalltet, dass direktes Manipulieren eines Programm-Counters nicht möglich ist. Dieser kann mit Sprunganweisungen lediglich inkrementiert oder dekrementiert werden. Die Länge, um welche gesprungen wird, ist dabei bereits im Bytecode festgesetzt. Dadurch kann sichergestellt werden, dass ein Sprung die aktuelle Methoden-Implementierung nicht verlässt und zu einem gültigen Opcode eines Befehls führt.

↑ oben

V. 2 Index

Gruppiert

List der JVM-Befehle gruppiert nach ihrem Verwendungszweck
(Nicht verwendete aber reservierte Opcodes sind nicht enthalten)
VerwendungOpcode Mnemonics
Daten-OPs
"Load & Store"
Stack ⇔ Stack nop, pop, pop2, dup, dup_x1, dup_x2, dup2, dup2_x1, dup2_x2, swap
Konstante ⇒ Stack aconst_null,
iconst_<n> (iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5),
lconst_<n> (lconst_0, lconst_1),
fconst_<n> (fconst_0, fconst_1, fconst_2),
dconst_<n> (dconst_0, dconst_1)
bipush, sipush, ldc, ldc_w, ldc2_w,
Variable ⇒ Stack iload, iload_<n> (iload_0, iload_1, iload_2, iload_3)
lload, lload_<n> (lload_0, lload_1, lload_2, lload_3)
fload, fload_<n> (fload_0, fload_1, fload_2, fload_3)
dload, dload_<n> (dload_0, dload_1, dload_2, dload_3)
aload, aload_<n> (aload_0, aload_1, aload_2, aload_3)
Stack ⇒ Variable istore, istore_<n> (istore_0, istore_1, istore_2, istore_3)
lstore, lstore_<n> (lstore_0, lstore_1, lstore_2, lstore_3)
fstore, fstore_<n> (fstore_0, fstore_1, fstore_2, fstore_3)
dstore, dstore_<n> (dstore_0, dstore_1, dstore_2, dstore_3)
astore, astore_<n> (astore_0, astore_1, astore_2, astore_3)
Arraywert ⇒ Stack iaload, laload, faload, daload, aaload, baload, caload, saload
Stack ⇒ Arraywert iastore, lastore, fastore, dastore, aastore, bastore, castore, sastore
Variablen iinc, wide
Arrays newarray, anewarray, arraylength, multianewarray
Objekte getstatic, putstatic, getfield, putfield, new, checkcast, instanceof
Arithmetik
"ALU"
Ganzzahlen iadd, isub, imul, idiv, irem, ineg,
ladd, lsub, lmul, ldiv, lrem, lneg
Gleitkomma fadd, fsub, fmul, fdiv, frem, fneg,
dadd, dsub, dmul, ddiv, drem, dneg
Bitweise ishl, ishr, iushr, iand, ior, ixor,
lshl, lshr, lushr, land, lor, lxor
Typumwandlung i2l, i2f, i2d, i2b, i2c, i2s,
l2i, l2f, l2d,
f2i, f2l, f2d,
d2i, d2l, d2f
Flusskontrolle Sprünge lcmp, fcmpl, fcmpg, dcmpl, dcmpg,
ifeq, ifne, iflt, ifge, ifgt, ifle,
if_icmpeq, if_icmpne, if_icmplt, if_icmpge, if_icmpgt, if_icmple,
if_acmpeq, if_acmpne, ifnull, ifnonnull,
goto, goto_w
Unterprogramme jsr, ret, jsr_w
Tabellen tableswitch, lookupswitch
Methoden invokevirtual, invokespecial, invokestatic, invokeinterface,
ireturn, lreturn, freturn, dreturn, areturn, return
Exceptions athrow
Threads monitorenter, monitorexit
↑ oben

Alphabet

List der JVM-Befehle alphabetisch sortiert
(Nicht verwendete aber reservierte Opcodes sind nicht enthalten)
OpcodeMnemonic OpcodeMnemonic OpcodeMnemonic OpcodeMnemonic
 50 (x32)aaload  92 (x5c)dup2   7 (x07)iconst_4 136 (x88)l2i
 83 (x53)aastore  93 (x5d)dup2_x1   8 (x08)iconst_5  97 (x61)ladd
  1 (x01)aconst_null  94 (x5e)dup2_x2   2 (x02)iconst_m1  47 (x2f)laload
 25 (x19)aload  90 (x5a)dup_x1 108 (x6c)idiv 127 (x7f)land
 42 (x2a)aload_0  91 (x5b)dup_x2 153 (x99)ifeq  80 (x50)lastore
 43 (x2b)aload_1 141 (x8d)f2d 156 (x9c)ifge 148 (x94)lcmp
 44 (x2c)aload_2 139 (x8b)f2i 157 (x9d)ifgt   9 (x09)lconst_0
 45 (x2d)aload_3 140 (x8c)f2l 158 (x9e)ifle  10 (x0a)lconst_1
189 (xbd)anewarray  98 (x62)fadd 155 (x9b)iflt  18 (x12)ldc
176 (xb0)areturn  48 (x30)faload 154 (x9a)ifne  20 (x14)ldc2_w
190 (xbe)arraylenght  81 (x51)fastore 199 (xc7)ifnonnull  19 (x13)ldc_w
 58 (x3a)astore 150 (x96)fcmpg 198 (xc6)ifnull 109 (x6d)ldiv
 75 (x4b)astore_0 149 (x95)fcmpl 165 (xa5)if_acmpeq  22 (x16)lload
 76 (x4c)astore_1  11 (x0b)fconst_0 166 (xa6)if_acmpne  30 (x1e)lload_0
 77 (x4d)astore_2  12 (x0c)fconst_1 159 (x9f)if_icmpeq  31 (x1f)lload_1
 78 (x4e)astore_3  13 (x0d)fconst_2 162 (xa2)if_icmpge  32 (x20)lload_2
191 (xbf)athrow 110 (x6e)fdiv 163 (xa3)if_icmpgt  33 (x21)lload_3
 51 (x33)baload  23 (x17)fload 164 (xa4)if_icmple 105 (x69)lmul
 84 (x54)bastore  34 (x22)fload_0 161 (xa1)if_icmplt 117 (x75)lneg
 16 (x10)bipush  35 (x23)fload_1 160 (xa0)if_icmpne 171 (xab)lookupswitch
 52 (x34)caload  36 (x24)fload_2 132 (x84)iinc 129 (x81)lor
 85 (x55)castore  37 (x25)fload_3  21 (x15)iload 113 (x71)lrem
192 (xc0)checkcast 106 (x6a)fmul  26 (x1a)iload_0 173 (xad)lreturn
144 (x90)d2f 118 (x76)fneg  27 (x1b)iload_1 121 (x79)lshl
142 (x8e)d2i 114 (x72)frem  28 (x1c)iload_2 123 (x7b)lshr
143 (x8f)d2l 174 (xae)freturn  29 (x1d)iload_3  55 (x37)lstore
 99 (x63)dadd  56 (x38)fstore 104 (x68)imul  63 (x3f)lstore_0
 49 (x31)daload  67 (x43)fstore_0 116 (x74)ineg  64 (x40)lstore_1
 82 (x52)dastore  68 (x44)fstore_1 193 (xc1)instanceof  65 (x41)lstore_2
152 (x98)dcmpg  69 (x45)fstore_2 185 (xb9)invokeinterface  66 (x42)lstore_3
151 (x97)dcmpl  70 (x46)fstore_3 183 (xb7)invokespecial 101 (x65)lsub
 14 (x0e)dconst_0 102 (x66)fsub 184 (xb8)invokestatic 125 (x7d)lushr
 15 (x0f)dconst_1 180 (xb4)getfield 182 (xb6)invokevirtual 131 (x83)lxor
111 (x6f)ddiv 178 (xb2)getstatic 128 (x80)ior 194 (xc2)monitorenter
 24 (x18)dload 167 (xa7)goto 112 (x70)irem 195 (xc3)monitorexit
 38 (x26)dload_0 200 (xc8)goto_w 172 (xac)ireturn 197 (xc5)multianewarray
 39 (x27)dload_1 145 (x91)i2b 120 (x78)ishl 187 (xbb)new
 40 (x28)dload_2 146 (x92)i2c 122 (x7a)ishr 188 (xbc)newarray
 41 (x29)dload_3 135 (x87)i2d  54 (x36)istore   0 (x00)nop
107 (x6b)dmul 134 (x86)i2f  59 (x3b)istore_0  87 (x57)pop
119 (x77)dneg 133 (x85)i2l  60 (x3c)istore_1  88 (x58)pop2
115 (x73)drem 147 (x93)i2s  61 (x3d)istore_2 181 (xb5)putfield
175 (xaf)dreturn  96 (x60)iadd  62 (x3e)istore_3 179 (xb3)putstatic
 57 (x39)dstore  46 (x2e)iaload 100 (x64)isub 169 (xa9)ret
 71 (x47)dstore_0 126 (x7e)iand 124 (x7c)iushr 177 (xb1)return
 72 (x48)dstore_1  79 (x4f)iastore 130 (x82)ixor  53 (x35)saload
 73 (x49)dstore_2   3 (x03)iconst_0 168 (xa8)jsr  86 (x56)sastore
 74 (x4a)dstore_3   4 (x04)iconst_1 201 (xc9)jsr_w  17 (x11)sipush
103 (x67)dsub   5 (x05)iconst_2 138 (x8a)l2d  95 (x5f)swap
 89 (x59)dup   6 (x06)iconst_3 137 (x89)l2f 170 (xaa)tableswitch
↑ oben

Opcode

List der JVM-Befehle sortiert nach ihrem Opcode
(Opcode 186 ist aus historischen Gründen nicht belegt)
OpcodeMnemonic OpcodeMnemonic OpcodeMnemonic OpcodeMnemonic
  0 (x00)nop  64 (x40)lstore_1 128 (x80)ior 192 (xc0)checkcast
  1 (x01)aconst_null  65 (x41)lstore_2 129 (x81)lor 193 (xc1)instanceof
  2 (x02)iconst_m1  66 (x42)lstore_3 130 (x82)ixor 194 (xc2)monitorenter
  3 (x03)iconst_0  67 (x43)fstore_0 131 (x83)lxor 195 (xc3)monitorexit
  4 (x04)iconst_1  68 (x44)fstore_1 132 (x84)iinc 196 (xc4)wide
  5 (x05)iconst_2  69 (x45)fstore_2 133 (x85)i2l 197 (xc5)multianewarray
  6 (x06)iconst_3  70 (x46)fstore_3 134 (x86)i2f 198 (xc6)ifnull
  7 (x07)iconst_4  71 (x47)dstore_0 135 (x87)i2d 199 (xc7)ifnonnull
  8 (x08)iconst_5  72 (x48)dstore_1 136 (x88)l2i 200 (xc8)goto_w
  9 (x09)lconst_0  73 (x49)dstore_2 137 (x89)l2f 201 (xc9)jsr_w
 10 (x0a)lconst_1  74 (x4a)dstore_3 138 (x8a)l2d
 11 (x0b)fconst_0  75 (x4b)astore_0 139 (x8b)f2i
 12 (x0c)fconst_1  76 (x4c)astore_1 140 (x8c)f2l
 13 (x0d)fconst_2  77 (x4d)astore_2 141 (x8d)f2d
 14 (x0e)dconst_0  78 (x4e)astore_3 142 (x8e)d2i
 15 (x0f)dconst_1  79 (x4f)iastore 143 (x8f)d2l
 16 (x10)bipush  80 (x50)lastore 144 (x90)d2f
 17 (x11)sipush  81 (x51)fastore 145 (x91)i2b
 18 (x12)ldc  82 (x52)dastore 146 (x92)i2c
 19 (x13)ldc_w  83 (x53)aastore 147 (x93)i2s
 20 (x14)ldc2_w  84 (x54)bastore 148 (x94)lcmp
 21 (x15)iload  85 (x55)castore 149 (x95)fcmpl
 22 (x16)lload  86 (x56)sastore 150 (x96)fcmpg
 23 (x17)fload  87 (x57)pop 151 (x97)dcmpl
 24 (x18)dload  88 (x58)pop2 152 (x98)dcmpg
 25 (x19)aload  89 (x59)dup 153 (x99)ifeq
 26 (x1a)iload_0  90 (x5a)dup_x1 154 (x9a)ifne
 27 (x1b)iload_1  91 (x5b)dup_x2 155 (x9b)iflt
 28 (x1c)iload_2  92 (x5c)dup2 156 (x9c)ifge
 29 (x1d)iload_3  93 (x5d)dup2_x1 157 (x9d)ifgt
 30 (x1e)lload_0  94 (x5e)dup2_x2 158 (x9e)ifle
 31 (x1f)lload_1  95 (x5f)swap 159 (x9f)if_icmpeq
 32 (x20)lload_2  96 (x60)iadd 160 (xa0)if_icmpne
 33 (x21)lload_3  97 (x61)ladd 161 (xa1)if_icmplt
 34 (x22)fload_0  98 (x62)fadd 162 (xa2)if_icmpge
 35 (x23)fload_1  99 (x63)dadd 163 (xa3)if_icmpgt
 36 (x24)fload_2 100 (x64)isub 164 (xa4)if_icmple
 37 (x25)fload_3 101 (x65)lsub 165 (xa5)if_acmpeq
 38 (x26)dload_0 102 (x66)fsub 166 (xa6)if_acmpne
 39 (x27)dload_1 103 (x67)dsub 167 (xa7)goto
 40 (x28)dload_2 104 (x68)imul 168 (xa8)jsr
 41 (x29)dload_3 105 (x69)lmul 169 (xa9)ret
 42 (x2a)aload_0 106 (x6a)fmul 170 (xaa)tableswitch
 43 (x2b)aload_1 107 (x6b)dmul 171 (xab)lookupswitch
 44 (x2c)aload_2 108 (x6c)idiv 172 (xac)ireturn
 45 (x2d)aload_3 109 (x6d)ldiv 173 (xad)lreturn
 46 (x2e)iaload 110 (x6e)fdiv 174 (xae)freturn
 47 (x2f)laload 111 (x6f)ddiv 175 (xaf)dreturn
 48 (x30)faload 112 (x70)irem 176 (xb0)areturn
 49 (x31)daload 113 (x71)lrem 177 (xb1)return
 50 (x32)aaload 114 (x72)frem 178 (xb2)getstatic
 51 (x33)baload 115 (x73)drem 179 (xb3)putstatic
 52 (x34)caload 116 (x74)ineg 180 (xb4)getfield
 53 (x35)saload 117 (x75)lneg 181 (xb5)putfield
 54 (x36)istore 118 (x76)fneg 182 (xb6)invokevirtual
 55 (x37)lstore 119 (x77)dneg 183 (xb7)invokespecial
 56 (x38)fstore 120 (x78)ishl 184 (xb8)invokestatic
 57 (x39)dstore 121 (x79)lshl 185 (xb9)invokeinterface
 58 (x3a)astore 122 (x7a)ishr 186 (xba)u_n_u_s_e_d
 59 (x3b)istore_0 123 (x7b)lshr 187 (xbb)new
 60 (x3c)istore_1 124 (x7c)iushr 188 (xbc)newarray Reserviert
 61 (x3d)istore_2 125 (x7d)lushr 189 (xbd)anewarray 202 (xca)breakpoint
 62 (x3e)istore_3 126 (x7e)iand 190 (xbe)arraylenght 254 (xfe)impdep1
 63 (x3f)lstore_0 127 (x7f)land 191 (xbf)athrow 255 (xff)impdep2
↑ oben

V.3 Beschreibungsformat der Befehle

Jeder Befehl wird entsprechend dem untenstehenden Beispiel genau beschrieben. Einige Befehle gehören zu Befehlsfamilien. Alle Befehle einer Familie sind prinzipiel funktional identisch. Jeder benennt jedoch impliziet ein anderen konstanten Wert. Hierbei handelt es sich um eine numerische Konstante, oder den Index einer lokalen Variablen des aktuellen Frames. Für eine Befehlsfamilie existiert jeweils nur eine Beschreibung unter der Titel familie_<n>. Je nach Familie kann n verschiedene Werte annehmen. Diese sind unter Formen aufgeführt.

mnemonic

Beispiel:
BefehlKurzbeschreibung des Befehls
Format
mnemonic
operant1
operant2
...
Formen
  • mnemonic = opcode
Operanden-Stack
...
wert1type
wert2type
...
wert3type
BeschreibungEine ausführlichere Beschreibung, welche die Abläufe auf dem Operanden-Stack, Zugriffe auf den Konstanten-Pool oder die durchgeführte Operation und deren Ergebnisse beschreibt.
Exceptions
LinkingException
Beschreibung möglicher Ursachen
RuntimeException
Beschreibung möglicher Ursachen
HinweiseZusätzliche Hinweise, die nicht direkt mit der Operation zusammenhängen, aber in deren Kontext evt. hilfreich sein könnten.

Das Format des Befehls stellt die einzelnen Bytes des Befehls dar, so wie dieser im Bytecode der class-Dateien steht. Teilweise wird dabei eine numerische Konstante oder ein Index in den Laufzeit-Konstanten-Pool aus 2 Operanden-Bytes zusammengesetzt, die dann etwa mit operand1 und operand2 benannt sind. Die meisten Befehle bestehen jedoch ausschließlich aus dem 1. Byte (8 Bit) für den opcode / mnemonic.

In der Zeile Operanden-Stack werden die Auswirkungen des Befehls auf den Operanden-Stack gezeigt. Der Stack baut sich von oben nach unten auf. Der meist als erstes angeführte ...-Eintrag deutet an, dass vor den verwendteten Befehlen beliebige (auch keine) Befehle auf dem Stack vorhanden sein können, die, von der Operation unangetastet, auf dem Stack verbleiben. Die breite eines Stack-Eintrags ist hier proportional richtig zur Breite eines Bytes in der Formatangabe dargestellt. Alle Einträge auf dem Stack sind also 4 Byte = 32 Bit breit. Operanden vom Typ long oder double die 64 Bit breit sind, und daher eigentlich auch 2 Einträge auf dem Stack entsprechen, werden als 1 voller Eintrag gefolgt von einem verkleinerten dargestellt (wie bei wert2), da die 2 Einträge ohnehin untrennbar sind, und nur von entsprechenden Befehlen als ein ganzes behandelt werden können. Durch die hier gewählte logisch Darstellung verdeutlicht sich die Arbeitsweise des Befehls besser. Die Analogie zu gleichen Befehlen für andere Datentypen zeigt sich sofoert.

Der Typ jedes Operanden auf dem Stack ist (sofern dieser von einem bestimmten Typ sein muss) in Klammern hinter dem Operanden angegeben. Unterschieden wird zwischen den einfachen Datentypen int, long, float, double und dem Referenztypen reference. Die Typen byte, short und char werden von der JVM als int auf dem OS verarbeitet. Dazu werden diese automatisch richtig auf eine 32-Bit Integer-Darstellung erweitert. wert3 deutet etwa eine Erweiterung von short zu int an.

Die Reihenfolge der aufgeführten Exceptions gibt an, welche Überprüfung zuerst stattfindet, also eine höhere Priorität besitzt.

↑ oben

V.4 Befehle A-Z

ABCDFGIJLMNPRSTW

A

↑ oben

aaload

BefehlLäd Objekt-reference value aus Zelle index des Arrays arrayref
Format
aaload
Formen
  • aaload = 50 (x32)
Operand-Stack
...
arrayref reference
index int
 
...
value reference
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten ebenfalls vom Typ reference sind. Aus arrayref und index, die vom Stack entnommen werden, wird die reference value an der Position index des Arrays bestimmt, und auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

aastore

BefehlSpeichert reference value in Zelle index des Arrays arrayref
Format
aastore
Formen
  • aastore = 83 (x53)
Operand-Stack
...
arrayref reference
index int
value reference
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Die reference value wird im Array arrayref in Zelle index abgelegt. Dessen Elementtyp muss zuweisungskompatibel mit der Klasse von value sein.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.
ArrayStoreException
value ist nicht zuweisungskompatibel mit dem Elementtyp des durch arrayref referenzierten Arrays.

aconst_null

Befehlnull auf OS
Format
aconst_null
Formen
  • aconst_null = 1 (x01)
Operand-Stack
...
 
...
null
BeschreibungBringt die null Objekt-reference auf den Operand-Stack.
HinweisDie JVM schreibt keinen bestimmten Wert für null vor.

aload

BefehlLäd reference objectref aus lokaler Variable index
Format
aload
index
Formen
  • aload = 25 (x19)
Operand-Stack
...
 
...
objectref reference
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Dies muss dort eine objectref reference enthalten, die auf den Operand-Stack gebracht wird.
Hinweis

Der aload Befehl kann nicht verwendet werden, um einen Wert vom Typ returnAddress auf den OS zu bringen. Diese Asymetrie zum astore Befehl ist beabsichtigt, um direkte Manipulationen des PCs durch den Programmierer zu verhindern.

Der aload Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

iload_<i>

BefehlLäd reference objectref aus lokaler Variable a
Format
iload_<i>
Formen
Operand-Stack
...
 
...
objectref reference
BeschreibungDie reference objectref aus dem Element a (0, 1 , 2, 3) des Arrays der kolaken Variablen wird auf den Operand-Stack abgelegt.
HinweisJeder Befehl der Familie ist äquivalent zum aload <a> Befehl, nur dass der Index a der lokalen Variable hier im Befehl selbst enthalten ist.

anewarray

BefehlNeues 1-dimensionales Array mit reference Elementtyp anlegen
Format
anewarray
indexbyte1
indexbyte2
Formen
  • anewarray = 189 (xbd)
Operand-Stack
...
count int
 
...
arrayref reference

areturn

BefehlRückgabewert reference objectref einer Methode
Format
areturn
Formen
  • areturn = 176 (xb0)
Operand-Stack
...
objectref reference
 
[empty]

arraylenght

BefehlLänge eines Arrays lesen
Format
arraylenght
Formen
  • arraylenght = 190 (xbe)
Operand-Stack
...
arrayref reference
 
...
length int

astore

BefehlSpeichert returnAddress oder reference objectref in lokaler Variable index
Format
astore
index
Formen
  • astore = 58 (x3a)
Operand-Stack
...
objectref reference|returnAddress
 
...
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Die reference bzw. returnAddress objectref wird vom Operand-Stack entnommen und in der lokalen Variable index gespeichert.
HinweisDer astore Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

astore_<a>

BefehlSpeichert refernce oder returnAddress objectref in lokaler Variable a
Format
astore_<a>
Formen
Operand-Stack
...
objectref reference|returnAddress
 
...
BeschreibungDie reference bzw. returnAddress objectref wird vom Operand-Stack entnommen und in der lokalen Variable a (0, 1 , 2, 3) gespeichert.
HinweisJeder Befehl der Familie ist äquivalent zum astore <a> Befehl, nur dass der Index a der lokalen Variable hier im Befehl selbst enthalten ist.

athrow

BefehlException oder Error auslösen
Format
athrow
Formen
  • athrow = 191 (xbf)
Operand-Stack
...
objectref reference
 
objectref reference

B

↑ oben

baload

BefehlLäd byte oder boolean value aus Zelle index des Arrays arrayref
Format
baload
Formen
  • baload = 51 (x33)
Operand-Stack
...
arrayref reference
index int
 
...
value int
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ byte oder boolean sind. Aus arrayref und index, die vom Stack entnommen werden, wird der byte- oder boolean-Wert an der Position index des Arrays bestimmt, auf den int-Wert value erweiteret, und dieser auf den Stack gebracht. Für byte wird das Vorzeichen berücksichtigt. Bei boolean findet eine vorzeichenlose Erweiterung statt.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays
HinweisDie baload-Anweisung wird sowohl für byte- als auch boolean-Arrays verwendet. Suns Implementierung verwendet etwa 8 Bit Werte um ein boolean abzubilden. Diese können aber ebenso als Bitfeld implementiert werden.

bastore

BefehlSpeichert byte oder boolean value in Zelle index des Arrays arrayref
Format
bastore
Formen
  • bastore = 84 (x54)
Operand-Stack
...
arrayref reference
index int
value int
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der int Wert value wird auf byte gekürzt, und im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.
HinweisDer bastore Befehl wird für byte- und boolean-Arrays verwendet, um einen Wert darin zu setzen. Ein boolean-Array kann dabei als byte-Array oder auch als Bitfeld implementiert sein.

bipush

Befehlbyte Konstante bvalue zu int ivalue erweitern und auf OS
Format
bipush
bvalue
Formen
  • bipush = 16 (x10)
Operand-Stack
...
 
...
ivalue int
BeschreibungErweitert die byte Konstante bvalue vorzeichenbehaftet zum int-Wert ivalue und legt diesen auf dem Operand-Stack ab.

C

↑ oben

caload

BefehlLäd char value aus Zelle index des Arrays arrayref
Format
caload
Formen
  • caload = 52 (x34)
Operand-Stack
...
arrayref reference
index int
 
...
value int
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ char sind. Aus arrayref und index, die vom Stack entnommen werden, wird der char-Wert an der Position index des Arrays bestimmt, vorzeichenlos auf den int-Wert value erweitert, und dieser auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

castore

BefehlSpeichert char value in Zelle index des Arrays arrayref
Format
castore
Formen
  • castore = 85 (x55)
Operand-Stack
...
arrayref reference
index int
value int
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der int Wert value wird auf char gekürzt, und im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

checkcast

BefehlPrüfen, ob reference objectref zu einer bestimmten Klasse zuweisungsungskompatiebel ist
Format
checkcast
indexbyte1
indexbyte2
Formen
  • checkcast = 192 (xc0)
Operand-Stack
...
objectref reference
 
...
objectref reference

D

↑ oben

d2f

BefehlTypkonvertierung: double value zu float result
Format
d2f
Formen
  • d2f = 144 (x90)
Operand-Stack
...
value double
 
...
result float

d2i

BefehlTypkonvertierung: double value zu int result
Format
d2i
Formen
  • d2i = 142 (x8e)
Operand-Stack
...
value double
 
...
result int

d2l

BefehlTypkonvertierung: double value zu long result
Format
d2l
Formen
  • d2l = 143 (x8f)
Operand-Stack
...
value double
 
...
result long

dadd

BefehlAddition (double): value1 + value2 = result
Format
dadd
Formen
  • dadd = 99 (x63)
Operand-Stack
...
value1 double
value2 double
 
...
result double
Beschreibung

Entnimmt die double-Werte value1 und value2 vom Operand-Stack und legt die Summe value1 + value2 als Ergebnis result wieder auf diesem ab.

Es gelten die Regeln der IEEE Arithmetik:

  • x ∈ ℜ + NaN = NaN
  • +∞ + -∞ = NaN
  • +∞ + +∞ = +∞, -∞ + -∞ = -∞
  • ±∞ + x ∈ ℜ = ±∞
  • +0 + -0 = +0, ±0 + ±0 = ±0
  • ±0 + x ∈ ℜ = x
  • +x ∈ ℜ + -x ∈ ℜ = +0

Ansonsten wird auf den nächsten double-Wert gerundet (Round to nearest-Modus). Dadurch kann es zu einem Über- oder Unterlauf kommen. Auch dann wird keine Exception ausgelöst.

daload

BefehlLäd double value aus Zelle index des Arrays arrayref
Format
daload
Formen
  • daload = 49 (x31)
Operand-Stack
...
arrayref reference
index int
 
...
value double
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ double sind. Aus arrayref und index, die vom Stack entnommen werden, wird der double-Wert value an der Position index des Arrays bestimmt, und auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

dastore

BefehlSpeichert double value in Zelle index des Arrays arrayref
Format
dastore
Formen
  • dastore = 82 (x52)
Operand-Stack
...
arrayref reference
index int
value double
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der double Wert value wird im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

dcmp<d>

BefehlVergeich (double): value1 == value2 ?
Format
dcmp<d>
Formen
Operand-Stack
...
value1 double
value2 double
 
...
result int

dconst_<d>

Befehldouble-Konstante const_value auf OS
Format
dconst_<d>
Formen
Operand-Stack
...
 
...
const_value double
BeschreibungBringt die double Konstante const_value (0.0d, 1.0d) auf den Operand-Stack.

ddiv

BefehlDivision (double): value1 / value2 = result
Format
ddiv
Formen
  • ddiv = 111 (x6f)
Operand-Stack
...
value1 double
value2 double
 
...
result double

dload

BefehlLäd double value aus lokaler Variable index und index + 1
Format
dload
index
Formen
  • dload = 24 (x18)
Operand-Stack
...
 
...
value double
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der an index und index + 1 enthaltene double-Wert value wird auf den Operand-Stack gebracht.
HinweisDer dload Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

dload_<d>

BefehlLäd double value aus lokaler Variable d und d + 1
Format
dload_<d>
Formen
Operand-Stack
...
 
...
value double
BeschreibungDer double Wert value aus dem Element d (0, 1 , 2, 3) und d + 1 des Arrays der kolaken Variablen wird auf den Operand-Stack abgelegt.
HinweisJeder Befehl der Familie ist äquivalent zum dload <d> Befehl, nur dass der Index d der lokalen Variable hier im Befehl selbst enthalten ist.

dmul

BefehlMultiplikation (double): value1 * value2 = result
Format
dmul
Formen
  • dmul = 107 (x6b)
Operand-Stack
...
value1 double
value2 double
 
...
result double

dneg

BefehlNegation (double): -value = result
Format
dneg
Formen
  • dneg = 119 (x77)
Operand-Stack
...
value double
 
...
result double

drem

BefehlDivisionsrest (double): value1 % value2 = result
Format
drem
Formen
  • drem = 115 (x73)
Operand-Stack
...
value1 double
value2 double
 
...
result double

dreturn

BefehlRückgabewert double value einer Methode
Format
dreturn
Formen
  • dreturn = 175 (xaf)
Operand-Stack
...
value double
 
[empty]

dstore

BefehlSpeichert double value in lokalen Variablen index und index + 1
Format
dstore
index
Formen
  • dstore = 57 (x39)
Operand-Stack
...
value double
 
...
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der double Wert value wird vom Operand-Stack entnommen und in den lokalen Variablen index und index + 1 gespeichert.
HinweisDer dstore Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

dstore_<d>

BefehlSpeichert double value in lokalen Variablen d und d + 1
Format
dstore_<d>
Formen
Operand-Stack
...
value double
 
...
BeschreibungDer double Wert value wird vom Operand-Stack entnommen und in den lokalen Variablen d (0, 1 , 2, 3) und d + 1 gespeichert.
HinweisJeder Befehl der Familie ist äquivalent zum dstore <d> Befehl, nur dass der Index d der lokalen Variable hier im Befehl selbst enthalten ist.

dsub

BefehlSubtraktion (double): value1 - value2 = result
Format
dsub
Formen
  • dsub = 103 (x67)
Operand-Stack
...
value1 double
value2 double
 
...
result double

dup

BefehlVerdoppelt das oberste Element des OS
Format
dup
Formen
  • dup = 89 (x59)
Operand-Stack
...
value
 
...
value
value
BeschreibungErstellt eine Kopie des obersten Elements des Operand-Stacks und legt diese darauf ab. Das Element value muss von einem Kategorie 1 Typ (int, float, returnAddress oder reference) sein.

dup2

BefehlVerdoppelt die obersten 2 Elemente des OS
Format
dup2
Formen
  • dup2 = 92 (x5c)
Operand-Stack
...
value2
value1
 
...
value2
value1
value2
value1
BeschreibungErstellt eine Kopie der obersten zwei Elemente des Operand-Stacks und legt beide nochmals darauf ab. value1 und value2 können beides Elemente der Kategorie 1 (int, float, returnAddress oder reference) sein, oder aber zusammen ein Element der Kategorie 2 (long oder double) bilden.

dup2_x1

BefehlKopiert die obersten 2 Element des OS und fügt dies 3 Elemente darüber ein.
Format
dup2_x1
Formen
  • dup2_x1 = 93 (x5d)
Operand-Stack
...
value3
value2
value1
 
...
value2
value1
value3
value2
value1
BeschreibungErstellt eine Kopie der obersten beiden Elemente des Operand-Stacks und fügt diese drei Elemente davor auf dem Operand-Stack ein. value3 muss ein Element der Kategorie 1 (int, float, returnAddress oder reference) sein. Die kopierten Elemente value1 und value2 können entweder beide ebenso zur Kategorie 1 gehören oder aber zusammen ein Element der Kategorie 2 (long oder double) bilden.

dup2_x2

BefehlKopiert die obersten 2 Element des OS und fügt dies 4 Elemente darüber ein.
Format
dup2_x2
Formen
  • dup2_x2 = 94 (x5e)
Operand-Stack
...
value4
value3
value2
value1
 
...
value2
value1
value4
value3
value2
value1
BeschreibungErstellt eine Kopie der obersten beiden Elemente des Operand-Stacks und fügt diese drei Elemente davor auf dem Operand-Stack ein. Die Paare value3 und value4 und value1 und value2 können entweder aus zwei Element der Kategorie 1 (int, float, returnAddress oder reference) bestehen oder jedes Paar für sich zusammen ein Element der Kategorie 2 (long oder double) bilden.

dup_x1

BefehlKopiert das oberste Element des OS und fügt dies 2 Elemente darüber ein.
Format
dup_x1
Formen
  • dup_x1 = 90 (x5a)
Operand-Stack
...
value2
value1
 
...
value1
value2
value1
BeschreibungErstellt eine Kopie des obersten Elements des Operand-Stacks und fügt diese zwei Elemente davor auf dem Operand-Stack ein. value1 und value2 müssen Elemente der Kategorie 1 (int, float, returnAddress oder reference) sein.

dup_x2

BefehlKopiert das oberste Element des OS und fügt dies 3 Elemente darüber ein.
Format
dup_x2
Formen
  • dup_x2 = 91 (x5b)
Operand-Stack
...
value3
value2
value1
 
...
value1
value3
value2
value1
BeschreibungErstellt eine Kopie des obersten Elements des Operand-Stacks und fügt diese drei Elemente davor auf dem Operand-Stack ein. value1 muss ein Elemente der Kategorie 1 (int, float, returnAddress oder reference) sein. value2 und value 3 können ebenfalls beides Elemente der Kategorie 1 sein, oder aber zusammen ein Element der Kategorie 2 (long oder double) bilden.

F

↑ oben

f2d

BefehlTypkonvertierung: float value zu double result
Format
f2d
Formen
  • f2d = 141 (x8d)
Operand-Stack
...
value float
 
...
result double

f2i

BefehlTypkonvertierung: float value zu int result
Format
f2i
Formen
  • f2i = 139 (x8b)
Operand-Stack
...
value float
 
...
result int

f2l

BefehlTypkonvertierung: float value zu long result
Format
f2l
Formen
  • f2l = 140 (x8c)
Operand-Stack
...
value float
 
...
result long

fadd

BefehlAddition (float): value1 + value2 = result
Format
fadd
Formen
  • fadd = 98 (x62)
Operand-Stack
...
value1 float
value2 float
 
...
result float
Beschreibung

Entnimmt die float-Werte value1 und value2 vom Operand-Stack und legt ddie Summe value1 + value2 als Ergebnis result wieder auf diesem ab.

Es gelten die Regeln der IEEE Arithmetik:

  • x ∈ ℜ + NaN = NaN
  • +∞ + -∞ = NaN
  • +∞ + +∞ = +∞, -∞ + -∞ = -∞
  • ±∞ + x ∈ ℜ = ±∞
  • +0 + -0 = +0, ±0 + ±0 = ±0
  • ±0 + x ∈ ℜ = x
  • +x ∈ ℜ + -x ∈ ℜ = +0

Ansonsten wird auf den nächsten float-Wert gerundet (Round to nearest-Modus). Dadurch kann es zu einem Über- oder Unterlauf kommen. Auch dann wird keine Exception ausgelöst.

faload

BefehlLäd float value aus Zelle index des Arrays arrayref
Format
faload
Formen
  • faload = 48 (x30)
Operand-Stack
...
arrayref reference
index int
 
...
value float
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ float sind. Aus arrayref und index, die vom Stack entnommen werden, wird der float-Wert value an der Position index des Arrays bestimmt, und auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

fastore

BefehlSpeichert float value in Zelle index des Arrays arrayref
Format
fastore
Formen
  • fastore = 81 (x51)
Operand-Stack
...
arrayref reference
index int
value float
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der float Wert value wird im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

fcmp<f>

BefehlVergeich (float): value1 == value2 ?
Format
fcmp<f>
Formen
Operand-Stack
...
value1 float
value2 float
 
...
result int

fconst_<f>

Befehlfloat-Konstante const_value auf OS
Format
fconst_<f>
Formen
Operand-Stack
...
 
...
const_value float
BeschreibungBringt die float Konstante const_value (0.0f, 1.0f, 2.0f) auf den Operand-Stack.

fdiv

BefehlDivision (float): value1 / value2 = result
Format
fdiv
Formen
  • fdiv = 110 (x6e)
Operand-Stack
...
value1 float
value2 float
 
...
result float

fload

BefehlLäd float value aus lokaler Variable index
Format
fload
index
Formen
  • fload = 23 (x17)
Operand-Stack
...
 
...
value float
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der an index enthaltene float-Wert value wird auf den Operand-Stack gebracht.
HinweisDer fload Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

fload_<f>

BefehlLäd float value aus lokaler Variable f
Format
fload_<f>
Formen
Operand-Stack
...
 
...
value float
BeschreibungDer float Wert value aus dem Element f (0, 1 , 2, 3) des Arrays der kolaken Variablen wird auf den Operand-Stack abgelegt.
HinweisJeder Befehl der Familie ist äquivalent zum fload <f> Befehl, nur dass der Index f der lokalen Variable hier im Befehl selbst enthalten ist.

fmul

BefehlMultiplikation (float): value1 * value2 = result
Format
fmul
Formen
  • fmul = 106 (x6a)
Operand-Stack
...
value1 float
value2 float
 
...
result float

fneg

BefehlNegation (float): -value = result
Format
fneg
Formen
  • fneg = 118 (x76)
Operand-Stack
...
value float
 
...
result float

frem

BefehlDivisionsrest (float): value1 % value2 = result
Format
frem
Formen
  • frem = 114 (x72)
Operand-Stack
...
value1 float
value2 float
 
...
result float

freturn

BefehlRückgabewert float value einer Methode
Format
freturn
Formen
  • freturn = 174 (xae)
Operand-Stack
...
value float
 
[empty]

fstore

BefehlSpeichert float value in lokaler Variable index
Format
fstore
index
Formen
  • fstore = 56 (x38)
Operand-Stack
...
value float
 
...
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der float Wert value wird vom Operand-Stack entnommen und in der lokalen Variable index gespeichert.
HinweisDer fstore Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

fstore_<f>

BefehlSpeichert float value in lokaler Variable f
Format
fstore_<f>
Formen
Operand-Stack
...
value float
 
...
BeschreibungDer float Wert value wird vom Operand-Stack entnommen und in der lokalen Variable f (0, 1 , 2, 3) gespeichert.
HinweisJeder Befehl der Familie ist äquivalent zum fstore <f> Befehl, nur dass der Index f der lokalen Variable hier im Befehl selbst enthalten ist.

fsub

BefehlSubtraktion (float): value1 - value2 = result
Format
fsub
Formen
  • fsub = 102 (x66)
Operand-Stack
...
value1 float
value2 float
 
...
result float

G

↑ oben

getfield

BefehlLesen eines Feldes der Instanz objectref
Format
getfield
indexbyte1
indexbyte2
Formen
  • getfield = 180 (xb4)
Operand-Stack
...
objectref reference
 
...
value

getstatic

BefehlLesen eines static Feldes einer Klasse
Format
getstatic
indexbyte1
indexbyte2
Formen
  • getstatic = 178 (xb2)
Operand-Stack
...
 
...
value

goto

BefehlUnbedingter Sprung
Format
goto
branchbyte1
branchbyte2
Formen
  • goto = 167 (xa7)
Operand-Stack
...
 
...

goto_w

BefehlUnbedingter Sprung (weitreichender Index)
Format
goto_w
branchbyte1
branchbyte2
branchbyte3
branchbyte4
Formen
  • goto_w = 200 (xc8)
Operand-Stack
...
 
...

I

↑ oben

i2b

BefehlTypkonvertierung: int value zu byte result
Format
i2b
Formen
  • i2b = 145 (x91)
Operand-Stack
...
value int
 
...
result int

i2c

BefehlTypkonvertierung: int value zu char result
Format
i2c
Formen
  • i2c = 146 (x92)
Operand-Stack
...
value int
 
...
result int

i2d

BefehlTypkonvertierung: int value zu double result
Format
i2d
Formen
  • i2d = 135 (x87)
Operand-Stack
...
value int
 
...
result double

i2f

BefehlTypkonvertierung: int value zu float result
Format
i2f
Formen
  • i2f = 134 (x86)
Operand-Stack
...
value int
 
...
result float

i2l

BefehlTypkonvertierung: int value zu long result
Format
i2l
Formen
  • i2l = 133 (x85)
Operand-Stack
...
value int
 
...
result long

i2s

BefehlTypkonvertierung: int value zu short result
Format
i2s
Formen
  • i2s = 147 (x93)
Operand-Stack
...
value int
 
...
result int

iadd

BefehlAddition (int): value1 + value2 = result
Format
iadd
Formen
  • iadd = 96 (x60)
Operand-Stack
...
value1 int
value2 int
 
...
result int
Beschreibung

Entnimmt die int-Werte value1 und value2 vom Operand-Stack und legt die Summe value1 + value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Addition zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Summe von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

iaload

BefehlLäd int value aus Zelle index des Arrays arrayref
Format
iaload
Formen
  • iaload = 46 (x2e)
Operand-Stack
...
arrayref reference
index int
 
...
value int
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ int sind. Aus arrayref und index, die vom Stack entnommen werden, wird der int-Wert value an der Position index des Arrays bestimmt, und auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

iand

BefehlLogisches UND (int): value1 & value2 = result
Format
iand
Formen
  • iand = 126 (x7e)
Operand-Stack
...
value1 int
value2 int
 
...
result int

iastore

BefehlSpeichert int value in Zelle index des Arrays arrayref
Format
iastore
Formen
  • iastore = 79 (x4f)
Operand-Stack
...
arrayref reference
index int
value int
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der int Wert value wird im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

iconst_<i>

Befehlint-Konstante const_value auf OS
Format
iconst_<i>
Formen
Operand-Stack
...
 
...
const_value int
BeschreibungBringt die int Konstante const_value (-1, 0, 1, 2, 3, 4, 5) auf den Operand-Stack.
HinweisJeder Befehl der Familie ist äqivalent zum bipush <i> Befehl, nur dass der Wert i impliziet im Befehl enthalten ist.

idiv

BefehlDivision (int): value1 / value2 = result
Format
idiv
Formen
  • idiv = 108 (x6c)
Operand-Stack
...
value1 int
value2 int
 
...
result int
Beschreibung

Entnimmt die int-Werte value1 und value2 vom Operand-Stack und legt den Quotient value1 / value2 als Ergebnis result wieder auf diesem ab.

Eine int Division rundet gegen 0.

Exceptions
ArithmeticException
Der Divisor value2 ist 0

if<i>

BefehlSprung wenn Bedingung i auf int Vergleich value == 0 zutrifft
Format
if<i>
branchbyte1
branchbyte2
Formen
Operand-Stack
...
value int
 
...

ifnonnull

BefehlSprung wenn reference value nicht null ist
Format
ifnonnull
branchbyte1
branchbyte2
Formen
  • ifnonnull = 199 (xc7)
Operand-Stack
...
value reference
 
...

ifnull

BefehlSprung wenn reference value null ist
Format
ifnull
branchbyte1
branchbyte2
Formen
  • ifnull = 198 (xc6)
Operand-Stack
...
value reference
 
...

if_acmp<i>

BefehlSprung wenn Bedingung i auf reference Vergleich value1 == value2 zutrifft
Format
if_acmp<i>
branchbyte1
branchbyte2
Formen
Operand-Stack
...
value1 reference
value2 reference
 
...

if_icmp<i>

BefehlSprung wenn Bedingung i auf int Vergleich value1 == value2 zutrifft
Format
if_icmp<i>
branchbyte1
branchbyte2
Formen
Operand-Stack
...
value1 int
value2 int
 
...

iinc

BefehlLokale Variable index um Konstante value inkementieren
Format
iinc
index
value
Formen
  • iinc = 132 (x84)
Operand-Stack
...
 
...

iload

BefehlLäd int value aus lokaler Variable index
Format
iload
index
Formen
  • iload = 21 (x15)
Operand-Stack
...
 
...
value int
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der an index enthaltene int-Wert value wird auf den Operand-Stack gebracht.
HinweisDer iload Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

iload_<i>

BefehlLäd int value aus lokaler Variable i
Format
iload_<i>
Formen
Operand-Stack
...
 
...
value int
BeschreibungDer int Wert value aus dem Element i (0, 1 , 2, 3) des Arrays der kolaken Variablen wird auf den Operand-Stack abgelegt.
HinweisJeder Befehl der Familie ist äquivalent zum iload <i> Befehl, nur dass der Index i der lokalen Variable hier im Befehl selbst enthalten ist.

imul

BefehlMultiplikation (int): value1 * value2 = result
Format
imul
Formen
  • imul = 104 (x68)
Operand-Stack
...
value1 int
value2 int
 
...
result int
Beschreibung

Entnimmt die int-Werte value1 und value2 vom Operand-Stack und legt das Produkt value1 * value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Multiplikation zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Differnz von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

ineg

BefehlNegation (int): -value = result
Format
ineg
Formen
  • ineg = 116 (x74)
Operand-Stack
...
value int
 
...
result int
Beschreibung

Entnimmt den int-Wert value vom Operand-Stack und legt -value als Ergebnis result wieder auf diesem ab.

Bei int-Werten entspricht die Negation der Subtraktion von 0.

Es gilt: int x : -x = (~x) + 1.

instanceof

BefehlPrüfen, ob reference objectref zu einer bestimmten Klasse zuweisungsungskompatiebel ist
Format
instanceof
indexbyte1
indexbyte2
Formen
  • instanceof = 193 (xc1)
Operand-Stack
...
objectref reference
 
...
result int

invokeinterface

BefehlAuf einer Interface-Methode für Instanz objectref
Format
invokeinterface
indexbyte1
indexbyte2
count
0
Formen
  • invokeinterface = 185 (xb9)
Operand-Stack
...
objectref reference
[arg1]
[arg2...]
 
...

invokespecial

BefehlAuf einer Methode für Instanz objectref, besondere Behandlung für super, private und Initialiserungsmethoden
Format
invokespecial
indexbyte1
indexbyte2
Formen
  • invokespecial = 183 (xb7)
Operand-Stack
...
objectref reference
[arg1]
[arg2...]
 
...

invokestatic

BefehlAuf einer Klassen-Methode (static)
Format
invokestatic
indexbyte1
indexbyte2
Formen
  • invokestatic = 184 (xb8)
Operand-Stack
...
[arg1]
[arg2...]
 
...

invokevirtual

BefehlAuf einer Methode für Instanz objectref, klassenabhängiges Binden
Format
invokevirtual
indexbyte1
indexbyte2
Formen
  • invokevirtual = 182 (xb6)
Operand-Stack
...
objectref reference
[arg1]
[arg2...]
 
...

ior

BefehlLogisches ODER (int): value1 | value2 = result
Format
ior
Formen
  • ior = 128 (x80)
Operand-Stack
...
value1 int
value2 int
 
...
result int

irem

BefehlDivisionsrest (int): value1 % value2 = result
Format
irem
Formen
  • irem = 112 (x70)
Operand-Stack
...
value1 int
value2 int
 
...
result int
BeschreibungEntnimmt die int-Werte value1 und value2 vom Operand-Stack und legt den Divisionsrest value1 - (value1 / value2) * value2 als Ergebnis result wieder auf diesem ab.
Exceptions
ArithmeticException
Der Divisor value2 ist 0

ireturn

BefehlRückgabewert int value einer Methode
Format
ireturn
Formen
  • ireturn = 172 (xac)
Operand-Stack
...
value int
 
[empty]

ishl

BefehlSchieben nach links (int): value1 << value2' = result
Format
ishl
Formen
  • ishl = 120 (x78)
Operand-Stack
...
value1 int
value2 int
 
...
result int
BeschreibungEntnimmt value1 und value2 vom Operand-Stack, schiebt den int Wert value1 um s Stellen nach links, und legt das Ergebnis result wieder auf dem OS ab. s ist durch die niederwertisten 5 Bit von value2 bestimmt.
Hinweis

Die Operation entspricht: value1 * 2s.

Die Anzahl der Stellen s, um die geschoben wird, liegt immer zwischen 0 und 31 (inklusive), als ob value2 zunächst mit 0x1F AND-maskiert wurde.

ishr

BefehlArithmetisches Schieben nach rechts (int): value1 >> value2' = result
Format
ishr
Formen
  • ishr = 122 (x7a)
Operand-Stack
...
value1 int
value2 int
 
...
result int
BeschreibungEntnimmt value1 und value2 vom Operand-Stack, schiebt den int Wert value1 um s Stellen nach rechts, und legt das Ergebnis result wieder auf dem OS ab. s ist durch die niederwertisten 5 Bit von value2 bestimmt.
Hinweis

Die Operation entspricht value1 / 2s.

Die Anzahl der Stellen s, um die geschoben wird, liegt immer zwischen 0 und 31 (inklusive), als ob value2 zunächst mit 0x1F AND-maskiert wurde.

istore

BefehlSpeichert int value in lokaler Variable index
Format
istore
index
Formen
  • istore = 54 (x36)
Operand-Stack
...
value int
 
...
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der int Wert value wird vom Operand-Stack entnommen und in der lokalen Variable index gespeichert.
HinweisDer istore Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

istore_<i>

BefehlSpeichert int value in lokaler Variable i
Format
istore_<i>
Formen
Operand-Stack
...
value int
 
...
BeschreibungDer int Wert value wird vom Operand-Stack entnommen und in der lokalen Variable i (0, 1 , 2, 3) gespeichert.
HinweisJeder Befehl der Familie ist äquivalent zum istore <i> Befehl, nur dass der Index i der lokalen Variable hier im Befehl selbst enthalten ist.

isub

BefehlSubtraktion (int): value1 - value2 = result
Format
isub
Formen
  • isub = 100 (x64)
Operand-Stack
...
value1 int
value2 int
 
...
result int
Beschreibung

Entnimmt die int-Werte value1 und value2 vom Operand-Stack und legt die Differenz value1 - value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Subtraktion zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Differnz von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

iushr

BefehlLogisches Schieben nach rechts (int): value1 >>> value2' = result
Format
iushr
Formen
  • iushr = 124 (x7c)
Operand-Stack
...
value1 int
value2 int
 
...
result int

ixor

BefehlLogisches XOR (int): value1 ^ value2 = result
Format
ixor
Formen
  • ixor = 130 (x82)
Operand-Stack
...
value1 int
value2 int
 
...
result int

J

↑ oben

jsr

BefehlUnterprogrammsprung
Format
jsr
branchbyte1
branchbyte2
Formen
  • jsr = 168 (xa8)
Operand-Stack
...
 
...
address returnAddress

jsr_w

BefehlUnterprogrammsprung (weitreichender Index)
Format
jsr_w
branchbyte1
branchbyte2
branchbyte3
branchbyte4
Formen
  • jsr_w = 201 (xc9)
Operand-Stack
...
 
...
address returnAddress

L

↑ oben

l2d

BefehlTypkonvertierung: long value zu double result
Format
l2d
Formen
  • l2d = 138 (x8a)
Operand-Stack
...
value long
 
...
result double

l2f

BefehlTypkonvertierung: long value zu float result
Format
l2f
Formen
  • l2f = 137 (x89)
Operand-Stack
...
value long
 
...
result float

l2i

BefehlTypkonvertierung: long value zu int result
Format
l2i
Formen
  • l2i = 136 (x88)
Operand-Stack
...
value long
 
...
result int

ladd

BefehlAddition (long): value1 + value2 = result
Format
ladd
Formen
  • ladd = 97 (x61)
Operand-Stack
...
value1 long
value2 long
 
...
result long
Beschreibung

Entnimmt die long-Werte value1 und value2 vom Operand-Stack und legt die Summe value1 + value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Addition zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Summe von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

laload

BefehlLäd long value aus Zelle index des Arrays arrayref
Format
laload
Formen
  • laload = 47 (x2f)
Operand-Stack
...
arrayref reference
index int
 
...
value long
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ long sind. Aus arrayref und index, die vom Stack entnommen werden, wird der long-Wert value an der Position index des Arrays bestimmt, und auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

land

BefehlLogisches UND (long): value1 & value2 = result
Format
land
Formen
  • land = 127 (x7f)
Operand-Stack
...
value1 long
value2 long
 
...
result long

lastore

BefehlSpeichert long value in Zelle index des Arrays arrayref
Format
lastore
Formen
  • lastore = 80 (x50)
Operand-Stack
...
arrayref reference
index int
value long
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der long Wert value wird im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

lcmp

BefehlVergeich (long): value1 == value2 ?
Format
lcmp
Formen
  • lcmp = 148 (x94)
Operand-Stack
...
value1 long
value2 long
 
...
result int

lconst_<l>

Befehllong-Konstante const_value auf OS
Format
lconst_<l>
Formen
Operand-Stack
...
 
...
const_value long
BeschreibungBringt die long Konstante const_value (0L, 1L) auf den Operand-Stack.

ldc

BefehlKonstante aus RCP #index auf OS
Format
ldc
index
Formen
  • ldc = 18 (x12)
Operand-Stack
...
 
...
value
Beschreibung

Der index-Wert wird als vorzeichenloser Indexwert in den RCP der aktuellen Klasse verwendet, der dort eine Konstante vom Typ int, float, String oder eine symbolische Referenz auf eine Klasse enthält.

Enthält der RCP an index eine int oder float Konstante wird deren numerischer Wert value auf den Operand-Stack abgelegt.

Ist an index eine String-Konstante enthalten wird eine reference darauf als value auf dem Operand-Stack gebracht.

Ansonsten muss es sich beim Eintrag index um eine symbolische Referenz einer Klasse handeln, die zu einer reference aufgelöst und auf den Operand-Stack als value abgelegt wird.

Exceptions
Exception
Während der Auflösung von symbolischen Referenzen können alle Exceptions ausgelöst werden, die Teil des Auflösungsvorgangs sind.

ldc2_w

BefehlKonstante aus RCP #index auf OS
Format
ldc2_w
indexbyte1
indexbyte2
Formen
  • ldc2_w = 20 (x14)
Operand-Stack
...
 
...
value long|double
Beschreibung

Aus indexbyte1 und indexbyte2 wird ein vorzeichenlosen Indexwert in den RCP der aktuellen Klasse bestimmt: index = (indexbyte1 << 8) Ι indexbyte2.

Der numerischer Wert value der long oder double Konstante im RCP #index wird auf den Operand-Stack abgelegt.

HinweisEs gibt keine ldc2-Variante wie bei ldc und ldc_w .

ldc_w

BefehlKonstante aus RCP #index auf OS
Format
ldc_w
indexbyte1
indexbyte2
Formen
  • ldc_w = 19 (x13)
Operand-Stack
...
 
...
value
BeschreibungAus indexbyte1 und indexbyte2 wird ein vorzeichenlosen Indexwert in den RCP der aktuellen Klasse bestimmt: index = (indexbyte1 << 8) Ι indexbyte2. Ansonsten verhält sich ldc_w wie ldc .

ldiv

BefehlDivision (long): value1 / value2 = result
Format
ldiv
Formen
  • ldiv = 109 (x6d)
Operand-Stack
...
value1 long
value2 long
 
...
result long
Beschreibung

Entnimmt die long-Werte value1 und value2 vom Operand-Stack und legt den Quotient value1 / value2 als Ergebnis result wieder auf diesem ab.

Eine long Division rundet gegen 0.

Exceptions
ArithmeticException
Der Divisor value2 ist 0

lload

BefehlLäd long value aus lokaler Variable index und index + 1
Format
lload
index
Formen
  • lload = 22 (x16)
Operand-Stack
...
 
...
value long
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der an index und index + 1 enthaltene long-Wert value wird auf den Operand-Stack gebracht.
HinweisDer lload Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

lload_<l>

BefehlLäd long value aus lokaler Variable l und l + 1
Format
lload_<l>
Formen
Operand-Stack
...
 
...
value long
BeschreibungDer long Wert value aus dem Element l (0, 1 , 2, 3) und l + 1 des Arrays der kolaken Variablen wird auf den Operand-Stack abgelegt.
HinweisJeder Befehl der Familie ist äquivalent zum lload <l> Befehl, nur dass der Index l der lokalen Variable hier im Befehl selbst enthalten ist.

lmul

BefehlMultiplikation (long): value1 * value2 = result
Format
lmul
Formen
  • lmul = 105 (x69)
Operand-Stack
...
value1 long
value2 long
 
...
result long
Beschreibung

Entnimmt die long-Werte value1 und value2 vom Operand-Stack und legt das Produkt value1 * value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Multiplikation zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Differnz von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

lneg

BefehlNegation (long): -value = result
Format
lneg
Formen
  • lneg = 117 (x75)
Operand-Stack
...
value long
 
...
result long
Beschreibung

Entnimmt den long-Wert value vom Operand-Stack und legt -value als Ergebnis result wieder auf diesem ab.

Bei long-Werten entspricht die Negation der Subtraktion von 0.

Es gilt: long x : -x = (~x) + 1.

lookupswitch

BefehlSprungtabelleneintrag nach key durchsuchen und springen
Format
lookupswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
npairs1
npairs2
npairs3
npairs4
match-offset pairs...
Formen
  • lookupswitch = 171 (xab)
Operand-Stack
...
key int
 
...

lor

BefehlLogisches ODER (long): value1 | value2 = result
Format
lor
Formen
  • lor = 129 (x81)
Operand-Stack
...
value1 long
value2 long
 
...
result long

lrem

BefehlDivisionsrest (long): value1 % value2 = result
Format
lrem
Formen
  • lrem = 113 (x71)
Operand-Stack
...
value1 long
value2 long
 
...
result long
BeschreibungEntnimmt die long-Werte value1 und value2 vom Operand-Stack und legt den Divisionsrest value1 - (value1 / value2) * value2 als Ergebnis result wieder auf diesem ab.
Exceptions
ArithmeticException
Der Divisor value2 ist 0

lreturn

BefehlRückgabewert long value einer Methode
Format
lreturn
Formen
  • lreturn = 173 (xad)
Operand-Stack
...
value long
 
[empty]

lshl

BefehlSchieben nach links (long): value1 << value2' = result
Format
lshl
Formen
  • lshl = 121 (x79)
Operand-Stack
...
value1 long
value2 long
 
...
result long
BeschreibungEntnimmt value1 und value2 vom Operand-Stack, schiebt den long Wert value1 um s Stellen nach links, und legt das Ergebnis result wieder auf dem OS ab. s ist durch die niederwertisten 6 Bit von value2 bestimmt.
Hinweis

Die Operation entspricht: value1 * 2s.

Die Anzahl der Stellen s, um die geschoben wird, liegt immer zwischen 0 und 63 (inklusive), als ob value2 zunächst mit 0x3F AND-maskiert wurde.

lshr

BefehlArithmetisches Schieben nach rechts (long): value1 >> value2' = result
Format
lshr
Formen
  • lshr = 123 (x7b)
Operand-Stack
...
value1 long
value2 long
 
...
result long
BeschreibungEntnimmt value1 und value2 vom Operand-Stack, schiebt den long Wert value1 um s Stellen nach links, und legt das Ergebnis result wieder auf dem OS ab. s ist durch die niederwertisten 6 Bit von value2 bestimmt.
Hinweis

Die Operation entspricht: value1 / 2s.

Die Anzahl der Stellen s, um die geschoben wird, liegt immer zwischen 0 und 63 (inklusive), als ob value2 zunächst mit 0x3F AND-maskiert wurde.

lstore

BefehlSpeichert long value in lokalen Variablen index und index + 1
Format
lstore
index
Formen
  • lstore = 55 (x37)
Operand-Stack
...
value long
 
...
BeschreibungDer index ist ein vorzeichenloser byte-Wert, der einen Index in das Array der lokalen Variablen des aktuellen Frames angibt. Der long Wert value wird vom Operand-Stack entnommen und in den lokalen Variablen index und index + 1 gespeichert.
HinweisDer lstore Befehl kann zusammen mit dem wide Befehl verwendet werden, um einen höheren Index über eine vorzeichenlose 2-byte-Wert anzugeben.

lstore_<l>

BefehlSpeichert long value in lokalen Variablen l und l + 1
Format
lstore_<l>
Formen
Operand-Stack
...
value long
 
...
BeschreibungDer long Wert value wird vom Operand-Stack entnommen und in den lokalen Variablen l (0, 1 , 2, 3) und l + 1 gespeichert.
HinweisJeder Befehl der Familie ist äquivalent zum lstore <l> Befehl, nur dass der Index l der lokalen Variable hier im Befehl selbst enthalten ist.

lsub

BefehlSubtraktion (long): value1 - value2 = result
Format
lsub
Formen
  • lsub = 101 (x65)
Operand-Stack
...
value1 long
value2 long
 
...
result long
Beschreibung

Entnimmt die long-Werte value1 und value2 vom Operand-Stack und legt die Differenz value1 - value2 als Ergebnis result wieder auf diesem ab.

Wenn es bei der Subtraktion zu einem Überlauf kommt, kann das Vorzeichen von result ungleich dem Vorzeichen der korrekten mathematischen Differnz von value1 und value2 sein. Es wird auch dann keine Exception ausgelöst.

lushr

BefehlLogisches Schieben nach rechts (long): value1 >>> value2' = result
Format
lushr
Formen
  • lushr = 125 (x7d)
Operand-Stack
...
value1 long
value2 long
 
...
result long

lxor

BefehlLogisches XOR (long): value1 ^ value2 = result
Format
lxor
Formen
  • lxor = 131 (x83)
Operand-Stack
...
value1 long
value2 long
 
...
result long

M

↑ oben

monitorenter

BefehlMonitor des Objekts objectref betreten
Format
monitorenter
Formen
  • monitorenter = 194 (xc2)
Operand-Stack
...
objectref reference
 
...

monitorexit

BefehlMonitor des Objekts objectref verlassen
Format
monitorexit
Formen
  • monitorexit = 195 (xc3)
Operand-Stack
...
objectref reference
 
...

multianewarray

BefehlNeues mehrdimensionales Array mit reference Elementtyp anlegen
Format
multianewarray
indexbyte1
indexbyte2
dimensions
Formen
  • multianewarray = 197 (xc5)
Operand-Stack
...
count1 int
[count2...] int
 
...
arrayref

N

↑ oben

new

BefehlNeues Objekt erzeugen (Speicher allozieren)
Format
new
indexbyte1
indexbyte2
Formen
  • new = 187 (xbb)
Operand-Stack
...
 
...
objectref reference

newarray

BefehlNeues 1-dimensionales Array mit primitiven Elementtyp anlegen
Format
newarray
atype
Formen
  • newarray = 188 (xbc)
Operand-Stack
...
count int
 
...
arrayref reference

nop

BefehlKeine Aktion
Format
nop
Formen
  • nop = 0 (x00)
Operand-Stack
...
 
...
BeschreibungEs wird keine Aktion ausgeführt.

P

↑ oben

pop

BefehlEntfernt das oberste Element vom OS
Format
pop
Formen
  • pop = 87 (x57)
Operand-Stack
...
value
 
...
BeschreibungEntfernd das oberste Element vom Operand-Stack. Dies muss von einem Kategorie 1 Typ (int, float, returnAddress oder reference) sein.

pop2

BefehlEntfernt die obersten 1 oder 2 Elemente vom OS
Format
pop2
Formen
  • pop2 = 88 (x58)
Operand-Stack
...
value1
value2
 
...
BeschreibungEntfernt die obersten beiden Kategorie 1 (int, float, returnAddress oder reference) Elemente oder das oberste Kategorie 2 (long oder double) Element vom Operand-Stack.

putfield

BefehlSetzen eines Feldes der Instanz objectref
Format
putfield
indexbyte1
indexbyte2
Formen
  • putfield = 181 (xb5)
Operand-Stack
...
objectref reference
value
 
...

putstatic

BefehlSetzen eines static Feldes einer Klasse
Format
putstatic
indexbyte1
indexbyte2
Formen
  • putstatic = 179 (xb3)
Operand-Stack
...
value
 
...

R

↑ oben

ret

BefehlRücksprung aus Unterprogramm
Format
ret
index
Formen
  • ret = 169 (xa9)
Operand-Stack
...
 
...

return

BefehlRückgabewert void einer Methode
Format
return
Formen
  • return = 177 (xb1)
Operand-Stack
...
 
[empty]

S

↑ oben

saload

BefehlLäd short value aus Zelle index des Arrays arrayref
Format
saload
Formen
  • saload = 53 (x35)
Operand-Stack
...
arrayref reference
index int
 
...
value int
BeschreibungDie Referenz arrayref muss auf ein Array verweisen, dessen Komponenten vom Typ short sind. Aus arrayref und index, die vom Stack entnommen werden, wird der short-Wert an der Position index des Arrays bestimmt, vorzeichenbehaftet auf den int-Wert value erweitert, und dieser auf den Stack gebracht.
Exceptions
NullPointerException
arrayref ist null
ArrayIndexOutOfBoundsException
index ist nicht innerhalb der Grenzen des durch arrayref bestimmten Arrays

sastore

BefehlSpeichert short value in Zelle index des Arrays arrayref
Format
sastore
Formen
  • sastore = 86 (x56)
Operand-Stack
...
arrayref reference
index int
value int
 
...
BeschreibungDie Operanden arrayref, index und value werden vom Operad-Stack entnommen. Der int Wert value wird auf short gekürzt, und im Array arrayref in Zelle index abgelegt.
Exceptions
NullPointerException
arrayref ist null.
ArrayIndexOutOfBoundsException
index liegt nicht in den Grenzen des druch arrayref referenzierten Arrays.

sipush

Befehlshort Konstante svalue zu int ivalue erweitern und auf OS
Format
sipush
svalue
Formen
  • sipush = 17 (x11)
Operand-Stack
...
 
...
ivalue int
BeschreibungErweitert die short Konstante svalue vorzeichenbehaftet zum int-Wert ivalue und legt diesen auf dem Operand-Stack ab.

swap

BefehlVertauscht die obersten beiden Elemente auf dem OS
Format
swap
Formen
  • swap = 95 (x5f)
Operand-Stack
...
value2
value1
 
...
value1
value2
BeschreibungVertauscht die obersten zwei Elemente des Operand-Stack. value1 und value2 müssen Elemente der Kategorie 1 (int, float, returnAddress oder reference) sein.
HinweisDie JVM sieht keinen swap2-Befehl vor, mit dem Elemente der Kategorie 2 (long oder double) getaucht werden könnten.

T

↑ oben

tableswitch

BefehlSprungtabelleneintrag über index direkt auswählen und springen
Format
tableswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
lowbyte1
lowbyte2
lowbyte3
lowbyte4
highbyte1
highbyte2
highbyte3
highbyte4
jump offsets...
Formen
  • tableswitch = 170 (xaa)
Operand-Stack
...
index int
 
...

W

↑ oben

wide

BefehlErweitert den Index von lokalen Variablen mit zusätzlichen Bytes
Format
wide
<opcode>
indexbyte1
indexbyte2
Formen
  • wide = 196 (xc4)
Operand-StackGenau wie der mit wide modifizierte Befehl
→ weiter…

SeminarthemenDie Architektur der Java VMI.II.III.IV.• V. Befehlssatz • VI.VII.