操作码 JUMP 在 EVM 堆栈中如何工作?
How does the opcode JUMP work in the EVM Stack?
我正在学习 "Advanced Solidity" 教程 here。
我 运行 举了一个我无法理解的例子。
在这个例子中,为什么JUMP会影响栈的状态?我预计它只会影响程序计数器。
(即我希望在 JUMP 之后,在 PC:11,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)
谢谢。
想通了。
JUMP
将堆栈顶部的值用作目标。
该值 "becomes" 目的地。
A JUMP
可以被认为是首先执行 PUSH
,然后将程序计数器移动到推送的值。
归功于 ethereum/tests
Gitter 上的 Martin / @holiman。谢谢
仅供参考原文档。如 yellow paper 所述:
0x56 JUMP 1 0 改变程序计数器
其中 1 是从堆栈中取出的项目数,0 是返回的项目数。因此,在您的情况下,JUMP 从堆栈中删除“0b”并将其用作目标 (PC = 11 = 0x0b)。
我正在学习 "Advanced Solidity" 教程 here。
我 运行 举了一个我无法理解的例子。
在这个例子中,为什么JUMP会影响栈的状态?我预计它只会影响程序计数器。
(即我希望在 JUMP 之后,在 PC:11,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)
谢谢。
想通了。
JUMP
将堆栈顶部的值用作目标。
该值 "becomes" 目的地。
A JUMP
可以被认为是首先执行 PUSH
,然后将程序计数器移动到推送的值。
归功于 ethereum/tests
Gitter 上的 Martin / @holiman。谢谢
仅供参考原文档。如 yellow paper 所述:
0x56 JUMP 1 0 改变程序计数器
其中 1 是从堆栈中取出的项目数,0 是返回的项目数。因此,在您的情况下,JUMP 从堆栈中删除“0b”并将其用作目标 (PC = 11 = 0x0b)。