объясните test eax, eax и jg
в eax помещается число, например 20. потом такое выражение.
test eax, eax
jg short loc_xxx
jg в данном случае означает, что будет переход, если число больше нуля?
Ответы (1 шт):
Автор решения: SmellyNS
→ Ссылка
Команда TEST выполняет логическое И между всеми битами двух операндов.
В зависимости от результата могут быть изменены флаги ZF, SF, PF.
- set ZF, если 0
- set SF, если отрицательный
- set PF, если устанавливается четное количество бит
Инструкция TEST всегда сбрасывает флаги OF и CF.
Инструкция JG проверяет флаги ZF, SF и OF. Переход выполняется, если
- ZF = 0
- SF = OF
Таким образом test eax, eax по сути производит сравнение eax с нулём. Устанавливает ZF, если eax == 0