Как работает код операции JUMP в стеке EVM?
Я следую за учебником "Advanced Solidity" здесь.
Я столкнулся с примером, у меня проблемы с пониманием.
В этом примере, почему JUMP влияет на состояние стека? Я ожидал, что это повлияет только на счетчик программы.
(т.е. я ожидал бы после JUMP, на ПК: 11, длина стека будет 3, а не 2. JUMP следует после PUSH 0x0B.)
Благодарю.
2 ответа
Просто чтобы сослаться на оригинальные документы. Как указано в желтой бумаге:
0x56 JUMP 1 0 Изменить счетчик программы
Где 1 - количество предметов, вынутых из стека, 0 - количество возвращенных предметов. Таким образом, в вашем случае JUMP удаляет "0b" из стека и использует его в качестве пункта назначения (PC = 11 = 0x0b).
Догадаться.
JUMP
принимает значение в верхней части стека для использования в качестве пункта назначения. Это значение "становится" местом назначения.
JUMP
можно было бы подумать о выполнении PUSH
во-первых, и перемещение счетчика программы к заданному значению.
Кредит Мартину / @holiman на ethereum/tests
Gitter. Благодарю.