Java Byte Code

Konstanty

operace argumenty zasobník před a po popis
aconst_null
→ null uloží na zásobník null
dconst_0
→ 0.0 načte hodnotu 0.0 (typu double) na zásobník
dconst_1
→ 1.0 načte hodnotu 1.0 (typu double) na zásobník
fconst_0
→ 0.0f načte hodnotu 0.0f (typu float) na zásobník
fconst_1
→ 1.0f načte hodnotu 1.0f (typu float) na zásobník
fconst_2
→ 2.0f načte hodnotu 2.0f (typu float) na zásobník
iconst_m1
→ -1 načte hodnotu -1 (typu int) na zásobník
iconst_0
→ 0 načte hodnotu 0 (typu int) na zásobník
iconst_1
→ 1 načte hodnotu 1 (typu int) na zásobník
iconst_2
→ 2 načte hodnotu 2 (typu int) na zásobník
iconst_3
→ 3 načte hodnotu 3 (typu int) na zásobník
iconst_4
→ 4 načte hodnotu 4 (typu int) na zásobník
iconst_5
→ 5 načte hodnotu 5 (typu int) na zásobník
lconst_0
→ 0L načte hodnotu 0L (typu long) na zásobník
lconst_1
→ 1L načte hodnotu 1L (typu long) na zásobník

Zásobník

operace argumenty zasobník před a po popis
bipush 1: byte → value umístí na zásobník hodnotu typu byte (provádí konverzi na int)
dup
value → value, value zduplikuje hodnotu na vrcholu zásobníku
dup_x1
value2, value1 → value1, value2, value1 vytvoří kopii hodnoty na vrcholu zásobníku podle schématu, hodnoty value1 a value2 nesmí být typu double or long
dup_x2
value3, value2, value1 → value1, value3, value2, value1 vytvoří kopie hodnot na vrcholu zásobníku podle schématu
dup2
{value2, value1} → {value2, value1}, {value2, value1} vytvoří kopie hodnot na vrcholu zásobníku podle schématu
dup2_x1
value3, {value2, value1} → {value2, value1}, value3, {value2, value1} vytvoří kopie hodnot na vrcholu zásobníku podle schématu
dup2_x2
{value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1} vytvoří kopie hodnot na vrcholu zásobníku podle schématu
pop
value → odstraní hodnotu z vrcholu zásobníku
pop2
{value2, value1} → odstraní dvě hodnoty z vrcholu zásobníku (případně jednu, pokud to je hodnota typu long nebo double)
sipush 2: byte1, byte2 → value umístí na zásobník hodnotu typu short (provádí konverzi na int)
swap
value2, value1 → value1, value2 prohodí dvě hodnoty na vrcholu zásobníku (value1 a value2 nesmí být typu double nebo long)

Load

operace argumenty zasobník před a po popis
aload 1: index → objectref načte na zásobník referenci z lokální proměnné #index
aload_0
→ objectref načte na zásobník referenci z lokální proměnné 0
aload_1
→ objectref načte na zásobník referenci z lokální proměnné 1
aload_2
→ objectref načte na zásobník referenci z lokální proměnné 2
aload_3
→ objectref načte na zásobník referenci z lokální proměnné 3
dload 1: index → value načte na zásobník hodnotu typu double z lokální proměnné #index
dload_0
→ value načte na zásobník hodnotu typu double z lokální proměnné 0
dload_1
→ value načte na zásobník hodnotu typu double z lokální proměnné 1
dload_2
→ value načte na zásobník hodnotu typu double z lokální proměnné 2
dload_3
→ value načte na zásobník hodnotu typu double z lokální proměnné 3
fload 1: index → value načte na zásobník hodnotu typu float z lokální proměnné #index
fload_0
→ value načte na zásobník hodnotu typu float z lokální proměnné 0
fload_1
→ value načte na zásobník hodnotu typu float z lokální proměnné 1
fload_2
→ value načte na zásobník hodnotu typu float z lokální proměnné 2
fload_3
→ value načte na zásobník hodnotu typu float z lokální proměnné 3
iload 1: index → value načte na zásobník hodnotu typu int z lokální proměnné #index
iload_0
→ value načte na zásobník hodnotu typu int z lokální proměnné 0
iload_1
→ value načte na zásobník hodnotu typu int z lokální proměnné 1
iload_2
→ value načte na zásobník hodnotu typu int z lokální proměnné 2
iload_3
→ value načte na zásobník hodnotu typu int z lokální proměnné 3
ldc 1: index → value umístí na zásobník hodnotu konstanty #index z constant poolu (použitelné pro String, int, float)
ldc_w 2: indexbyte1, indexbyte2
umístí na zásobník hodnotu konstanty #index z constant poolu (použitelné pro String, int, float); index je dán jako (indexbyte1 << 8 + indexbyte2)
ldc2_w 2: indexbyte1, indexbyte2
umístí na zásobník hodnotu konstanty #index z constant poolu (použitelné pro double a long); index je dán jako (indexbyte1 << 8 + indexbyte2)
lload 1: index → value načte na zásobník hodnotu typu long z lokální proměnné #index
lload_0
→ value načte na zásobník hodnotu typu long z lokální proměnné 0
lload_1
→ value načte na zásobník hodnotu typu long z lokální proměnné 1
lload_2
→ value načte na zásobník hodnotu typu long z lokální proměnné 2
lload_3
→ value načte na zásobník hodnotu typu long z lokální proměnné 3

