Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | ИндексСпецификация Виртуальной машины JavaTM


A B C D F Г Я J L М. N P R S T W

ГЛАВА 6

Набор команд виртуальной машины Java


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


6.1 Предположения: Значение "Must"

Описание каждой инструкции всегда дается в контексте кода виртуальной машины Java, который удовлетворяет статические и структурные ограничения Главы 4," class Формат файла." В описании отдельных инструкций виртуальной машины Java мы часто утверждаем, что некоторая ситуация "должна", или "не должен" иметь место: "value2 должен иметь тип int." Ограничения Главы 4 гарантируют, что все такие надежды будут фактически оправданы. Если некоторое ограничение ("должный" или "не должен") в описании инструкции не удовлетворяется во время выполнения, поведение виртуальной машины Java неопределено.

Виртуальная машина Java проверяет, что код виртуальной машины Java удовлетворяет статические и структурные ограничения во время ссылки, используя a class верификатор файла (см. Раздел 4.9, "Проверка class Файлы"). Таким образом виртуальная машина Java только попытается выполнить код от допустимого class файлы. Выполнение проверки во время ссылки привлекательно в этом, проверки выполняются только однажды, существенно уменьшая объем работы, который должен быть сделан во время выполнения. Другие стратегии реализации возможны, при условии, что они выполняют Спецификацию языка JavaTM и Спецификацию Виртуальной машины JavaTM.


6.2 Зарезервированные Коды операций

В дополнение к кодам операций инструкций, определенных позже в этой главе, которые используются в class файлы (см. Главу 4," class Формат файла"), три кодов операций резервируются для внутреннего пользования реализацией виртуальной машины Java. Если Sun расширит набор команд виртуальной машины Java в будущем, то эти зарезервированные коды операций, как гарантируют, не будут использоваться.

У двух из зарезервированных кодов операций, числа 254 (0xfe) и 255 (0xff), есть мнемоника impdep1 и impdep2, соответственно. Эти инструкции предназначаются, чтобы обеспечить "черные ходы" или прерывания к специфичной для реализации функциональности, реализованной в программном и аппаратном обеспечении, соответственно. Третий зарезервированный код операции, номер 202 (0xca), имеет мнемоническую точку останова и предназначается, чтобы использоваться отладчиками, чтобы реализовать точки останова.

Хотя эти коды операций были зарезервированы, они могут использоваться только в реализации виртуальной машины Java. Они не могут появиться в допустимом class файлы. Инструменты, такие как отладчики или генераторы кода JIT (§3.13), который мог бы непосредственно взаимодействовать с кодом виртуальной машины Java, который был уже загружен и выполнен, могут встретиться с этими кодами операций. Такие инструменты должны попытаться вести себя корректно, если они встречаются с какой-либо из этих зарезервированных инструкций.


6.3 Ошибки Виртуальной машины

Реализация виртуальной машины Java бросает объект, который является экземпляром подкласса класса VirtualMachineError когда внутреннее ограничение ошибки или ресурса предотвращает это от корректной реализации языка программирования Java. Спецификация виртуальной машины Java не может предсказать, где с ограничениями ресурса или внутренними ошибками можно встретиться и не передают под мандат точно, когда о них можно сообщить. Таким образом, любая из ошибок виртуальной машины, перечисленных как подклассы VirtualMachineError в Разделе 2.16.4 может быть брошен в любое время во время работы виртуальной машины Java.


6.4 Формат Описаний Инструкции

Инструкции виртуальной машины Java представляются в этой главе записями формы, показанной в рисунке 6.1, в алфавитном порядке и каждое начало на новой странице. Например:


мнемосхема

Работа

Краткое описание инструкции

Формат

мнемосхема
operand1
operand2
...


Формы

мнемосхема = код операции

Стек операнда

..., value1, value2..., value3

Описание

Более длинное описание, детализирующее ограничения на операнд, складывает содержание или постоянные записи пула, выполняемая работа, тип результатов, и т.д.

Соединение Исключений

Если какие-либо исключения соединения могут быть выданы выполнением этой инструкции, они устанавливаются от одного в строку в порядке, в который они должны быть брошены.

Исключения на этапе выполнения

Если какие-либо исключения на этапе выполнения могут быть брошены выполнением инструкции, они устанавливаются от одного в строку в порядке, в который они должны быть брошены.

Кроме соединения и исключений на этапе выполнения, если таковые вообще имеются, перечисленный для инструкции, та инструкция не должна бросить исключения на этапе выполнения за исключением экземпляров VirtualMachineError или его подклассы.

Примечания

Комментарии не строго часть спецификации инструкции обойдены как примечания в конце описания.

Каждая ячейка в схеме формата инструкции представляет единственный 8-разрядный байт. Мнемосхема инструкции является своим именем. Его код операции является его числовым представлением и дается и в десятичных и в шестнадцатеричных формах. Только числовое представление фактически присутствует в коде виртуальной машины Java в a class файл.

Имейте в виду, что есть "операнды", сгенерированные во время компиляции и встроены в пределах инструкций виртуальной машины Java, так же как "операндов", вычисленных во время выполнения и предоставленный на стеке операнда. Хотя они предоставляются из нескольких различных областей, все эти операнды представляют ту же самую вещь: значения, которые будут управляться на выполняемой инструкцией виртуальной машины Java. Неявно беря многие из его операндов от его стека операнда, вместо того, чтобы представить их явно в его скомпилированном коде как дополнительные байты операнда, числа регистра, и т.д., код виртуальной машины Java остается компактным.

Некоторые инструкции представляются как элементы семейства связанных инструкций, совместно использующих единственное описание, формат, и схему стека операнда. Также, семейство инструкций включает несколько кодов операций и мнемоники кода операции; только мнемосхема семейства появляется в схеме формата инструкции, и отдельная строка форм перечисляет всю задействованную мнемонику и коды операций. Например, строка форм для lconst _ <l> семейство инструкций, давая мнемосхему и информацию о коде операции для этих двух инструкций в том семействе (lconst_0 и lconst_1),

Формы

                    lconst_0 = 9 (0x9)
                    lconst_1 = 10 (0xa)

В описании инструкций виртуальной машины Java эффект выполнения инструкции на стеке операнда (§3.6.2) текущего фрейма (§3.6) представляется дословно со стеком, растущим слева направо и каждым значением, представленным отдельно. Таким образом,

Стек операнда

                    ..., value1, value2..., результат

показывает работу, которая начинается при наличии value2 сверху стека операнда с value1 только ниже этого. В результате выполнения инструкции value1 и value2 выталкиваются от стека операнда и заменяются значением результата, которое было вычислено инструкцией. Остаток от стека операнда, представленного замещающим знаком (...), незатронут выполнением инструкции.

Значения типов long и double представляются единственной записью на стеке 1 операнда


1 Примечание, что, в первом выпуске этой спецификации, значений на стеке операнда типов long и double были каждый представлены в схеме стека двумя записями.

Содержание | Предыдущий | Следующий | Индекс

Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com

free hit counter