3

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

这是代码:

BIPUSH 0xC0  
DUP
ISTORE i1 
ISTORE i2 

LDC_W OBJREF
ILOAD i1  
INVOKEVIRTUAL 
OUT

LDC_W OBJREF
ILOAD i2   
INVOKEVIRTUAL abs
OUT

其中 abs 是一种计算整数绝对值的方法。

0xC0第一次调用 abs 工作正常,并正确计算输出的绝对值0x11。但是,第二次调用没有,并且输出0x77.

当我使用模拟器逐条指令观察堆栈帧时,第二个 ILOAD 最终会推0x00000000送到堆栈上,而不是0xffffffc0像第一条指令那样。这意味着只有函数的第一次调用才会真正输出正确的值。

有谁知道为什么它0x00000000会在后续调用中输出?

4

1 回答 1

0

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

于 2013-04-15T06:28:44.953 回答