Команда TEST в Assembler (MASM, Real Mode, DOS)
Команда TEST используется для побитовой проверки двух операндов с помощью логической операции AND, но не сохраняет результат. Основное назначение — установка флагов, по которым можно сделать вывод о содержимом операндов.
Синтаксис:
TEST <приёмник>, <источник>Где:
<приёмник>— регистр или ячейка памяти.<источник>— регистр, ячейка памяти или непосредственное значение.
Оба операнда должны быть одного размера (8, 16 или 32 бита).
Как работает TEST?
- Производит побитовое
ANDмежду двумя операндами. - Не сохраняет результат — данные в операндах остаются неизменными.
- Обновляет флаги процессора (
SF,ZF,PF), позволяя принимать решения на их основе.
Пример кода (MASM, 16-bit DOS)
mov ax, 0x0F0F ; AX = 0000111100001111b
test ax, 0x00FF ; AX & 00FF = 0000111100001111b & 0000000011111111b
; Получаем: 0000000000001111b
; Устанавливаются флаги
jz ZeroFlagSet ; Прыгнем, если результат был 0 (ZF=1)Обновляемые флаги:
- ZF (Zero Flag) — устанавливается, если результат
ANDравен0(все биты обнулились). - SF (Sign Flag) — устанавливается, если старший бит результата
1(отрицательное число в знаковом представлении). - PF (Parity Flag) — устанавливается, если в результате чётное число единичных бит.
CF и OF не затрагиваются!
Зачем использовать TEST?
- Проверка отдельных битов в регистре или памяти.
- Определение, установлен ли определённый флаг.
- Оптимизация условий в программах без изменения данных.
Заключение
Команда TEST — полезный инструмент для анализа битовых данных без их изменения. Она особенно полезна в проверках состояния, работе с флагами и ветвлениях.
Запомни: TEST — это AND, который “не оставляет следов”, но позволяет анализировать результат через флаг