SETcc
(byte SET on condition)
Установка байта по условию
Схема команды: | setcc операнд |
Назначение: установка операнда логическим значением в зависимости от истинности условия, заданного модификатором кода операции cc.
Алгоритм работы:
Команда проверяет истинность условия, заданного в коде операции, то есть, фактически, состояние определенных флагов.
Команды установки байтов
Команда | Проверяемые флаги | Логическое условие |
SETA/SETNBE | CF = 0 и ZF = 0 | (выше)/(не ниже или равно) |
SETAE/SETNB | CF = 0 | (выше или равно)/(не ниже) |
SETB/SETNAE | CF = 1 | (ниже)/(не выше или равно) |
SETBE/SETNA | CF = 1 или ZF = 1 | (ниже или равно)/(не выше) |
SETC | CF = 1 | перенос |
SETE/SETZ | ZF = 1 | ноль |
SETG/SETNLE | ZF = 0 или SF = OF | (больше)/(не меньше или равно) |
SETGE/SETNL | SF = OF | (больше или равно)/(не меньше) |
SETL/SETNGE | SF <> OF | если SF <> OF |
SETLE/SETNG | ZF=1 или SF <> OF | (меньше или равно)/(не больше) |
SETNC | CF = 0 | нет переноса |
SETNE/SETNZ | ZF = 0 | не равно нулю |
SETNO | OF=0 | нет переполнения |
SETNP/SETPO | PF = 0 | (неравенство)/(нет контроля четности) |
SETNS | SF = 0 | нет знака, число положительное |
SETO | OF = 1 | переполнение |
SETP/SETPE | PF = 1 | контроль четности/равенство |
SETS | SF = 1 | если знак минус, число отрицательное |
Если проверяемое условие (или содержимое соответствующих флагов на момент выдачи команды setcc) истинно, то установить значение операнда в 01h, если условие ложно — то в 00h.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Эти команды можно использовать после любой команды, изменяющей флаги, при необходимости анализа результата изменений. Если проанализировать условия для команд условного перехода, то обнаружится их полное соответствие с условиями, обрабатываемыми командой setcc, за исключением, конечно, команд jcxz и jecxz.
;подсчитать число единичных битов в регистре ax mov cx,16 m1: rol ax,1 setc bl add bh,bl clc loop m1 |
См. также: урок 10 и команду jcc