Списки инструкций байт-кода 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