Я пишу простую программу для вычисления абсолютного значения нескольких целых чисел в IJVM для архитектуры MIC1. Я использую эмулятор, расположенный here.Инструкция IJVM ILOAD не загружает правильное значение
Вот код:
BIPUSH 0xC0
DUP
ISTORE i1
ISTORE i2
LDC_W OBJREF
ILOAD i1
INVOKEVIRTUAL
OUT
LDC_W OBJREF
ILOAD i2
INVOKEVIRTUAL abs
OUT
Где абс представляет собой метод, чтобы вычислить абсолютное значение целого числа.
Первый вызов abs работает нормально и вычисляет абсолютное значение 0xC0
правильно, выводя 0x11
. Однако второго вызова нет, и выдает 0x77
.
Когда я наблюдаю за инструкцией по кадру стека, используя эмулятор, второй ILOAD заканчивается нажатием 0x00000000
на стек вместо 0xffffffc0
, как и первая инструкция. Это означает, что только первый вызов функции фактически выводит правильное значение.
Кто-нибудь знает, почему он выдает 0x00000000
вместо этого в последующих звонках?