Как работает je без cmp? - PullRequest
       15

Как работает je без cmp?

5 голосов
/ 28 августа 2011
.L10:
    leal    (%rsi,%rsi,4), %edx
    movsbl  %al,%eax
    addq    $1, %rdi
    leal    -48(%rax,%rdx,2), %esi
    je  .L3

В приведенном выше есть только cmp, предшествующий je, как это работает здесь?

Ответы [ 3 ]

10 голосов
/ 28 августа 2011
  • je будет переходить ZF = 1.
  • add изменяет ZF.
  • lea, movsb не влияет ни на какие флаги.

Держите Руководство разработчика по архитектуре Intel 64 и IA32 .Вы можете найти все подробности инструкций архитектуры Intel 64 и IA32 в руководстве Том 2

4 голосов
/ 28 августа 2011

je, если флаг ZF установлен в регистре EFLAGS.Значение флага ZF устанавливается предыдущей (например, cmp) операцией, которая его изменила.

Поскольку ни lea, ни movsbl не изменяют флаг ZF, но add не делает (сравни Руководство разработчика Intel , 3-36), je переходит на .L3 если $1 + %rdi равно нулю.

0 голосов
/ 28 августа 2011

Предыдущая инструкция устанавливает флаг состояния процессора. Каждый условный переход проверяет определенный флаг, даже если cmp не был выполнен. Я считаю, je выполняется, если установлен нулевой флаг.

...