2013-04-14 3 views
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을 출력하는 이유를 아는 사람이 있습니까?

답변

0

약간의 조사 후에이를 수정했습니다. 올바르게 사용되지 않은 명령이 메소드 내에있었습니다.