Списки инструкций байт-кода Java - Java bytecode instruction listings
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Это список инструкций, составляющих Байт-код Java, абстрактный машинный язык, который в конечном итоге выполняется Виртуальная машина Java. Байт-код Java генерируется из языков, работающих на Платформа Java, в первую очередь Язык программирования Java.
Обратите внимание, что любое указанное «значение» относится к 32-битному int согласно набору инструкций Java.
Мнемонический | Код операции (в шестнадцатеричный ) | Код операции (в двоичном формате) | Другие байты [количество]: [метки операндов] | Куча [до] → [после] | Описание |
---|---|---|---|---|---|
аалоад | 32 | 0011 0010 | ссылка на массив, индекс → значение | загрузить в стек ссылку из массива | |
aastore | 53 | 0101 0011 | ссылка на массив, индекс, значение → | сохранить ссылку в массиве | |
aconst_null | 01 | 0000 0001 | → ноль | толкнуть ноль ссылка на стек | |
нагрузка | 19 | 0001 1001 | 1: индекс | → ссылка на объект | загрузить ссылку в стек из локальной переменной #индекс |
aload_0 | 2а | 0010 1010 | → ссылка на объект | загрузить ссылку в стек из локальной переменной 0 | |
aload_1 | 2b | 0010 1011 | → ссылка на объект | загрузить ссылку в стек из локальной переменной 1 | |
aload_2 | 2c | 0010 1100 | → ссылка на объект | загрузить ссылку в стек из локальной переменной 2 | |
aload_3 | 2d | 0010 1101 | → ссылка на объект | загрузить ссылку в стек из локальной переменной 3 | |
заново | bd | 1011 1101 | 2: indexbyte1, indexbyte2 | счет → ссылка на массив | создать новый массив ссылок длины считать и тип компонента, идентифицированный ссылкой на класс индекс (indexbyte1 << 8 | indexbyte2) в постоянном бассейне |
возвращение | b0 | 1011 0000 | ссылка на объект → [пусто] | вернуть ссылку из метода | |
длина массива | быть | 1011 1110 | ссылка на массив → длина | получить длину массива | |
склад | 3а | 0011 1010 | 1: индекс | ссылка на объект → | сохранить ссылку в локальную переменную #индекс |
astore_0 | 4b | 0100 1011 | ссылка на объект → | сохранить ссылку в локальную переменную 0 | |
astore_1 | 4c | 0100 1100 | ссылка на объект → | сохранить ссылку в локальную переменную 1 | |
astore_2 | 4d | 0100 1101 | ссылка на объект → | сохранить ссылку в локальную переменную 2 | |
astore_3 | 4e | 0100 1110 | ссылка на объект → | сохранить ссылку в локальную переменную 3 | |
бежать | парень | 1011 1111 | ссылка на объект → [пусто], ссылка на объект | выдает ошибку или исключение (обратите внимание, что остальная часть стека очищается, остается только ссылка на Throwable) | |
балоад | 33 | 0011 0011 | ссылка на массив, индекс → значение | загрузить байтовое или логическое значение из массива | |
Bastore | 54 | 0101 0100 | ссылка на массив, индекс, значение → | хранить байтовое или логическое значение в массиве | |
бипуш | 10 | 0001 0000 | 1: байт | → значение | толкнуть байт в стек как целое число ценить |
точка останова | ок | 1100 1010 | зарезервировано для точек останова в отладчиках Java; не должен появляться ни в каком файле класса | ||
Caload | 34 | 0011 0100 | ссылка на массив, индекс → значение | загрузить символ из массива | |
кастора | 55 | 0101 0101 | ссылка на массив, индекс, значение → | сохранить символ в массив | |
проверка | c0 | 1100 0000 | 2: indexbyte1, indexbyte2 | ссылка на объект → ссылка на объект | проверяет, есть ли ссылка на объект имеет определенный тип, ссылка на класс которого находится в постоянном пуле по адресу индекс (indexbyte1 << 8 | indexbyte2) |
d2f | 90 | 1001 0000 | значение → результат | преобразовать двойной к плавать | |
d2i | 8e | 1000 1110 | значение → результат | преобразовать double в int | |
d2l | 8f | 1000 1111 | значение → результат | преобразовать двойное в длинное | |
папа | 63 | 0110 0011 | значение1, значение2 → результат | добавить два дубля | |
далоад | 31 | 0011 0001 | ссылка на массив, индекс → значение | загрузить двойник из массива | |
dastore | 52 | 0101 0010 | ссылка на массив, индекс, значение → | сохранить двойное значение в массиве | |
dcmpg | 98 | 1001 1000 | значение1, значение2 → результат | сравнить два двойных, 1 на NaN | |
dcmpl | 97 | 1001 0111 | значение1, значение2 → результат | сравнить два двойных, -1 на NaN | |
dconst_0 | 0e | 0000 1110 | → 0.0 | толкать константу 0.0 (а двойной) в стек | |
dconst_1 | 0f | 0000 1111 | → 1.0 | толкать константу 1.0 (а двойной) в стек | |
ddiv | 6f | 0110 1111 | значение1, значение2 → результат | разделить два дубля | |
загружать | 18 | 0001 1000 | 1: индекс | → значение | загрузить двойной ценить из локальной переменной #индекс |
dload_0 | 26 | 0010 0110 | → значение | загрузить дубль из локальной переменной 0 | |
dload_1 | 27 | 0010 0111 | → значение | загрузить дубль из локальной переменной 1 | |
dload_2 | 28 | 0010 1000 | → значение | загрузить дубль из локальной переменной 2 | |
dload_3 | 29 | 0010 1001 | → значение | загрузить дубль из локальной переменной 3 | |
Дмуль | 6b | 0110 1011 | значение1, значение2 → результат | умножить два двойных | |
днег | 77 | 0111 0111 | значение → результат | свести на нет двойной | |
дрем | 73 | 0111 0011 | значение1, значение2 → результат | получить остаток от деления между двумя двойными | |
dreturn | аф | 1010 1111 | значение → [пусто] | вернуть двойное значение из метода | |
dstore | 39 | 0011 1001 | 1: индекс | значение → | хранить двойной ценить в локальную переменную #индекс |
dstore_0 | 47 | 0100 0111 | значение → | сохранить двойное значение в локальной переменной 0 | |
dstore_1 | 48 | 0100 1000 | значение → | сохранить двойное значение в локальной переменной 1 | |
dstore_2 | 49 | 0100 1001 | значение → | сохранить двойное значение в локальной переменной 2 | |
dstore_3 | 4а | 0100 1010 | значение → | сохранить двойное значение в локальной переменной 3 | |
dsub | 67 | 0110 0111 | значение1, значение2 → результат | вычесть двойное из другого | |
обман | 59 | 0101 1001 | значение → значение, значение | дублировать значение в верхней части стека | |
dup_x1 | 5а | 0101 1010 | значение2, значение1 → значение1, значение2, значение1 | вставить копию верхнего значения в стек на два значения сверху. value1 и value2 не должны быть типа double или long. | |
dup_x2 | 5b | 0101 1011 | значение3, значение2, значение1 → значение1, значение3, значение2, значение1 | вставить копию верхнего значения в стек два (если value2 - double или long, он также занимает запись value3) или три значения (если value2 ни double, ни long) сверху | |
dup2 | 5c | 0101 1100 | {значение2, значение1} → {значение2, значение1}, {значение2, значение1} | дублировать два верхних слова стека (два значения, если value1 не является ни двойным, ни длинным; одно значение, если value1 является двойным или длинным) | |
dup2_x1 | 5d | 0101 1101 | значение3, {значение2, значение1} → {значение2, значение1}, значение3, {значение2, значение1} | продублируйте два слова и вставьте под третьим словом (см. объяснение выше) | |
dup2_x2 | 5e | 0101 1110 | {значение4, значение3}, {значение2, значение1} → {значение2, значение1}, {значение4, значение3}, {значение2, значение1} | продублируйте два слова и вставьте под четвертым словом | |
f2d | 8d | 1000 1101 | значение → результат | преобразовать число с плавающей запятой в двойное | |
f2i | 8b | 1000 1011 | значение → результат | преобразовать float в int | |
f2l | 8c | 1000 1100 | значение → результат | преобразовать float в длинный | |
причуда | 62 | 0110 0010 | значение1, значение2 → результат | добавить два поплавка | |
фалоад | 30 | 0011 0000 | ссылка на массив, индекс → значение | загрузить поплавок из массива | |
fastore | 51 | 0101 0001 | ссылка на массив, индекс, значение → | хранить поплавок в массиве | |
fcmpg | 96 | 1001 0110 | значение1, значение2 → результат | сравнить два числа с плавающей запятой, 1 на NaN | |
fcmpl | 95 | 1001 0101 | значение1, значение2 → результат | сравнить два числа с плавающей запятой, -1 на NaN | |
fconst_0 | 0b | 0000 1011 | → 0,0f | толкать 0,0f в стеке | |
fconst_1 | 0c | 0000 1100 | → 1.0f | толкать 1.0f в стеке | |
fconst_2 | 0d | 0000 1101 | → 2.0f | толкать 2.0f в стеке | |
fdiv | 6e | 0110 1110 | значение1, значение2 → результат | разделить два поплавка | |
fload | 17 | 0001 0111 | 1: индекс | → значение | загрузить поплавок ценить из локальной переменной #индекс |
fload_0 | 22 | 0010 0010 | → значение | загрузить поплавок ценить из локальной переменной 0 | |
fload_1 | 23 | 0010 0011 | → значение | загрузить поплавок ценить из локальной переменной 1 | |
fload_2 | 24 | 0010 0100 | → значение | загрузить поплавок ценить из локальной переменной 2 | |
fload_3 | 25 | 0010 0101 | → значение | загрузить поплавок ценить из локальной переменной 3 | |
фмуль | 6а | 0110 1010 | значение1, значение2 → результат | умножить два числа | |
fneg | 76 | 0111 0110 | значение → результат | отрицать поплавок | |
frem | 72 | 0111 0010 | значение1, значение2 → результат | получить остаток от деления между двумя поплавками | |
раздражение | ае | 1010 1110 | значение → [пусто] | вернуть поплавок | |
магазин | 38 | 0011 1000 | 1: индекс | значение → | хранить поплавок ценить в локальную переменную #индекс |
fstore_0 | 43 | 0100 0011 | значение → | хранить поплавок ценить в локальную переменную 0 | |
fstore_1 | 44 | 0100 0100 | значение → | хранить поплавок ценить в локальную переменную 1 | |
fstore_2 | 45 | 0100 0101 | значение → | хранить поплавок ценить в локальную переменную 2 | |
fstore_3 | 46 | 0100 0110 | значение → | хранить поплавок ценить в локальную переменную 3 | |
fsub | 66 | 0110 0110 | значение1, значение2 → результат | вычесть два числа с плавающей запятой | |
Getfield | b4 | 1011 0100 | 2: indexbyte1, indexbyte2 | ссылка на объект → значение | получить поле ценить объекта ссылка на объект, где поле идентифицируется ссылкой на поле в пуле констант индекс (indexbyte1 << 8 | indexbyte2) |
getstatic | Би 2 | 1011 0010 | 2: indexbyte1, indexbyte2 | → значение | получить статическое поле ценить класса, где поле идентифицируется ссылкой на поле в пуле констант индекс (indexbyte1 << 8 | indexbyte2) |
идти к | а7 | 1010 0111 | 2: branchbyte1, branchbyte2 | [без изменений] | переходит к другой инструкции на ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
goto_w | c8 | 1100 1000 | 4: ветвьбайт1, ветвьбайт2, ветвьбайт3, ветвьбайт4 | [без изменений] | переходит к другой инструкции на ответвление (подписанное int, построенное из байтов без знака branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4) |
i2b | 91 | 1001 0001 | значение → результат | преобразовать int в байт | |
i2c | 92 | 1001 0010 | значение → результат | преобразовать int в символ | |
i2d | 87 | 1000 0111 | значение → результат | преобразовать int в double | |
i2f | 86 | 1000 0110 | значение → результат | преобразовать int в float | |
i2l | 85 | 1000 0101 | значение → результат | преобразовать int в длинное | |
i2s | 93 | 1001 0011 | значение → результат | преобразовать int в короткий | |
я добавить | 60 | 0110 0000 | значение1, значение2 → результат | добавить две целые | |
iaload | 2e | 0010 1110 | ссылка на массив, индекс → значение | загрузить int из массива | |
я и | 7e | 0111 1110 | значение1, значение2 → результат | выполнить побитовое И для двух целых чисел | |
iastore | 4f | 0100 1111 | ссылка на массив, индекс, значение → | сохранить int в массив | |
iconst_m1 | 02 | 0000 0010 | → -1 | загрузить в стек значение int −1 | |
iconst_0 | 03 | 0000 0011 | → 0 | загрузить значение int 0 в стек | |
iconst_1 | 04 | 0000 0100 | → 1 | загрузить значение int 1 в стек | |
iconst_2 | 05 | 0000 0101 | → 2 | загрузить значение int 2 в стек | |
iconst_3 | 06 | 0000 0110 | → 3 | загрузить значение int 3 в стек | |
iconst_4 | 07 | 0000 0111 | → 4 | загрузить в стек значение int 4 | |
iconst_5 | 08 | 0000 1000 | → 5 | загрузить значение int 5 в стек | |
идив | 6c | 0110 1100 | значение1, значение2 → результат | разделить два целых числа | |
if_acmpeq | а5 | 1010 0101 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если ссылки равны, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_acmpne | а6 | 1010 0110 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если ссылки не равны, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmpeq | 9f | 1001 1111 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если целые числа равны, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmpge | а2 | 1010 0010 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если значение1 Больше или равно значение2, перейти к инструкции по адресу ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmpgt | а3 | 1010 0011 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если значение1 больше, чем значение2, перейти к инструкции по адресу ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmple | а4 | 1010 0100 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если значение1 меньше или равно значение2, перейти к инструкции по адресу ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmplt | а1 | 1010 0001 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если значение1 меньше чем значение2, перейти к инструкции по адресу ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
if_icmpne | а0 | 1010 0000 | 2: branchbyte1, branchbyte2 | значение1, значение2 → | если целые числа не равны, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifeq | 99 | 1001 1001 | 2: branchbyte1, branchbyte2 | значение → | если ценить равно 0, переход к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifge | 9c | 1001 1100 | 2: branchbyte1, branchbyte2 | значение → | если ценить больше или равно 0, переход к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifgt | 9d | 1001 1101 | 2: branchbyte1, branchbyte2 | значение → | если ценить больше 0, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifle | 9e | 1001 1110 | 2: branchbyte1, branchbyte2 | значение → | если ценить меньше или равно 0, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
iflt | 9b | 1001 1011 | 2: branchbyte1, branchbyte2 | значение → | если ценить меньше 0, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifne | 9а | 1001 1010 | 2: branchbyte1, branchbyte2 | значение → | если ценить не 0, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifnonnull | c7 | 1100 0111 | 2: branchbyte1, branchbyte2 | значение → | если ценить не равно нулю, перейти к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
ifnull | c6 | 1100 0110 | 2: branchbyte1, branchbyte2 | значение → | если ценить имеет значение null, переход к инструкции в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) |
iinc | 84 | 1000 0100 | 2: индекс, const | [Без изменений] | увеличить локальную переменную #индекс по подписанному байту const |
iload | 15 | 0001 0101 | 1: индекс | → значение | загрузить int ценить из локальной переменной #индекс |
iload_0 | 1а | 0001 1010 | → значение | загрузить int ценить из локальной переменной 0 | |
iload_1 | 1b | 0001 1011 | → значение | загрузить int ценить из локальной переменной 1 | |
iload_2 | 1c | 0001 1100 | → значение | загрузить int ценить из локальной переменной 2 | |
iload_3 | 1д | 0001 1101 | → значение | загрузить int ценить из локальной переменной 3 | |
impdep1 | fe | 1111 1110 | зарезервировано для зависимых от реализации операций в отладчиках; не должен появляться ни в каком файле класса | ||
impdep2 | ff | 1111 1111 | зарезервировано для зависимых от реализации операций в отладчиках; не должен появляться ни в каком файле класса | ||
имул | 68 | 0110 1000 | значение1, значение2 → результат | умножить два целых числа | |
инег | 74 | 0111 0100 | значение → результат | отрицать int | |
экземпляр | c1 | 1100 0001 | 2: indexbyte1, indexbyte2 | ссылка на объект → результат | определяет, ссылка на объект имеет данный тип, идентифицированный ссылкой на класс индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
invokedynamic | ба | 1011 1010 | 4: indexbyte1, indexbyte2, 0, 0 | [arg1, [arg2 ...]] → результат | вызывает динамический метод и помещает результат в стек (может быть недействительным); метод идентифицируется ссылкой на метод индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
invokeinterface | b9 | 1011 1001 | 4: indexbyte1, indexbyte2, count, 0 | ссылка на объект, [аргумент1, аргумент2, ...] → результат | вызывает метод интерфейса для объекта ссылка на объект и помещает результат в стек (может быть недействительным); метод интерфейса идентифицируется ссылкой на метод индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
вызывает особый | b7 | 1011 0111 | 2: indexbyte1, indexbyte2 | ссылка на объект, [аргумент1, аргумент2, ...] → результат | вызвать метод экземпляра объекта ссылка на объект и помещает результат в стек (может быть недействительным); метод идентифицируется ссылкой на метод индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
invokestatic | b8 | 1011 1000 | 2: indexbyte1, indexbyte2 | [arg1, arg2, ...] → результат | вызвать статический метод и поместить результат в стек (может быть недействительным); метод идентифицируется ссылкой на метод индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
invokevirtual | b6 | 1011 0110 | 2: indexbyte1, indexbyte2 | ссылка на объект, [аргумент1, аргумент2, ...] → результат | вызвать виртуальный метод объекта ссылка на объект и помещает результат в стек (может быть недействительным); метод идентифицируется ссылкой на метод индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
ior | 80 | 1000 0000 | значение1, значение2 → результат | побитовое int ИЛИ | |
ирем | 70 | 0111 0000 | значение1, значение2 → результат | логический остаток int | |
я возвращаюсь | ac | 1010 1100 | значение → [пусто] | вернуть целое число из метода | |
ишл | 78 | 0111 1000 | значение1, значение2 → результат | int сдвиг влево | |
ишр | 7а | 0111 1010 | значение1, значение2 → результат | int арифметический сдвиг вправо | |
istore | 36 | 0011 0110 | 1: индекс | значение → | магазин int ценить в переменную #индекс |
istore_0 | 3b | 0011 1011 | значение → | магазин int ценить в переменную 0 | |
istore_1 | 3c | 0011 1100 | значение → | магазин int ценить в переменную 1 | |
istore_2 | 3D | 0011 1101 | значение → | магазин int ценить в переменную 2 | |
istore_3 | 3e | 0011 1110 | значение → | магазин int ценить в переменную 3 | |
isub | 64 | 0110 0100 | значение1, значение2 → результат | int вычесть | |
иушр | 7c | 0111 1100 | значение1, значение2 → результат | int логический сдвиг вправо | |
иксор | 82 | 1000 0010 | значение1, значение2 → результат | int xor | |
jsr | а8 | 1010 1000 | 2: branchbyte1, branchbyte2 | → адрес | перейти к подпрограмме в ответвление (короткое со знаком, построенное из байтов без знака branchbyte1 << 8 | branchbyte2) и поместите адрес возврата в стек |
jsr_w | c9 | 1100 1001 | 4: ветвьбайт1, ветвьбайт2, ветвьбайт3, ветвьбайт4 | → адрес | перейти к подпрограмме в ответвление (подписанное int, построенное из байтов без знака branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4) и поместите адрес возврата в стек |
l2d | 8а | 1000 1010 | значение → результат | преобразовать длинную в двойную | |
l2f | 89 | 1000 1001 | значение → результат | преобразовать длинное число в плавающее | |
l2i | 88 | 1000 1000 | значение → результат | преобразовать long в int | |
лестница | 61 | 0110 0001 | значение1, значение2 → результат | добавить два длинных | |
лалоад | 2f | 0010 1111 | ссылка на массив, индекс → значение | загрузить long из массива | |
земельные участки | 7f | 0111 1111 | значение1, значение2 → результат | побитовый И двух длинных | |
магазин | 50 | 0101 0000 | ссылка на массив, индекс, значение → | сохранить длинный массив в массив | |
lcmp | 94 | 1001 0100 | значение1, значение2 → результат | нажмите 0, если два типа long совпадают, 1, если значение1 больше значения2, в противном случае -1 | |
lconst_0 | 09 | 0000 1001 | → 0L | толкать 0L (номер нуль с типом длинный) в стек | |
lconst_1 | 0а | 0000 1010 | → 1л | толкать 1л (номер один с типом длинный) в стек | |
ldc | 12 | 0001 0010 | 1: индекс | → значение | выдвинуть постоянную #индекс из пула констант (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle или динамически вычисляемая константа) в стек |
ldc_w | 13 | 0001 0011 | 2: indexbyte1, indexbyte2 | → значение | подтолкнуть константу #индекс из пула констант (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle или динамически вычисляемая константа) в стек (широкий индекс построен как indexbyte1 << 8 | indexbyte2) |
ldc2_w | 14 | 0001 0100 | 2: indexbyte1, indexbyte2 | → значение | выдвинуть константу #индекс из пула констант (double, long или динамически вычисляемая константа) в стек (широкий индекс построен как indexbyte1 << 8 | indexbyte2) |
ldiv | 6d | 0110 1101 | значение1, значение2 → результат | разделить две длинные позиции | |
lload | 16 | 0001 0110 | 1: индекс | → значение | загрузить длинное значение из локальной переменной #индекс |
lload_0 | 1e | 0001 1110 | → значение | загрузить длинное значение из локальной переменной 0 | |
lload_1 | 1f | 0001 1111 | → значение | загрузить длинное значение из локальной переменной 1 | |
lload_2 | 20 | 0010 0000 | → значение | загрузить длинное значение из локальной переменной 2 | |
lload_3 | 21 | 0010 0001 | → значение | загрузить длинное значение из локальной переменной 3 | |
Имуль | 69 | 0110 1001 | значение1, значение2 → результат | умножить две длинные | |
lneg | 75 | 0111 0101 | значение → результат | свести на нет длинный | |
поисковый переключатель | ab | 1010 1011 | 8+: <0–3 байта заполнения>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, пары совпадение-смещение ... | ключ → | целевой адрес ищется из таблицы с помощью ключа, и выполнение продолжается с инструкции по этому адресу |
лор | 81 | 1000 0001 | значение1, значение2 → результат | побитовое ИЛИ двух длинных чисел | |
lrem | 71 | 0111 0001 | значение1, значение2 → результат | остаток от деления двух длинных позиций | |
я возвращаюсь | объявление | 1010 1101 | значение → [пусто] | вернуть длинное значение | |
лшл | 79 | 0111 1001 | значение1, значение2 → результат | побитовый сдвиг влево от длинного значение1 по int значение2 позиции | |
lshr | 7b | 0111 1011 | значение1, значение2 → результат | побитовый сдвиг вправо длинного значение1 по int значение2 позиции | |
lstore | 37 | 0011 0111 | 1: индекс | значение → | хранить долго ценить в локальной переменной #индекс |
lstore_0 | 3f | 0011 1111 | значение → | хранить долго ценить в локальной переменной 0 | |
lstore_1 | 40 | 0100 0000 | значение → | хранить долго ценить в локальной переменной 1 | |
lstore_2 | 41 | 0100 0001 | значение → | хранить долго ценить в локальной переменной 2 | |
lstore_3 | 42 | 0100 0010 | значение → | хранить долго ценить в локальной переменной 3 | |
lsub | 65 | 0110 0101 | значение1, значение2 → результат | вычесть две длинные | |
пышный | 7d | 0111 1101 | значение1, значение2 → результат | побитовый сдвиг вправо длинного значение1 по int значение2 должности, без знака | |
lxor | 83 | 1000 0011 | значение1, значение2 → результат | побитовый XOR двух длинных | |
наблюдатель | c2 | 1100 0010 | ссылка на объект → | войти в монитор объекта («захватить замок» - запуск раздела synchronized ()) | |
monitorexit | c3 | 1100 0011 | ссылка на объект → | выйти из монитора для объекта («снять блокировку» - конец раздела synchronized ()) | |
multianewarray | c5 | 1100 0101 | 3: indexbyte1, indexbyte2, размеры | count1, [count2, ...] → ссылка на массив | создать новый массив размеры размеры типа, идентифицированные ссылкой на класс в постоянном пуле индекс (indexbyte1 << 8 | indexbyte2); размеры каждого измерения обозначены count1, [count2, так далее.] |
новый | bb | 1011 1011 | 2: indexbyte1, indexbyte2 | → ссылка на объект | создать новый объект типа, идентифицированного ссылкой на класс в постоянном пуле индекс (indexbyte1 << 8 | indexbyte2) |
newarray | до н.э | 1011 1100 | 1: нетип | счет → ссылка на массив | создать новый массив с считать элементы примитивного типа, идентифицированные тип |
нет | 00 | 0000 0000 | [Без изменений] | не выполнять никаких операций | |
поп | 57 | 0101 0111 | значение → | отбросить верхнее значение в стеке | |
pop2 | 58 | 0101 1000 | {значение2, значение1} → | отбросить два верхних значения в стеке (или одно значение, если оно двойное или длинное) | |
путфилд | b5 | 1011 0101 | 2: indexbyte1, indexbyte2 | ссылка на объект, значение → | установить поле на ценить в объекте ссылка на объект, где поле идентифицируется ссылкой на поле индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
путстатический | b3 | 1011 0011 | 2: indexbyte1, indexbyte2 | значение → | установить статическое поле в ценить в классе, где поле идентифицируется ссылкой на поле индекс в постоянном бассейне (indexbyte1 << 8 | indexbyte2) |
Ret | а9 | 1010 1001 | 1: индекс | [Без изменений] | продолжить выполнение с адреса, взятого из локальной переменной #индекс (асимметрия с jsr преднамерена) |
возвращаться | b1 | 1011 0001 | → [пусто] | вернуть void из метода | |
салат | 35 | 0011 0101 | ссылка на массив, индекс → значение | короткая загрузка из массива | |
sastore | 56 | 0101 0110 | ссылка на массив, индекс, значение → | хранить до массива | |
сипуш | 11 | 0001 0001 | 2: байт1, байт2 | → значение | поместите короткое замыкание в стек как целое число ценить |
замена | 5f | 0101 1111 | значение2, значение1 → значение1, значение2 | меняет местами два верхних слова в стеке (обратите внимание, что значение1 и значение2 не должны быть двойными или длинными) | |
переключатель стола | аа | 1010 1010 | 16+: [0–3 байта заполнения], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, смещения перехода ... | индекс → | продолжить выполнение с адреса в таблице по смещению индекс |
широкий | c4 | 1100 0100 | 3/5: код операции, indexbyte1, indexbyte2 или же iinc, indexbyte1, indexbyte2, countbyte1, countbyte2 | [то же, что и для соответствующих инструкций] | выполнять код операции, куда код операции это iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore или ret, но предположим, что индекс 16 бит; или выполнить iinc, где индекс составляет 16 бит, а константа, на которую нужно увеличивать, является короткой длиной 16 бит со знаком |
(без имени) | CB-FD | эти значения в настоящее время не назначены для кодов операций и зарезервированы для использования в будущем. |
Смотрите также
- Джазель DBX (Direct Bytecode eXecution), функция, которая выполняет некоторые байт-коды Java на аппаратном уровне на некоторых процессорах ARM9.
- Общий промежуточный язык (CIL), аналогичная спецификация байт-кода, работающая в среде CLR .NET Framework.
- Компиляторы виртуальных машин C в Java