代码之家  ›  专栏  ›  技术社区  ›  saleem

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

  •  1
  • saleem  · 技术社区  · 9 年前

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

    西普什9
    sipush河3
    sipush 4号机组

    堆栈看起来像

    4.
    3.
    9

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

    干杯

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    5 年前

    指令的语义定义见 section 6.5 of the JVM spec 特别是 isub 定义如下:

    操作数堆栈

    …,值1,值2

    后果

    描述

    value1和value2必须为类型 int 。值从操作数堆栈中弹出。这个 整数 结果是 value1 - value2 。结果被推送到操作数堆栈上。

    符号 ..., value1, value2 就是说 value2 位于堆栈顶部,并且 value1 是它下面的一个(堆栈的其余部分表示为 ... 因为 isub 不要碰它)。

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