Команда TEST в Assembler (MASM, Real Mode, DOS)

Команда TEST используется для побитовой проверки двух операндов с помощью логической операции AND, но не сохраняет результат. Основное назначение — установка флагов, по которым можно сделать вывод о содержимом операндов.


Синтаксис:

TEST <приёмник>, <источник>

Где:

  • <приёмник> — регистр или ячейка памяти.
  • <источник> — регистр, ячейка памяти или непосредственное значение.

Оба операнда должны быть одного размера (8, 16 или 32 бита).


Как работает TEST?

  1. Производит побитовое AND между двумя операндами.
  2. Не сохраняет результат — данные в операндах остаются неизменными.
  3. Обновляет флаги процессора (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, который “не оставляет следов”, но позволяет анализировать результат через флаг