Jump to content

Список инструкций байт-кода Java

Это список инструкций, составляющих байт-код Java , абстрактный машинный язык, который в конечном итоге выполняется виртуальной машиной Java . [ 1 ] Байт-код Java генерируется на основе языков, работающих на платформе Java , в первую очередь языка программирования Java .

Обратите внимание, что любое указанное «значение» относится к 32-битному int согласно набору инструкций Java.

Мнемоника Код операции
шестнадцатеричном формате )
Код операции (в двоичном формате) Другие байты
[число]: [метки операндов]
Куча
[до] → [после]
Описание
загрузит 32 0011 0010 ссылка на массив, индекс → значение загрузить в стек ссылку из массива
магазин 53 0101 0011 ссылка на массив, индекс, значение → сохранить ссылку в массиве
aconst_null 01 0000 0001 → ноль поместить нулевую ссылку в стек
загрузить 19 0001 1001 1: индекс → ссылка на объект загрузить ссылку в стек из локальной переменной #index
aload_0 0010 1010 → ссылка на объект загрузить ссылку в стек из локальной переменной 0
aload_1 0010 1011 → ссылка на объект загрузить ссылку в стек из локальной переменной 1
aload_2 0010 1100 → ссылка на объект загрузить ссылку в стек из локальной переменной 2
aload_3 0010 1101 → ссылка на объект загрузить ссылку в стек из локальной переменной 3
Аневаррей др. 1011 1101 2: индексный байт1, индексный байт2 счетчик → ссылка на массив создайте новый массив ссылок длины и типа компонента, идентифицированного индексом ссылки на класс ( индексный байт1 << 8 | indexbyte2 ) в пуле констант
вернуться б0 1011 0000 ссылка на объект → [пусто] вернуть ссылку из метода
длина массива быть 1011 1110 ссылка на массив → длина получить длину массива
ястреб-тетеревятник 0011 1010 1: индекс ссылка на объект → сохранить ссылку в локальную переменную #index
ястреб-тетеревятник_0 0100 1011 ссылка на объект → сохранить ссылку в локальную переменную 0
ястреб-тетеревятник_1 0100 1100 ссылка на объект → сохранить ссылку в локальную переменную 1
ястреб-тетеревятник_2 0100 1101 ссылка на объект → сохранить ссылку в локальную переменную 2
ястреб-тетеревятник_3 0100 1110 ссылка на объект → сохранить ссылку в локальную переменную 3
бросать парень 1011 1111 ссылка на объект → [пусто], ссылка на объект выдает ошибку или исключение (обратите внимание, что остальная часть стека очищается, остается только ссылка на Throwable)
загрузка 33 0011 0011 ссылка на массив, индекс → значение загрузить байтовое или логическое значение из массива
ставки 54 0101 0100 ссылка на массив, индекс, значение → сохранить байтовое или логическое значение в массиве
бипуш 10 0001 0000 1: байт → ценность поместить байт в стек как целочисленное значение
точка останова что 1100 1010 зарезервировано для точек останова в отладчиках Java; не должно появляться ни в одном файле класса
груз 34 0011 0100 ссылка на массив, индекс → значение загрузить символ из массива
бобер 55 0101 0101 ссылка на массив, индекс, значение → сохранить символ в массиве
проверка с0 1100 0000 2: индексный байт1, индексный байт2 ссылка на объект → ссылка на объект проверяет, относится ли ссылка к объекту определенного типа, ссылка на класс которого находится в пуле констант по индексу ( индексный байт1 << 8 | индексбайт2 )
d2f 90 1001 0000 значение → результат преобразовать двойное число в число с плавающей запятой
d2i 1000 1110 значение → результат преобразовать двойное число в целое число
d2l 8 ф 1000 1111 значение → результат преобразовать двойное значение в длинное
отец 63 0110 0011 значение1, значение2 → результат добавить два дубля
далоад 31 0011 0001 ссылка на массив, индекс → значение загрузить двойной из массива
дасторе 52 0101 0010 ссылка на массив, индекс, значение → сохранить двойное значение в массиве
dcmpg 98 1001 1000 значение1, значение2 → результат сравнить два дубля, 1 на NaN
dcmpl 97 1001 0111 значение1, значение2 → результат сравнить два дубля, -1 на NaN
dconst_0 0000 1110 → 0.0 поместите константу 0.0 ( double ) в стек
dconst_1 0000 1111 → 1.0 поместите константу 1.0 ( double ) в стек
нет 0110 1111 значение1, значение2 → результат разделить два дубля
загрузить 18 0001 1000 1: индекс → ценность загрузить двойное значение из локальной переменной #index
dload_0 26 0010 0110 → ценность загрузить двойное значение из локальной переменной 0
dload_1 27 0010 0111 → ценность загрузить двойное значение из локальной переменной 1
dload_2 28 0010 1000 → ценность загрузить двойное значение из локальной переменной 2
dload_3 29 0010 1001 → ценность загрузить двойное значение из локальной переменной 3
Мистер 0110 1011 значение1, значение2 → результат умножить два двойных числа
сегодня 77 0111 0111 значение → результат отрицать двойное значение
трамвай 73 0111 0011 значение1, значение2 → результат получить остаток от деления между двумя даблами
вернуться из 1010 1111 значение → [пусто] вернуть двойное значение из метода
магазин 39 0011 1001 1: индекс значение → сохранить двойное значение в локальной переменной #index
dstore_0 47 0100 0111 значение → сохранить двойное значение в локальной переменной 0
dstore_1 48 0100 1000 значение → сохранить двойное значение в локальной переменной 1
dstore_2 49 0100 1001 значение → сохранить двойное значение в локальной переменной 2
dstore_3 0100 1010 значение → сохранить двойное значение в локальной переменной 3
dsub 67 0110 0111 значение1, значение2 → результат вычесть дубль из другого
обман 59 0101 1001 ценность → ценность, ценность дублировать значение на вершине стека
дубликат_x1 0101 1010 значение2, значение1 → значение1, значение2, значение1 вставьте копию верхнего значения в стек на два значения сверху. значение1 и значение2 не должны иметь тип double или long.
дубликат_x2 0101 1011 значение3, значение2, значение1 → значение1, значение3, значение2, значение1 вставьте копию верхнего значения в стек два (если значение2 имеет двойное или длинное значение, оно также занимает запись значения3) или три значения (если значение2 не является ни двойным, ни длинным) сверху
дубликат2 0101 1100 {значение2, значение1} → {значение2, значение1}, {значение2, значение1} дублировать два верхних слова стека (два значения, если значение value1 не двойное и не длинное; одно значение, если значение value1 двойное или длинное)
dup2_x1 0101 1101 значение3, {значение2, значение1} → {значение2, значение1}, значение3, {значение2, значение1} продублируйте два слова и вставьте их под третье слово (см. объяснение выше)
dup2_x2 0101 1110 {значение4, значение3}, {значение2, значение1} → {значение2, значение1}, {значение4, значение3}, {значение2, значение1} продублируйте два слова и вставьте под четвертое слово
f2d 1000 1101 значение → результат преобразовать число с плавающей запятой в двойное
f2i 1000 1011 значение → результат преобразовать число с плавающей запятой в целое число
f2l 1000 1100 значение → результат преобразовать число с плавающей запятой в длинное
причуда 62 0110 0010 значение1, значение2 → результат добавить два поплавка
фалоад 30 0011 0000 ссылка на массив, индекс → значение загрузить число с плавающей запятой из массива
быстрый 51 0101 0001 ссылка на массив, индекс, значение → хранить число с плавающей запятой в массиве
fcmpg 96 1001 0110 значение1, значение2 → результат сравнить два числа с плавающей запятой, 1 на NaN
fcmpl 95 1001 0101 значение1, значение2 → результат сравнить два числа с плавающей запятой, -1 на NaN
fconst_0 0000 1011 → 0,0ф поместите 0.0f в стек
fconst_1 0000 1100 → 1.0ф поместите 1.0f в стек
fconst_2 0000 1101 → 2.0ф поместите 2.0f в стек
fdiv 0110 1110 значение1, значение2 → результат разделить два числа с плавающей запятой
загружать 17 0001 0111 1: индекс → ценность загрузить значение с плавающей запятой из локальной переменной #index
fload_0 22 0010 0010 → ценность загрузить значение с плавающей запятой из локальной переменной 0
fload_1 23 0010 0011 → ценность загрузить значение с плавающей запятой из локальной переменной 1
fload_2 24 0010 0100 → ценность загрузить значение с плавающей запятой из локальной переменной 2
fload_3 25 0010 0101 → ценность загрузить значение с плавающей запятой из локальной переменной 3
фм 0110 1010 значение1, значение2 → результат умножить два числа с плавающей запятой
фнег 76 0111 0110 значение → результат отрицать число с плавающей запятой
вперед 72 0111 0010 значение1, значение2 → результат получить остаток от деления между двумя числами с плавающей запятой
возвращаться но 1010 1110 значение → [пусто] вернуть число с плавающей запятой
fstore 38 0011 1000 1: индекс значение → сохранить значение с плавающей запятой в локальной переменной #index
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 → результат вычесть два числа с плавающей запятой
получить поле б4 1011 0100 2: индексный байт1, индексный байт2 ссылка на объект → значение поля получить значение объекта objectref , где поле идентифицируется ссылкой на поле в индексе пула констант ( индексный байт1 << 8 | индексбайт2 )
получить статический б2 1011 0010 2: индексный байт1, индексный байт2 → ценность статического поля получить значение класса, где поле идентифицируется ссылкой на поле в индексе пула констант ( индексный байт1 << 8 | индексбайт2 )
перейти к a7 1010 0111 2: байт1, байт2 [без изменений] переходит к другой инструкции по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
goto_w с8 1100 1000 4: байт1, байт2, байт3, байт4. [без изменений] переходит к другой инструкции по смещению ветвления (знаковое целое число, созданное из беззнаковых байтов веткабайт1 << 24 | веткабайт2 << 16 | веткабайт3 << 8 | веткабайт4 )
i2b 91 1001 0001 значение → результат преобразовать целое число в байт
i2c 92 1001 0010 значение → результат преобразовать int в символ
i2d 87 1000 0111 значение → результат преобразовать int в double
i2f 86 1000 0110 значение → результат преобразовать int в число с плавающей запятой
i2l 85 1000 0101 значение → результат преобразовать int в long
i2s 93 1001 0011 значение → результат преобразовать целое число в короткое
и т. д. 60 0110 0000 значение1, значение2 → результат добавить два целых числа
загрузить 0010 1110 ссылка на массив, индекс → значение загрузить int из массива
я ианд 0111 1110 значение1, значение2 → результат выполнить побитовое И над двумя целыми числами
магазин 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 в стек
идив 0110 1100 значение1, значение2 → результат разделить два целых числа
if_acmpeq а5 1010 0101 2: байт1, байт2 значение1, значение2 → если ссылки равны, перейти к инструкции по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_acmpne а6 1010 0110 2: байт1, байт2 значение1, значение2 → если ссылки не равны, перейти к инструкции по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmpeq 1001 1111 2: байт1, байт2 значение1, значение2 → если целые числа равны, перейти к инструкции по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmpge а2 1010 0010 2: байт1, байт2 значение1, значение2 → если значение1 больше или равно значению2 , перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmpgt а3 1010 0011 2: байт1, байт2 значение1, значение2 → если значение1 больше, чем значение2 , перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmple a4 1010 0100 2: байт1, байт2 значение1, значение2 → если значение1 меньше или равно значению2 , перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmplt а1 1010 0001 2: байт1, байт2 значение1, значение2 → если значение1 меньше значения2 , перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
if_icmpne а0 1010 0000 2: байт1, байт2 значение1, значение2 → если целые числа не равны, переход к инструкции по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
ifeq 99 1001 1001 2: байт1, байт2 значение → если значение равно 0, перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
если бы 1001 1100 2: байт1, байт2 значение → если значение больше или равно 0, переход к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
если бы 9 дней 1001 1101 2: байт1, байт2 значение → если значение больше 0, переход к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
если 1001 1110 2: байт1, байт2 значение → если значение меньше или равно 0, перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
если 1001 1011 2: байт1, байт2 значение → если значение меньше 0, переход к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
еслине 1001 1010 2: байт1, байт2 значение → если значение не равно 0, перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
еслинонуль с7 1100 0111 2: байт1, байт2 значение → если значение не равно нулю, перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
еслинуль с6 1100 0110 2: байт1, байт2 значение → если значение равно нулю, перейти к инструкции по смещению ветвления (короткое значение со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | веткабайт2 )
Inc. 84 1000 0100 2: индекс, константа [Без изменений] увеличить локальную переменную #index на байт со знаком const
загрузить 15 0001 0101 1: индекс → ценность int загрузить значение из локальной переменной #index
iload_0 0001 1010 → ценность int загрузить значение из локальной переменной 0
iload_1 0001 1011 → ценность int загрузить значение из локальной переменной 1
iload_2 0001 1100 → ценность int загрузить значение из локальной переменной 2
iload_3 0001 1101 → ценность int загрузить значение из локальной переменной 3
импдеп1 фе 1111 1110 зарезервировано для операций, зависящих от реализации, в отладчиках; не должно появляться ни в одном файле класса
импдеп2 фф 1111 1111 зарезервировано для операций, зависящих от реализации, в отладчиках; не должно появляться ни в одном файле класса
низкий 68 0110 1000 значение1, значение2 → результат умножить два целых числа
ineg 74 0111 0100 значение → результат отрицать целое число
экземпляр с1 1100 0001 2: индексный байт1, индексный байт2 ссылка на объект → результат определяет, имеет ли объект objectref заданный тип, идентифицируемый индексом ссылки на класс в пуле констант ( индексный байт1 << 8 | индексбайт2 )
вызыватьдинамический нет 1011 1010 4: индексный байт1, индексный байт2, 0, 0 [arg1, arg2, ...] → результат вызывает динамический метод и помещает результат в стек (может быть пустым); метод идентифицируется по индексу ссылки на метод в пуле констант ( индексный байт1 << 8 | индексбайт2 )
вызватьинтерфейс б9 1011 1001 4: индексный байт1, индексныйбайт2, счетчик, 0 objectref, [arg1, arg2, ...] → результат вызывает метод интерфейса объекта objectref и помещает результат в стек (может быть недействительным); метод интерфейса идентифицируется по индексу ссылки на метод в пуле констант ( индексный байт1 << 8 | индексбайт2 )
вызватьспециальный b7 1011 0111 2: индексный байт1, индексный байт2 objectref, [arg1, arg2, ...] → результат вызвать метод экземпляра объекта objectref и поместить результат в стек (может быть недействительным); метод идентифицируется по индексу ссылки на метод в пуле констант ( индексный байт1 << 8 | индексбайт2 )
вызватьстатический б8 1011 1000 2: индексный байт1, индексный байт2 [arg1, arg2, ...] → результат вызвать статический метод и поместить результат в стек (может быть пустым); метод идентифицируется по индексу ссылки на метод в пуле констант ( индексный байт1 << 8 | индексбайт2 )
вызвать виртуальный б6 1011 0110 2: индексный байт1, индексный байт2 objectref, [arg1, arg2, ...] → результат вызвать виртуальный метод для ссылки на объект и поместить результат в стек (может быть недействительным); метод идентифицируется по индексу ссылки на метод в пуле констант ( индексный байт1 << 8 | индексбайт2 )
йор 80 1000 0000 значение1, значение2 → результат побитовое целое ИЛИ
Ирем 70 0111 0000 значение1, значение2 → результат логический остаток
возвращаться и 1010 1100 значение → [пусто] вернуть целое число из метода
работа 78 0111 1000 значение1, значение2 → результат внутренний сдвиг влево
Ишр 0111 1010 значение1, значение2 → результат int арифметический сдвиг вправо
хранить 36 0011 0110 1: индекс значение → int сохранить значение в переменную #index
istore_0 0011 1011 значение → int сохранить значение в переменную 0
istore_1 0011 1100 значение → int сохранить значение в переменную 1
istore_2 3d 0011 1101 значение → int сохранить значение в переменную 2
istore_3 0011 1110 значение → int сохранить значение в переменную 3
isub 64 0110 0100 значение1, значение2 → результат целое вычитание
юшр 0111 1100 значение1, значение2 → результат int логический сдвиг вправо
Игорь 82 1000 0010 значение1, значение2 → результат int xor
jsr а8 1010 1000 2: байт1, байт2 → адрес переход к подпрограмме по смещению ветвления (короткое со знаком, созданное из беззнаковых байтов веткабайт1 << 8 | Branchbyte2 ) и поместите адрес возврата в стек.
jsr_w с9 1100 1001 4: байт1, байт2, байт3, байт4. → адрес переход к подпрограмме по смещению ветвления (знаковое целое число, созданное из беззнаковых байтов веткабайт1 << 24 | веткабайт2 << 16 | веткабайт3 << 8 | Branchbyte4 ) и поместите адрес возврата в стек.
л2д 1000 1010 значение → результат преобразовать длинное значение в двойное
л2ф 89 1000 1001 значение → результат преобразовать long в float
л2и 88 1000 1000 значение → результат преобразовать long в int
парень 61 0110 0001 значение1, значение2 → результат добавить два длинных слова
загрузить 0010 1111 ссылка на массив, индекс → значение загрузить long из массива
земля 0111 1111 значение1, значение2 → результат побитовое И двух длинных значений
Ластор 50 0101 0000 ссылка на массив, индекс, значение → сохранить длинное значение в массиве
lcmp 94 1001 0100 значение1, значение2 → результат нажмите 0, если два длинных значения одинаковы, 1, если значение 1 больше значения 2, -1 в противном случае
lconst_0 09 0000 1001 → 0Л поместите 0L (число ноль с типом long ) в стек
lconst_1 0000 1010 → 1л поместите 1L (номер один с типом long ) в стек
ООО 12 0001 0010 1: индекс → ценность поместите константу #index из пула констант (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle или динамически вычисляемую константу) в стек
ldc_w 13 0001 0011 2: индексный байт1, индексный байт2 → ценность помещать константу #index из пула констант (String, int, float, Class, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle или динамически вычисляемую константу) в стек (широкий индекс создается как индексный байт1 << 8 | индексбайт2 )
ldc2_w 14 0001 0100 2: индексный байт1, индексный байт2 → ценность помещать константу #index из пула констант (двойную, длинную или динамически вычисляемую константу) в стек (широкий индекс создается как индексный байт1 << 8 | индексбайт2 )
Львов 0110 1101 значение1, значение2 → результат разделить две длинные позиции
загрузить 16 0001 0110 1: индекс → ценность загрузить длинное значение из локальной переменной #index
lload_0 0001 1110 → ценность загрузить длинное значение из локальной переменной 0
lload_1 0001 1111 → ценность загрузить длинное значение из локальной переменной 1
lload_2 20 0010 0000 → ценность загрузить длинное значение из локальной переменной 2
lload_3 21 0010 0001 → ценность загрузить длинное значение из локальной переменной 3
лмуль 69 0110 1001 значение1, значение2 → результат умножить два длинных слова
лнег 75 0111 0101 значение → результат отрицать длинное
переключатель поиска аб 1010 1011 8+: <заполнение 0–3 байта>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, пары совпадение-смещение... ключ → целевой адрес ищется в таблице с использованием ключа, и выполнение продолжается с инструкции по этому адресу
их 81 1000 0001 значение1, значение2 → результат побитовое ИЛИ двух длинных значений
Ирем 71 0111 0001 значение1, значение2 → результат остаток от деления двух длинных позиций
вернуться объявление 1010 1101 значение → [пусто] вернуть длинное значение
лшл 79 0111 1001 значение1, значение2 → результат побитовый сдвиг влево от длинного значения1 на целого значения2 позиции
лшр 0111 1011 значение1, значение2 → результат побитовый сдвиг вправо от длинного значения1 на целого значения2 позиции
магазин 37 0011 0111 1: индекс значение → сохранить длинное значение в локальной переменной #index
lstore_0 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 → результат вычесть две длинные позиции
лушр 0111 1101 значение1, значение2 → результат побитовый сдвиг вправо от длинного значения1 на позиции целого значения2 , без знака
lxor 83 1000 0011 значение1, значение2 → результат побитовое исключающее ИЛИ двух длинных значений
мониторы с2 1100 0010 ссылка на объект → войти в монитор объекта («захватить замок» — начало раздела Synchronized())
мониторвыход с3 1100 0011 ссылка на объект → выйти из монитора для объекта («снять блокировку» – конец раздела Synchronized())
multianewarray с5 1100 0101 3: индексный байт1, индексныйбайт2, размеры count1, [count2,...] → ссылка на массив создать новый массив измерений типа, определенного ссылкой на класс в индексе постоянного пула ( индексный байт1 << 8 | индексбайт2 ); размеры каждого измерения идентифицируются count1 , [ count2 и т. д.]
новый бб 1011 1011 2: индексный байт1, индексный байт2 → ссылка на объект создать новый объект типа, определенного ссылкой на класс в индексе постоянного пула ( индексный байт1 << 8 | индексбайт2 )
Ньюрей до нашей эры 1011 1100 1: тип счетчик → ссылка на массив создать новый массив с элементами счетчика примитивного типа, идентифицируемого atype
нет 00 0000 0000 [Без изменений] не выполнять никаких операций
поп 57 0101 0111 значение → отбросить верхнее значение в стеке
поп2 58 0101 1000 {значение2, значение1} → отбросить два верхних значения в стеке (или одно значение, если оно двойное или длинное)
путфилд б5 1011 0101 2: индексный байт1, индексный байт2 ссылка на объект, значение → установить значение поля в объекте objectref , где поле идентифицируется индексом ссылки на поле в пуле констант ( индексный байт1 << 8 | индексбайт2 )
путстатический б3 1011 0011 2: индексный байт1, индексный байт2 значение → установить статическое поле в значение в классе, где поле идентифицируется индексом ссылки на поле в пуле констант ( индексный байт1 << 8 | индексбайт2 )
верно а9 1010 1001 1: индекс [Без изменений] продолжить выполнение с адреса, взятого из локальной переменной #index (асимметрия с jsr намеренна)
возвращаться б1 1011 0001 → [пусто] вернуть void из метода
салоад 35 0011 0101 ссылка на массив, индекс → значение загрузить короткое из массива
састор 56 0101 0110 ссылка на массив, индекс, значение → сохранить короткое значение в массиве
выпивать 11 0001 0001 2: байт1, байт2 → ценность поместить короткое замыкание в стек как целое значение
менять 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, смещения перехода... индекс → продолжить выполнение с адреса в таблице по индексу смещения
широкий с4 1100 0100 3/5: код операции, индексный байт1, индексныйбайт2
или
iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
[то же, что и соответствующие инструкции] выполнить код операции , где код операции — это iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore или ret, но предположим, что индекс 16-битный; или выполните iinc, где индекс равен 16 битам, а константа, на которую нужно увеличить, представляет собой 16-битное короткое число со знаком.
(без имени) CB-FD эти значения в настоящее время не назначены для кодов операций и зарезервированы для использования в будущем.

Устарело в Java 7 (основной класс версии 51). [ 2 ] Они не появятся в файлах классов, созданных более новым компилятором. ret явно не устарел, но бесполезен без jsr и jsr_w коды операций.

См. также

[ редактировать ]
  • Jazelle DBX (Direct Bytecode eXecution), функция, которая выполняет некоторые байт-коды Java аппаратно на некоторых процессорах ARM9.
  • Common Intermediate Language (CIL), аналогичная спецификация байт-кода, работающая в среде CLR .NET Framework.
  1. ^ «Спецификация виртуальной машины Java® – Java SE 12 Edition» . Проверено 22 мая 2021 г.
  2. ^ «Глава 4. Формат файла класса 4.9.1. Статические ограничения» . Проверено 22 мая 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 208e506e0b7bfaf8e3c49980804bdf67__1683129720
URL1:https://arc.ask3.ru/arc/aa/20/67/208e506e0b7bfaf8e3c49980804bdf67.html
Заголовок, (Title) документа по адресу, URL1:
List of Java bytecode instructions - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)