Aritmetické operace

operace argumenty zasobník před a po popis
dadd
value1, value2 → result součet dvou hodnot typu double
ddiv
value1, value2 → result podíl dvou hodnot typu double (result = value1 / value2)
dmul
value1, value2 → result součin dvou hodnot typu double
dneg
value → result negace hodnoty typu double
drem
value1, value2 → result zbytek po dělení hodnot typu double
dsub
value1, value2 → result rozdíl dvou hodnot typu double (result = value1 - value2)
fadd
value1, value2 → result součet dvou hodnot typu float
fdiv
value1, value2 → result podíl dvou hodnot typu float (result = value1 / value2)
fmul
value1, value2 → result součin dvou hodnot typu float
fneg
value → result negace hodnoty typu float
frem
value1, value2 → result zbytek po dělení hodnot typu float
fsub
value1, value2 → result rozdíl dvou hodnot typu float (result = value1 - value2)
iadd
value1, value2 → result součet dvou hodnot typu int
idiv
value1, value2 → result podíl dvou hodnot typu int (result = value1 / value2)
iinc 2: index, const [No change] inkrementuje lokální proměnnou #index o hodnotu const (která odpovídá jednobytové celočíselné hodnotě se znaménkem)
imul
value1, value2 → result součin dvou hodnot typu int
ineg
value → result součin dvou hodnot typu
irem
value1, value2 → result zbytek po dělení hodnot typu int (result = value1 - (value1 / value2) * value2)
isub
value1, value2 → result rozdíl dvou hodnot typu int (result = value1 - value2)
ladd
value1, value2 → result součet dvou hodnot typu long
ldiv
value1, value2 → result podíl dvou hodnot typu long (result = value1 / value2)
lmul
→ value součin dvou hodnot typu long
lneg
value → result negace hodnoty typu long
lrem
value1, value2 → result zbytek po dělení hodnot typu long (result = value1 - (value1 / value2) * value2)
lsub
value1, value2 → result rozdíl dvou hodnot typu long (result = value1 - value2)

Převody

operace argumenty zasobník před a po popis
d2f
value → result převede hodnotu typu double na typ float
d2i
value → result převede hodnotu typu double na typ int
d2l
value → result převede hodnotu typu double na typ long
f2d
value → result převede hodnotu typu float na typ double
f2i
value → result převede hodnotu typu float na typ int
f2l
value → result převede hodnotu typu float na typ long
i2b
value → result převede hodnotu typu int na typ byte
i2c
value → result převede hodnotu typu int na typ character
i2d
value → result převede hodnotu typu int na typ double
i2f
value → result převede hodnotu typu int na typ float
i2l
value → result převede hodnotu typu int na typ long
i2s
value → result převede hodnotu typu int na typ short
l2d
value → result převede hodnotu typu long na typ double
l2f
value → result převede hodnotu typu long na typ float
l2i
value → result převede hodnotu typu long na typ int

Logické operace

operace argumenty zasobník před a po popis
iand
value1, value2 → result bitový součin hodnot typu int
ior
value1, value2 → result bitový součet hodnot typu int
ishl
value1, value2 → result bitový posun hodnoty value1 (typu int) o value2 pozic vlevo
ishr
value1, value2 → result aritmetický bitový posun hodnoty value1 (typu int) o value2 (int) pozic vpravo (doplní se nejvyšší bit)
iushr
value1, value2 → result bitový posun hodnoty value1 (typu int) o value2 (int) pozic vpravo (doplní se 0)
ixor
value1, value2 → result bitová non-ekvivalence (xor) hodnot typu int
land
value1, value2 → result bitový součin hodnot typu long
lor
value1, value2 → result bitový součet hodnot typu long
lshl
value1, value2 → result bitový posun hodnoty value1 (typu long) o value2 (int) pozic vlevo
lshr
value1, value2 → result aritmetický bitový posun hodnoty value1 (typu long) o value2 (int) pozic vpravo (doplní se nejvyšší bit)
lushr
value1, value2 → result bitový posun hodnoty value1 (typu long) o value2 (int) pozic vpravo (doplní se 0)
lxor
value1, value2 → result bitová non-ekvivalence (xor) hodnot typu long

Návrat z volání

operace argumenty zasobník před a po popis
areturn
objectref → [empty] návrat z metody vracející referenci
dreturn
value → [empty] návrat z metodyvracející hodnotu typu double
freturn
value → [empty] návrat z metodyvracející hodnotu typu float
ireturn
value → [empty] návrat z metodyvracející hodnotu typu int
lreturn
value → [empty] návrat z metodyvracející hodnotu typu long
ret 1: index [No change] Pokračuje v provádění kódu od adresy, která je uložená v lokalní proměnné #index (protipól JSR)
return
→ [empty] návrat z metody vracející void

Last update on 29. 11. 2018 01:53
Powered by Schemik.

© Petr Krajča, 2010, 2012
petr.krajca (at) upol.cz