我目前正在使用一些Java字节码。我读到过两个操作码:dup和dup2。如果我理解正确的话,那么它们之间唯一的区别是,第一个只复制一个堆栈字,而第二个复制成对的堆栈字。这很好,但是它们每个都有自己的子操作码(dup_x1,dup2_x2...)。
例如,当我查看dup_x2和dup2_x1的函数时,它们似乎做了同样的事情:按顺序复制前三个值(因此,从值val4, val3, val2, val1开始就是val4, val3, val2, val1, val3, val2, val1)。我很困惑,因为没有理由为同一操作定义两个操作码。
那么这些操作码是用来做什么的?他们的行动有什么官方的参考吗?请帮帮忙。
发布于 2013-06-30 17:47:58
他们的行动有什么官方的参考吗?
当然有!它是JVM规范--特别是section 6.5。
我不会把它复制到这里。点击链接,自己阅读全部内容。但其基本思想是,dup_x1和dup_x2变体将重复的值/值插入堆栈的下部。
我很困惑,因为没有理由为同一操作定义两个操作码。
仔细看看(在说明书上)。他们不是在做同样的事情。
https://stackoverflow.com/questions/17388824
复制相似问题