Как работает код операции 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. Благодарю.

Другие вопросы по тегам