3

我目前正在使用一些 Java 字节码。我已经阅读了两个操作码:dupdup2. 如果我理解正确,那么它们之间的唯一区别是第一个只复制一个堆栈词,而第二个复制一对堆栈词。这很好,但它们每个都有自己的子操作码(dup_x1dup2_x2...)。

dup_x2例如,当我查看 和 的函数时dup2_x1,它们似乎在做同样的事情:按顺序复制前三个值(因此从值val4, val3, val2, val1中有val4, val3, val2, val1, val3, val2, val1)。我很困惑,因为没有理由为同一操作定义两个操作码。

那么这些操作码是做什么用的呢?他们的行动有任何官方参考吗?请帮忙。

4

1 回答 1

4

他们的行动有任何官方参考吗?

当然有!它是 JVM 规范——特别是第 6.5 节

我不会在这里复制它。点击链接并自己阅读。但基本思想是dup_x1anddup_x2变体将重复的值/值插入到堆栈的下方。

我很困惑,因为没有理由为同一操作定义两个操作码。

仔细看(在规范中)。他们没有做同样的事情。

于 2013-06-30T09:47:57.790 回答