我正在关注“高级固体”教程here。操作码JUMP如何在EVM堆栈中工作?
在这个例子中,为什么JUMP会影响堆栈的状态?我预计它只会影响计数器。
(即我JUMP后想到,在PC 11中,叠层的长度将是3,而不是2。JUMP自带PUSH 0x0B中之后。)
感谢。
我正在关注“高级固体”教程here。操作码JUMP如何在EVM堆栈中工作?
在这个例子中,为什么JUMP会影响堆栈的状态?我预计它只会影响计数器。
(即我JUMP后想到,在PC 11中,叠层的长度将是3,而不是2。JUMP自带PUSH 0x0B中之后。)
感谢。
只是要参考原始文档。正如yellow paper说:
0x56储存JUMP 1 0改变程序计数器
其中1是取出堆栈的项目数,0的项目数退回。所以在你的情况下,JUMP从堆栈中删除'0b'并将其用作目的地(PC = 11 = 0x0b)。
想通了。
JUMP
将堆栈顶部的值用作目标。 该值“成为”目的地。
A JUMP
可以被认为是首先执行PUSH
,然后将程序计数器移动到被推入的值。
感谢Martin/@holiman在ethereum/tests
Gitter上。谢谢。
谢谢Jakub,这很有帮助。当我迷茫时,我一直忘记回头看黄色纸。 –