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最終將0x00000000
壓入堆棧,而不是像第一條指令那樣將0xffffffc0
推送到堆棧。這意味着只有該函數的第一個調用實際上輸出適當的值。
有誰知道爲什麼它輸出0x00000000
,而不是在隨後的調用?