Как мне интерпретировать «стек операндов» в документах набора инструкций JVM?

avatar
user9214779
1 июля 2021 в 16:45
107
2
2

Я читаю главу 6. Набор инструкций виртуальной машины Java

Когда я прочитал "Стек операндов" в отрывке ниже, я не уверен, как интерпретировать этот раздел. Особенно стрелки,значит ли это внутри стека и вне стека?

mnemonic
Operation
    Short description of the instruction

Format

    mnemonic
    operand1
    operand2
    ...
Forms
    mnemonic = opcode

Operand Stack
    ...  value1, value2 →

    ...  value3

Description
    A longer description detailing constraints on operand stack contents or constant pool entries, the operation performed, the type of the results, etc.
Источник
Basil Bourque
1 июля 2021 в 16:49
0

Неясное название. Перепишите, чтобы резюмировать вашу конкретную техническую проблему.

Ответы (2)

avatar
1 июля 2021 в 16:50
1

Это объясняется выше

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

...  value1, value2 →

...  result

показывает операцию, которая начинается со значения2 поверх операнда стек со значением1 прямо под ним. В результате выполнения инструкция, значение1 и значение2 извлекаются из стека операндов и заменяется значением результата, которое было рассчитано инструкция. Оставшаяся часть стека операндов, представленная многоточие (...), не зависит от выполнения инструкции.

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

avatar
Eugene
1 июля 2021 в 16:49
1

Думаю, это объясняется в разделе "Примечания":

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

... значение1, значение2 →

... результат

показывает операцию, которая начинается с того, что значение2 находится на вершине стека операндов, а значение1 находится сразу под ним.