【发布时间】:2017-06-17 08:45:37
【问题描述】:
我正在关注“高级 Solidity”教程here。
在这个例子中,为什么 JUMP 会影响堆栈的状态?我预计它只会影响程序计数器。
(即我希望在 JUMP 之后,在 PC:11 处,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)
谢谢。
【问题讨论】:
我正在关注“高级 Solidity”教程here。
在这个例子中,为什么 JUMP 会影响堆栈的状态?我预计它只会影响程序计数器。
(即我希望在 JUMP 之后,在 PC:11 处,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)
谢谢。
【问题讨论】:
只是参考原始文档。如yellow paper 所述:
0x56 JUMP 1 0 改变程序计数器
其中 1 是从堆栈中取出的项目数,0 是返回的项目数。因此,在您的情况下,JUMP 从堆栈中删除“0b”并将其用作目标 (PC = 11 = 0x0b)。
【讨论】:
想通了。
JUMP 将堆栈顶部的值用作目标。
该值“成为”目的地。
JUMP 可以被认为是先执行PUSH,然后将程序计数器移动到推送的值。
感谢 ethereum/tests Gitter 上的 Martin / @holiman。谢谢。
【讨论】: