3
MIC1 아키텍처의 IJVM에서 정수의 절대 값을 계산하는 간단한 프로그램을 작성하고 있습니다. 나는 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 정수의 절대 값을 계산하는 방법이다 : 여기
코드이다.abs의 첫 번째 호출은 올바르게 작동하고 0xC0
의 절대 값을 올바르게 계산하여 0x11
을 출력합니다. 그러나 두 번째 호출은 수행하지 않으며 0x77
을 출력합니다.
에뮬레이터를 사용하여 명령어별로 스택 프레임을 관찰하면 두 번째 ILOAD는 첫 번째 명령어와 마찬가지로 0xffffffc0
대신 스택에 0x00000000
을 밀어 넣습니다. 이것은 함수의 첫 번째 호출 만 실제로 적절한 값을 출력한다는 것을 의미합니다.
이후 전화를 걸 때 대신 0x00000000
을 출력하는 이유를 아는 사람이 있습니까?