我正在为 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
会在后续调用中输出?