Команда 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