【问题标题】:How does the opcode JUMP work in the EVM Stack?操作码 JUMP 在 EVM 堆栈中如何工作?
【发布时间】:2017-06-17 08:45:37
【问题描述】:

我正在关注“高级 Solidity”教程here。

我遇到了一个我无法理解的示例。

在这个例子中,为什么 JUMP 会影响堆栈的状态?我预计它只会影响程序计数器。

(即我希望在 JUMP 之后,在 PC:11 处,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)

谢谢。

【问题讨论】:

    标签: ethereum solidity evm


    【解决方案1】:

    只是参考原始文档。如yellow paper 所述:

    0x56 JUMP 1 0 改变程序计数器

    其中 1 是从堆栈中取出的项目数,0 是返回的项目数。因此,在您的情况下,JUMP 从堆栈中删除“0b”并将其用作目标 (PC = 11 = 0x0b)。

    【讨论】:

    • 谢谢 Jakub,这很有帮助。当我感到困惑时,我总是忘记参考黄皮书。
    【解决方案2】:

    想通了。

    JUMP 将堆栈顶部的值用作目标。 该值“成为”目的地。

    JUMP 可以被认为是先执行PUSH,然后将程序计数器移动到推送的值。

    感谢 ethereum/tests Gitter 上的 Martin / @holiman。谢谢。

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2011-03-07
      • 2018-02-25
      • 2014-08-16
      • 2010-10-12
      • 2021-03-08
      相关资源
      最近更新 更多