我正在關注「高級固體」教程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,這很有幫助。當我迷茫時,我一直忘記回頭看黃色紙。 –