操作码JUMP如何在EVM堆栈中工作?

时间:2017-06-17 08:45:38

标签: ethereum solidity evm

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

我遇到了一个我无法理解的例子。 example image

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

仅提及原始文档。如yellow paper中所述:

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

其中1是从堆栈中取出的项目数,0是返回的项目数。所以在你的情况下,JUMP会删除' 0b'从堆栈中使用它作为目的地(PC = 11 = 0x0b)。

答案 1 :(得分:0)

想出来。

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

可以将JUMP视为首先执行PUSH,并将程序计数器移动到推送值。

归功于ethereum/tests Gitter的Martin / @holiman。感谢。