Výpisy instrukcí Java bytecode - Java bytecode instruction listings
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Toto je seznam pokynů, které tvoří Bajtový kód Java, abstraktní strojový jazyk, který nakonec provede Virtuální stroj Java. Bajtový kód Java je generován z jazyků běžících na serveru Platforma Java, nejvíce pozoruhodně Programovací jazyk Java.
Všimněte si, že jakákoli odkazovaná „hodnota“ odkazuje na 32bitový int podle sady instrukcí Java.
Mnemotechnická pomůcka | Operační kód (v hex ) | Opcode (v binární podobě) | Ostatní bajty [count]: [štítky operandů] | Zásobník [před] → [po] | Popis |
---|---|---|---|---|---|
aaload | 32 | 0011 0010 | arrayref, index → hodnota | načíst do zásobníku odkaz z pole | |
aastore | 53 | 0101 0011 | arrayref, index, hodnota → | uložit odkaz do pole | |
aconst_null | 01 | 0000 0001 | → null | tlačit a nula odkaz na zásobník | |
aload | 19 | 0001 1001 | 1: index | → reference objektu | načíst odkaz do zásobníku z místní proměnné #index |
aload_0 | 2a | 0010 1010 | → reference objektu | načíst odkaz do zásobníku z lokální proměnné 0 | |
aload_1 | 2b | 0010 1011 | → reference objektu | načíst odkaz do zásobníku z lokální proměnné 1 | |
aload_2 | 2c | 0010 1100 | → reference objektu | načíst odkaz do zásobníku z lokální proměnné 2 | |
aload_3 | 2d | 0010 1101 | → reference objektu | načíst odkaz do zásobníku z lokální proměnné 3 | |
znovu | bd | 1011 1101 | 2: indexbyte1, indexbyte2 | count → arrayref | vytvořit nové pole odkazů délky počet a typ komponenty identifikovaný odkazem na třídu index (indexbyte1 << 8 | indexbyte2) ve stálém bazénu |
zpět | b0 | 1011 0000 | objectref → [prázdný] | vrátit odkaz z metody | |
délka pole | být | 1011 1110 | arrayref → délka | získejte délku pole | |
obchod | 3a | 0011 1010 | 1: index | objectref → | uložit odkaz do místní proměnné #index |
astore_0 | 4b | 0100 1011 | objectref → | uložit odkaz do lokální proměnné 0 | |
astore_1 | 4c | 0100 1100 | objectref → | uložit odkaz do lokální proměnné 1 | |
astore_2 | 4d | 0100 1101 | objectref → | uložit odkaz do lokální proměnné 2 | |
astore_3 | 4e | 0100 1110 | objectref → | uložit odkaz do lokální proměnné 3 | |
házet | bf | 1011 1111 | objectref → [prázdný], objectref | vyvolá chybu nebo výjimku (všimněte si, že zbytek zásobníku je vymazán, takže zbývá jen odkaz na Throwable) | |
Baload | 33 | 0011 0011 | arrayref, index → hodnota | načíst bajt nebo booleovskou hodnotu z pole | |
bastore | 54 | 0101 0100 | arrayref, index, hodnota → | uložit bajt nebo booleovskou hodnotu do pole | |
bipush | 10 | 0001 0000 | 1: bajt | → hodnota | tlačit a byte do zásobníku jako celé číslo hodnota |
bod zlomu | ca. | 1100 1010 | vyhrazeno pro zarážky v debuggerech Java; by se neměl objevit v žádném souboru třídy | ||
náklad | 34 | 0011 0100 | arrayref, index → hodnota | načíst znak z pole | |
Castore | 55 | 0101 0101 | arrayref, index, hodnota → | uložit znak do pole | |
checkcast | c0 | 1100 0000 | 2: indexbyte1, indexbyte2 | objectref → objectref | zkontroluje, zda objectref je určitého typu, jehož odkaz na třídu je v konstantním fondu na index (indexbyte1 << 8 | indexbyte2) |
d2f | 90 | 1001 0000 | hodnota → výsledek | převést a dvojnásobek do a plovák | |
d2i | 8e | 1000 1110 | hodnota → výsledek | převést dvojitý na int | |
d2l | 8f | 1000 1111 | hodnota → výsledek | převést dvojitý na dlouhý | |
táta | 63 | 0110 0011 | hodnota1, hodnota2 → výsledek | přidat dvě zdvojnásobí | |
daload | 31 | 0011 0001 | arrayref, index → hodnota | načíst dvojníka z pole | |
dastore | 52 | 0101 0010 | arrayref, index, hodnota → | uložit dvojník do pole | |
dcmpg | 98 | 1001 1000 | hodnota1, hodnota2 → výsledek | porovnat dvě zdvojnásobí, 1 na NaN | |
dcmpl | 97 | 1001 0111 | hodnota1, hodnota2 → výsledek | porovnat dvě zdvojnásobí, -1 na NaN | |
dconst_0 | 0e | 0000 1110 | → 0.0 | tlačit na konstantu 0.0 (A dvojnásobek) do zásobníku | |
dconst_1 | 0f | 0000 1111 | → 1.0 | tlačit na konstantu 1.0 (A dvojnásobek) do zásobníku | |
ddiv | 6f | 0110 1111 | hodnota1, hodnota2 → výsledek | rozdělit dvě čtyřhry | |
dload | 18 | 0001 1000 | 1: index | → hodnota | načíst dvojitý hodnota z lokální proměnné #index |
dload_0 | 26 | 0010 0110 | → hodnota | načíst dvojnásobek z místní proměnné 0 | |
dload_1 | 27 | 0010 0111 | → hodnota | načíst dvojnásobek z lokální proměnné 1 | |
dload_2 | 28 | 0010 1000 | → hodnota | načíst dvojnásobek z místní proměnné 2 | |
dload_3 | 29 | 0010 1001 | → hodnota | načíst dvojnásobek z místní proměnné 3 | |
dmul | 6b | 0110 1011 | hodnota1, hodnota2 → výsledek | vynásobte dvě zdvojnásobení | |
dneg | 77 | 0111 0111 | hodnota → výsledek | negovat dvojníka | |
drem | 73 | 0111 0011 | hodnota1, hodnota2 → výsledek | získejte zbytek z rozdělení mezi dvě čtyřhry | |
dreturn | af | 1010 1111 | hodnota → [prázdný] | vrátit dvojitý z metody | |
obchod | 39 | 0011 1001 | 1: index | hodnota → | uložit dvojitý hodnota do lokální proměnné #index |
dstore_0 | 47 | 0100 0111 | hodnota → | uložit double do lokální proměnné 0 | |
dstore_1 | 48 | 0100 1000 | hodnota → | uložit double do lokální proměnné 1 | |
dstore_2 | 49 | 0100 1001 | hodnota → | uložit double do místní proměnné 2 | |
dstore_3 | 4a | 0100 1010 | hodnota → | uložit double do lokální proměnné 3 | |
dsub | 67 | 0110 0111 | hodnota1, hodnota2 → výsledek | odečíst dvojnásobek od druhého | |
dup | 59 | 0101 1001 | hodnota → hodnota, hodnota | duplikujte hodnotu v horní části zásobníku | |
dup_x1 | 5a | 0101 1010 | hodnota2, hodnota1 → hodnota1, hodnota2, hodnota1 | vložte kopii nejvyšší hodnoty do stohu dvou hodnot shora. value1 a value2 nesmí být typu double nebo long. | |
dup_x2 | 5b | 0101 1011 | hodnota3, hodnota2, hodnota1 → hodnota1, hodnota3, hodnota2, hodnota1 | vložte kopii nejvyšší hodnoty do stohu dvě (pokud je hodnota2 dvojitá nebo dlouhá, zabírá také hodnotu value3) nebo tři hodnoty (pokud hodnota2 není ani zdvojnásobená, ani dlouhá) shora | |
dup2 | 5c | 0101 1100 | {hodnota2, hodnota1} → {hodnota2, hodnota1}, {hodnota2, hodnota1} | duplikovat horní dvě slova v zásobníku (dvě hodnoty, pokud hodnota1 není dvojitá ani dlouhá; jedna hodnota, pokud je hodnota1 dvojitá nebo dlouhá) | |
dup2_x1 | 5 d | 0101 1101 | hodnota3, {hodnota2, hodnota1} → {hodnota2, hodnota1}, hodnota3, {hodnota2, hodnota1} | duplikovat dvě slova a vložit pod třetí slovo (viz vysvětlení výše) | |
dup2_x2 | 5e | 0101 1110 | {hodnota4, hodnota3}, {hodnota2, hodnota1} → {hodnota2, hodnota1}, {hodnota4, hodnota3}, {hodnota2, hodnota1} | duplikujte dvě slova a vložte pod čtvrté slovo | |
f2d | 8d | 1000 1101 | hodnota → výsledek | převést plovák na dvojitý | |
f2i | 8b | 1000 1011 | hodnota → výsledek | převést float na int | |
f2l | 8c | 1000 1100 | hodnota → výsledek | převést plovák na dlouhý | |
fadd | 62 | 0110 0010 | hodnota1, hodnota2 → výsledek | přidat dva plováky | |
faload | 30 | 0011 0000 | arrayref, index → hodnota | načíst float z pole | |
rychle | 51 | 0101 0001 | arrayref, index, hodnota → | uložit plovák do pole | |
fcmpg | 96 | 1001 0110 | hodnota1, hodnota2 → výsledek | porovnat dva plováky, 1 na NaN | |
fcmpl | 95 | 1001 0101 | hodnota1, hodnota2 → výsledek | porovnat dva plováky, -1 na NaN | |
fconst_0 | 0b | 0000 1011 | → 0,0f | tlačit 0,0f na zásobníku | |
fconst_1 | 0c | 0000 1100 | → 1.0f | tlačit 1,0f na zásobníku | |
fconst_2 | 0 d | 0000 1101 | → 2.0f | tlačit 2,0f na zásobníku | |
fdiv | 6e | 0110 1110 | hodnota1, hodnota2 → výsledek | rozdělit dva plováky | |
načíst | 17 | 0001 0111 | 1: index | → hodnota | vložte plovák hodnota z lokální proměnné #index |
fload_0 | 22 | 0010 0010 | → hodnota | vložte plovák hodnota z lokální proměnné 0 | |
fload_1 | 23 | 0010 0011 | → hodnota | vložte plovák hodnota z lokální proměnné 1 | |
fload_2 | 24 | 0010 0100 | → hodnota | vložte plovák hodnota z lokální proměnné 2 | |
fload_3 | 25 | 0010 0101 | → hodnota | vložte plovák hodnota z lokální proměnné 3 | |
fmul | 6a | 0110 1010 | hodnota1, hodnota2 → výsledek | vynásobte dva plováky | |
fneg | 76 | 0111 0110 | hodnota → výsledek | vyvrátit plovák | |
frem | 72 | 0111 0010 | hodnota1, hodnota2 → výsledek | získejte zbytek z rozdělení mezi dva plováky | |
freturn | ae | 1010 1110 | hodnota → [prázdný] | vrátit plovák | |
fstore | 38 | 0011 1000 | 1: index | hodnota → | uložit plovák hodnota do lokální proměnné #index |
fstore_0 | 43 | 0100 0011 | hodnota → | uložit plovák hodnota do lokální proměnné 0 | |
fstore_1 | 44 | 0100 0100 | hodnota → | uložit plovák hodnota do lokální proměnné 1 | |
fstore_2 | 45 | 0100 0101 | hodnota → | uložit plovák hodnota do lokální proměnné 2 | |
fstore_3 | 46 | 0100 0110 | hodnota → | uložit plovák hodnota do lokální proměnné 3 | |
fsub | 66 | 0110 0110 | hodnota1, hodnota2 → výsledek | odečíst dva plováky | |
getfield | b4 | 1011 0100 | 2: indexbyte1, indexbyte2 | objectref → hodnota | získat pole hodnota objektu objektová reference, kde je pole identifikováno odkazem na pole v konstantním fondu index (indexbyte1 << 8 | indexbyte2) |
getstatický | b2 | 1011 0010 | 2: indexbyte1, indexbyte2 | → hodnota | získat statické pole hodnota třídy, kde je pole identifikováno odkazem na pole v konstantním fondu index (indexbyte1 << 8 | indexbyte2) |
jít do | a7 | 1010 0111 | 2: branchbyte1, branchbyte2 | [žádná změna] | přejde na jinou instrukci v odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
goto_w | c8 | 1100 1000 | 4: branchbyte1, branchbyte2, branchbyte3, branchbyte4 | [žádná změna] | přejde na jinou instrukci v odbočka (signed int konstruováno z nepodepsaných bajtů branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4) |
i2b | 91 | 1001 0001 | hodnota → výsledek | převést int na bajt | |
i2c | 92 | 1001 0010 | hodnota → výsledek | převést int na znak | |
i2d | 87 | 1000 0111 | hodnota → výsledek | převést int na dvojitý | |
i2f | 86 | 1000 0110 | hodnota → výsledek | převést int na plovák | |
i2l | 85 | 1000 0101 | hodnota → výsledek | převést int na dlouhý | |
i2s | 93 | 1001 0011 | hodnota → výsledek | převést int na krátký | |
přidávám | 60 | 0110 0000 | hodnota1, hodnota2 → výsledek | přidat dva ints | |
iaload | 2e | 0010 1110 | arrayref, index → hodnota | načíst int z pole | |
iand | 7e | 0111 1110 | hodnota1, hodnota2 → výsledek | proveďte bitové AND na dvou celých číslech | |
iastore | 4f | 0100 1111 | arrayref, index, hodnota → | uložit int do pole | |
iconst_m1 | 02 | 0000 0010 | → -1 | načíst hodnotu int -1 do zásobníku | |
iconst_0 | 03 | 0000 0011 | → 0 | načíst hodnotu int 0 do zásobníku | |
iconst_1 | 04 | 0000 0100 | → 1 | načíst hodnotu int 1 do zásobníku | |
iconst_2 | 05 | 0000 0101 | → 2 | načíst hodnotu int 2 do zásobníku | |
iconst_3 | 06 | 0000 0110 | → 3 | načtěte hodnotu int 3 do zásobníku | |
iconst_4 | 07 | 0000 0111 | → 4 | načíst hodnotu int 4 do zásobníku | |
iconst_5 | 08 | 0000 1000 | → 5 | načtěte hodnotu int 5 do zásobníku | |
idiv | 6c | 0110 1100 | hodnota1, hodnota2 → výsledek | rozdělit dvě celá čísla | |
if_acmpeq | a5 | 1010 0101 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | pokud jsou odkazy stejné, odbočte na instrukci na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_acmpne | a6 | 1010 0110 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | pokud odkazy nejsou stejné, odbočte na instrukci na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmpeq | 9f | 1001 1111 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | pokud jsou ints rovné, odbočte na instrukci na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmpge | a2 | 1010 0010 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | -li hodnota1 je větší nebo rovno hodnota2, pobočka k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmpgt | a3 | 1010 0011 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | -li hodnota1 je větší než hodnota2, pobočka k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmple | a4 | 1010 0100 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | -li hodnota1 je menší nebo rovno hodnota2, pobočka k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmplt | a1 | 1010 0001 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | -li hodnota1 je méně než hodnota2, pobočka k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
if_icmpne | a0 | 1010 0000 | 2: branchbyte1, branchbyte2 | hodnota1, hodnota2 → | pokud nejsou ints stejné, odbočíme na instrukci v odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifeq | 99 | 1001 1001 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je 0, větev k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifge | 9c | 1001 1100 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je větší než nebo rovno 0, větev na instrukci v odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifgt | 9d | 1001 1101 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je větší než 0, větev na instrukci na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifle | 9e | 1001 1110 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je menší než nebo rovno 0, větev na instrukci v odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
iflt | 9b | 1001 1011 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je menší než 0, větev k výuce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifne | 9a | 1001 1010 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota není 0, větev k instrukci na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifnonnull | c7 | 1100 0111 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota není null, větev instrukce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
ifnull | c6 | 1100 0110 | 2: branchbyte1, branchbyte2 | hodnota → | -li hodnota je null, větev instrukce na odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) |
iinc | 84 | 1000 0100 | 2: index, konst | [Žádná změna] | přírůstek místní proměnné #index podepsaným bajtem konst |
iload | 15 | 0001 0101 | 1: index | → hodnota | načíst int hodnota z lokální proměnné #index |
iload_0 | 1a | 0001 1010 | → hodnota | načíst int hodnota z lokální proměnné 0 | |
iload_1 | 1b | 0001 1011 | → hodnota | načíst int hodnota z lokální proměnné 1 | |
iload_2 | 1c | 0001 1100 | → hodnota | načíst int hodnota z lokální proměnné 2 | |
iload_3 | 1d | 0001 1101 | → hodnota | načíst int hodnota z lokální proměnné 3 | |
impdep1 | fe | 1111 1110 | vyhrazeno pro operace závislé na implementaci v debuggerech; by se neměl objevit v žádném souboru třídy | ||
impdep2 | ff | 1111 1111 | vyhrazeno pro operace závislé na implementaci v debuggerech; by se neměl objevit v žádném souboru třídy | ||
imul | 68 | 0110 1000 | hodnota1, hodnota2 → výsledek | vynásobte dvě celá čísla | |
ineg | 74 | 0111 0100 | hodnota → výsledek | negovat int | |
instanceof | c1 | 1100 0001 | 2: indexbyte1, indexbyte2 | objectref → výsledek | určuje, zda je objekt objectref je daného typu identifikovaného odkazem na třídu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
invokedynamic | ba | 1011 1010 | 4: indexbyte1, indexbyte2, 0, 0 | [arg1, [arg2 ...]] → výsledek | vyvolá dynamickou metodu a umístí výsledek do zásobníku (může být neplatný); metoda je identifikována odkazem na metodu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
vyvolatrozhraní | b9 | 1011 1001 | 4: indexbyte1, indexbyte2, count, 0 | objectref, [arg1, arg2, ...] → výsledek | vyvolá metodu rozhraní na objektu objectref a umístí výsledek do zásobníku (může být neplatný); metoda rozhraní je identifikována odkazem na metodu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
speciální | b7 | 1011 0111 | 2: indexbyte1, indexbyte2 | objectref, [arg1, arg2, ...] → výsledek | vyvolat instanci metody na objektu objectref a umístí výsledek do zásobníku (může být neplatný); metoda je identifikována odkazem na metodu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
invokestatický | b8 | 1011 1000 | 2: indexbyte1, indexbyte2 | [arg1, arg2, ...] → výsledek | vyvolat statickou metodu a umístit výsledek do zásobníku (může být neplatný); metoda je identifikována odkazem na metodu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
invokevirtual | b6 | 1011 0110 | 2: indexbyte1, indexbyte2 | objectref, [arg1, arg2, ...] → výsledek | vyvolat virtuální metodu na objektu objectref a umístí výsledek do zásobníku (může být neplatný); metoda je identifikována odkazem na metodu index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
ior | 80 | 1000 0000 | hodnota1, hodnota2 → výsledek | bitový int NEBO | |
irem | 70 | 0111 0000 | hodnota1, hodnota2 → výsledek | zbytek logického int | |
zpět | ac | 1010 1100 | hodnota → [prázdný] | vrátit celé číslo z metody | |
ishl | 78 | 0111 1000 | hodnota1, hodnota2 → výsledek | int posun doleva | |
ishr | 7a | 0111 1010 | hodnota1, hodnota2 → výsledek | int aritmetický posun doprava | |
Istore | 36 | 0011 0110 | 1: index | hodnota → | obchod int hodnota do proměnné #index |
istore_0 | 3b | 0011 1011 | hodnota → | obchod int hodnota do proměnné 0 | |
istore_1 | 3c | 0011 1100 | hodnota → | obchod int hodnota do proměnné 1 | |
istore_2 | 3d | 0011 1101 | hodnota → | obchod int hodnota do proměnné 2 | |
istore_3 | 3e | 0011 1110 | hodnota → | obchod int hodnota do proměnné 3 | |
isub | 64 | 0110 0100 | hodnota1, hodnota2 → výsledek | int odečíst | |
iushr | 7c | 0111 1100 | hodnota1, hodnota2 → výsledek | int logický posun doprava | |
ixor | 82 | 1000 0010 | hodnota1, hodnota2 → výsledek | int xor | |
jsr | a8 | 1010 1000 | 2: branchbyte1, branchbyte2 | → adresa | skočit na podprogram v odbočka (podepsané krátké zkonstruované z nepodepsaných bajtů branchbyte1 << 8 | branchbyte2) a vložte zpáteční adresu do zásobníku |
jsr_w | c9 | 1100 1001 | 4: branchbyte1, branchbyte2, branchbyte3, branchbyte4 | → adresa | skočit na podprogram v odbočka (signed int konstruováno z nepodepsaných bajtů branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4) a vložte zpáteční adresu do zásobníku |
l2d | 8a | 1000 1010 | hodnota → výsledek | převést dlouhý na dvojitý | |
l2f | 89 | 1000 1001 | hodnota → výsledek | převést dlouhý na plovák | |
l2i | 88 | 1000 1000 | hodnota → výsledek | převést dlouhý na int | |
ladd | 61 | 0110 0001 | hodnota1, hodnota2 → výsledek | přidat dvě dlouhé | |
zátěž | 2f | 0010 1111 | arrayref, index → hodnota | načíst dlouhý z pole | |
přistát | 7f | 0111 1111 | hodnota1, hodnota2 → výsledek | bitový A ze dvou dlouhých | |
vydržet | 50 | 0101 0000 | arrayref, index, hodnota → | uložit dlouhý do pole | |
lcmp | 94 | 1001 0100 | hodnota1, hodnota2 → výsledek | stiskněte 0, pokud jsou dvě délky stejné, 1, pokud je hodnota1 větší než hodnota2, -1 jinak | |
lconst_0 | 09 | 0000 1001 | → 0L | tlačit 0L (číslo nula s typem dlouho) do zásobníku | |
lconst_1 | 0a | 0000 1010 | → 1L | tlačit 1L (číslo jeden s typem dlouho) do zásobníku | |
ldc | 12 | 0001 0010 | 1: index | → hodnota | tlačit konstantu #index z konstantního fondu (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle nebo dynamicky vypočítaná konstanta) do zásobníku |
ldc_w | 13 | 0001 0011 | 2: indexbyte1, indexbyte2 | → hodnota | tlačit konstantu #index z konstantního fondu (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle nebo dynamicky vypočítaná konstanta) do zásobníku (široký index je konstruován jako indexbyte1 << 8 | indexbyte2) |
ldc2_w | 14 | 0001 0100 | 2: indexbyte1, indexbyte2 | → hodnota | tlačit konstantu #index z konstantního fondu (dvojitá, dlouhá nebo dynamicky vypočítaná konstanta) do zásobníku (široký index je konstruován jako indexbyte1 << 8 | indexbyte2) |
ldiv | 6d | 0110 1101 | hodnota1, hodnota2 → výsledek | rozdělit dvě dlouhé | |
Načíst | 16 | 0001 0110 | 1: index | → hodnota | načíst dlouhou hodnotu z místní proměnné #index |
lload_0 | 1e | 0001 1110 | → hodnota | načíst dlouhou hodnotu z lokální proměnné 0 | |
lload_1 | 1f | 0001 1111 | → hodnota | načíst dlouhou hodnotu z lokální proměnné 1 | |
lload_2 | 20 | 0010 0000 | → hodnota | načíst dlouhou hodnotu z lokální proměnné 2 | |
lload_3 | 21 | 0010 0001 | → hodnota | načíst dlouhou hodnotu z lokální proměnné 3 | |
lmul | 69 | 0110 1001 | hodnota1, hodnota2 → výsledek | znásobte dvě délky | |
lneg | 75 | 0111 0101 | hodnota → výsledek | negovat dlouho | |
vyhledávací spínač | ab | 1010 1011 | 8+: <0–3 bajty odsazení>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npair4, páry párování-offset ... | klíč → | cílová adresa je vyhledána z tabulky pomocí klíče a provádění pokračuje z instrukce na této adrese |
lor | 81 | 1000 0001 | hodnota1, hodnota2 → výsledek | bitové NEBO dvou délek | |
lrem | 71 | 0111 0001 | hodnota1, hodnota2 → výsledek | zbytek rozdělení na dvě délky | |
pozdní návrat | inzerát | 1010 1101 | hodnota → [prázdný] | vrátit dlouhou hodnotu | |
lshl | 79 | 0111 1001 | hodnota1, hodnota2 → výsledek | bitový posun vlevo od dlouhého hodnota1 podle int hodnota2 pozic | |
lshr | 7b | 0111 1011 | hodnota1, hodnota2 → výsledek | bitový posun vpravo o dlouhý hodnota1 podle int hodnota2 pozic | |
obchod | 37 | 0011 0111 | 1: index | hodnota → | uložit dlouho hodnota v lokální proměnné #index |
lstore_0 | 3f | 0011 1111 | hodnota → | uložit dlouho hodnota v lokální proměnné 0 | |
lstore_1 | 40 | 0100 0000 | hodnota → | uložit dlouho hodnota v lokální proměnné 1 | |
lstore_2 | 41 | 0100 0001 | hodnota → | uložit dlouho hodnota v lokální proměnné 2 | |
lstore_3 | 42 | 0100 0010 | hodnota → | uložit dlouho hodnota v lokální proměnné 3 | |
lsub | 65 | 0110 0101 | hodnota1, hodnota2 → výsledek | odečíst dvě délky | |
lushr | 7d | 0111 1101 | hodnota1, hodnota2 → výsledek | bitový posun vpravo o dlouhý hodnota1 podle int hodnota2 pozice, nepodepsané | |
lxor | 83 | 1000 0011 | hodnota1, hodnota2 → výsledek | bitový XOR dvou délek | |
monitorovací centrum | c2 | 1100 0010 | objectref → | zadejte monitor objektu ("chytit zámek" - začátek synchronizované () sekce) | |
monitorexit | c3 | 1100 0011 | objectref → | výstupní monitor objektu ("uvolnit zámek" - konec synchronizované () sekce) | |
multianewarray | c5 | 1100 0101 | 3: indexbyte1, indexbyte2, rozměry | count1, [count2, ...] → arrayref | vytvořit nové pole rozměry rozměry typu identifikované odkazem na třídu v konstantním fondu index (indexbyte1 << 8 | indexbyte2); velikosti každé dimenze jsou označeny count1, [count2, atd.] |
Nový | bb | 1011 1011 | 2: indexbyte1, indexbyte2 | → reference objektu | vytvořit nový objekt typu identifikovaného odkazem na třídu v konstantním fondu index (indexbyte1 << 8 | indexbyte2) |
newarray | před naším letopočtem | 1011 1100 | 1: atype | count → arrayref | vytvořit nové pole s počet prvky primitivního typu identifikované pomocí typ |
nop | 00 | 0000 0000 | [Žádná změna] | neprovádějte žádnou operaci | |
pop | 57 | 0101 0111 | hodnota → | zahoďte nejvyšší hodnotu v zásobníku | |
pop2 | 58 | 0101 1000 | {hodnota2, hodnota1} → | zahoďte první dvě hodnoty v zásobníku (nebo jednu hodnotu, pokud je dvojitá nebo dlouhá) | |
Putfield | b5 | 1011 0101 | 2: indexbyte1, indexbyte2 | objectref, value → | nastavit pole na hodnota v objektu objektová reference, kde je pole identifikováno odkazem na pole index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
putstatický | b3 | 1011 0011 | 2: indexbyte1, indexbyte2 | hodnota → | nastavit statické pole na hodnota ve třídě, kde je pole identifikováno odkazem na pole index ve stálém bazénu (indexbyte1 << 8 | indexbyte2) |
ret | a9 | 1010 1001 | 1: index | [Žádná změna] | pokračovat v provádění z adresy převzaté z místní proměnné #index (asymetrie s jsr je úmyslná) |
vrátit se | b1 | 1011 0001 | → [prázdné] | return void z metody | |
pytel | 35 | 0011 0101 | arrayref, index → hodnota | načíst z pole | |
sastore | 56 | 0101 0110 | arrayref, index, hodnota → | uložit short to array | |
sipush | 11 | 0001 0001 | 2: byte1, byte2 | → hodnota | vložit zkratku do zásobníku jako celé číslo hodnota |
vyměnit | 5f | 0101 1111 | hodnota2, hodnota1 → hodnota1, hodnota2 | zamění dvě hlavní slova v zásobníku (všimněte si, že hodnota1 a hodnota2 nesmí být dvojité nebo dlouhé) | |
stolní čarodějnice | aa | 1010 1010 | 16+: [0–3 bajty odsazení], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, skokové posuny ... | index → | pokračovat v provádění z adresy v tabulce na offsetu index |
široký | c4 | 1100 0100 | 3/5: operační kód, indexbyte1, indexbyte2 nebo iinc, indexbyte1, indexbyte2, countbyte1, countbyte2 | [stejné jako u příslušných pokynů] | vykonat operační kód, kde operační kód je buď iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore nebo ret, ale předpokládejme index je 16 bitů; nebo provést iinc, kde index je 16 bitů a konstanta, o kterou se zvyšuje, je o 16 bitů krátká |
(beze jména) | cb-fd | tyto hodnoty nejsou aktuálně přiřazeny pro operační kódy a jsou vyhrazeny pro budoucí použití |
Viz také
- Jazelle DBX (Direct Bytecode eXecution), funkce, která na hardwaru provádí některé bajtové kódy Java v některých procesorech ARM9
- Společný střední jazyk (CIL), podobná specifikace bytecode, která běží na CLR .NET Framework
- Překladače virtuálních strojů typu C na Java