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 は、整数の絶対値を計算するメソッドです。

abs の最初の呼び出しは正常に機能し、 の絶対値を0xC0適切に計算して、 を出力し0x11ます。ただし、2 番目の呼び出しはそうではなく、 を出力します0x77

エミュレータを使用して命令ごとにスタック フレームを観察すると、2 番目の ILOAD が最初の命令0x00000000ではなく、スタックにプッシュされてしまいます。0xffffffc0これは、関数の最初の呼び出しのみが実際に適切な値を出力することを意味します。

0x00000000後続の呼び出しで代わりに出力する理由を誰かが知っていますか?

4

1 に答える 1