jz
означает скачок, если ноль. В этом контексте он будет прыгать только, если al
было 1.
Это потому, что cmp
обычно эквивалентно sub
(вычитать), но без фактического изменения значения.
cmp al, 1
установит флаги процессора (включая флаг нуля) на основе того, что произошло бы, если бы вы вычли 1 из al
.
Если al
равно 2, переход не будет выполнен (поскольку флаг нуля не установлен), и код продолжит выполняться по инструкции, следующей за jz
.
Кроме того, jz
часто является таким же кодом операции, что и je
, поскольку они фактически означают одно и то же. См., Например, страницу Википедии о потоке управления x86 :
Перейти на ноль
jz loc
Загружает EIP с указанным адресом, если нулевой бит установлен из предыдущего арифметического выражения. jz идентичен je.