【问题标题】:IJVM ILOAD instruction does not load proper valueIJVM ILOAD 指令未加载正确的值
【发布时间】:2013-04-14 21:17:32
【问题描述】:

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

代码如下:

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

【问题讨论】:

    标签: java assembly jvm bytecode java-bytecode-asm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多