IJVM ILOAD指令未加载正确的值

时间:2013-04-14 21:17:32

标签: java assembly jvm bytecode java-bytecode-asm

我正在编写一个简单的程序来计算MICJ架构的IJVM中几个整数的绝对值。我正在使用位于here的模拟器。

以下是代码:

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最终将0x00000000推送到堆栈而不是0xffffffc0,就像第一条指令一样。这意味着只有函数的第一次调用实际输出正确的值。

是否有人知道为什么它会在后续调用中输出0x00000000

1 个答案:

答案 0 :(得分:0)

经过一番调查后我解决了这个问题 - 方法中有一条未正确使用的指令。