2017-06-17 105 views
0

我正在关注“高级固体”教程here操作码JUMP如何在EVM堆栈中工作?

我遇到了一个难以理解的例子。 example image

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

(即我JUMP后想到,在PC 11中,叠层的长度将是3,而不是2。JUMP自带PUSH 0x0B中之后。)

感谢。

回答

1

只是要参考原始文档。正如yellow paper说:

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

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

+0

谢谢Jakub,这很有帮助。当我迷茫时,我一直忘记回头看黄色纸。 –

0

想通了。

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

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

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