T
TEST Логическое сравнение
Команда test выполняет операцию логического умножения И над двумя операндами и, в зависимости от результата, устанавливает флаги SF, ZF и PF. Флаги OF и CF сбрасываются, a AF имеет неопределенное значение. Состояние флагов можно затем проанализировать командами условных переходов. Команда test не изменяет ни один из операндов.
В качестве первого операнда команды test можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго – регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Правила побитового умножения:
Первый операнд-бит 0101 Второй операнд-бит 0011 Бит результата 0001
Флаг SF устанавливается в 1, если в результате выполнения команды образовалось число с установленным знаковым битом.
Флаг ZF устанавливается в 1, если в результате выполнения команды образовалось число, состоящее из одних двоичных нулей.
Флаг PF устанавливается в 1, если в результате выполнения команды образовалось число с четным количеством двоичных единиц в его битах.
Пример 1:
test AX,1 jne bityes; Переход, если бит 0 в АХ установлен je bitno; Переход, если бит 0 в АХ сброшен
Пример 2:
test SI,8 jne bityes; Переход, если бит 3 в SI установлен je bitno; Переход, если бит 0 в АХ сброшен
Пример 3:
test DX,0FFFFh jz null; Переход, если DX=0 jnz smth; Переход, если DX не 0
Пример 4:
test CX,0F000h jne bitsyes; Переход, если какие-либо из ;4 старших битов СХ установлены je bitsno; Переход, если все 4 старших бита ; СХ сброшены
Пример 5:
test AX,AX jz zero; Переход, если АХ=0 jnz notzero; Переход, если АХ не 0
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.
Пример:
test ЕАХ,80000000h jz b31; Переход, если бит 31 ЕАХ равен 0 jnz nob31; Переход, если бит 31 ЕАХ равен 1