2013-04-14 16 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最終將0x00000000壓入堆棧,而不是像第一條指令那樣將0xffffffc0推送到堆棧。這意味着只有該函數的第一個調用實際上輸出適當的值。

有誰知道爲什麼它輸出0x00000000,而不是在隨後的調用?

回答

0

經過一番調查,我解決了這個問題 - 方法中有一條指令沒有正確使用。