Иллюстрированный самоучитель по Assembler

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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › T Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.

Пример:

test ЕАХ,80000000h
jz b31; Переход, если бит 31 ЕАХ равен 0
jnz nob31; Переход, если бит 31 ЕАХ равен 1
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.