我目前正在使用一些 Java 字节码。我已经阅读了两个操作码:dup
和dup2
. 如果我理解正确,那么它们之间的唯一区别是第一个只复制一个堆栈词,而第二个复制一对堆栈词。这很好,但它们每个都有自己的子操作码(dup_x1
,dup2_x2
...)。
dup_x2
例如,当我查看 和 的函数时dup2_x1
,它们似乎在做同样的事情:按顺序复制前三个值(因此从值val4, val3, val2, val1
中有val4, val3, val2, val1, val3, val2, val1
)。我很困惑,因为没有理由为同一操作定义两个操作码。
那么这些操作码是做什么用的呢?他们的行动有任何官方参考吗?请帮忙。