2017-06-17 34 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上。謝謝。