.L10: leal (%rsi,%rsi,4), %edx movsbl %al,%eax addq $1, %rdi leal -48(%rax,%rdx,2), %esi je .L3
В приведенном выше есть только cmp, предшествующий je, как это работает здесь?
cmp
je
ZF = 1
add
ZF
lea
movsb
Держите Руководство разработчика по архитектуре Intel 64 и IA32 .Вы можете найти все подробности инструкций архитектуры Intel 64 и IA32 в руководстве Том 2
je, если флаг ZF установлен в регистре EFLAGS.Значение флага ZF устанавливается предыдущей (например, cmp) операцией, которая его изменила.
Поскольку ни lea, ни movsbl не изменяют флаг ZF, но add не делает (сравни Руководство разработчика Intel , 3-36), je переходит на .L3 если $1 + %rdi равно нулю.
movsbl
.L3
$1 + %rdi
Предыдущая инструкция устанавливает флаг состояния процессора. Каждый условный переход проверяет определенный флаг, даже если cmp не был выполнен. Я считаю, je выполняется, если установлен нулевой флаг.