ioper 命令是 java 虚拟机中的 sub idiv 顺序

ioper commands isub idiv order in java virtualmachine

查看 ioper 命令时,imul 和 iadd 很明显,但如果我有:

sipush 9
sipush 3
sipush 4

堆栈看起来像

4
3
9

如果下一个是isub,我会从3中减去4吗?或 4 中的 3

干杯

指令的语义定义在section 6.5 of the JVM spec. In particular isub中定义如下:

Operand Stack

..., value1, value2 →

..., result

Description

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is value1 - value2. The result is pushed onto the operand stack.

符号..., value1, value2表示value2在栈顶,value1在栈顶(栈的其余部分表示为... 因为 isub 没有碰它)。

所以在你的例子中它会是 3 - 4 因为 value1 = 3value2 = 4.