TEST работает точно так же как и логическая операция AND. Одна разница что результат не сохраняется, но зато выставляются флаги для последующего условного перехода. Данное свойство позволяет использовать TEST для проверки флагов. Итак, как поведет себя тест. А вот так. Переставим какое-нибуть число в двоичной системе.
00000100 (4 в десятичной)
Хотим проверить это число на установку этого бита в 1, получается что нужно написать:
test 4,4
А дальше условный переход например JNZ. Переход будет, если единицы совпадают. Но дело в том, что этот бит установлен не только у 4, но еще и у:
5 000000101 7 000000111 12 00001100
И во всех случаях TEST должна работать одинаково, так как установлен этот бит. Пробуем?
MODEL TINY STACK 100h DATASEG str1 DB 'Yes three bit $' str2 DB 'Not three bit $' CODESEG start: mov ax,@data mov ds,ax mov cx,5 test cx,4 jnz yesbit mov dx,offset str2 jmp print yesbit: mov dx,offset str1 print: mov ah,09h int 21h EndProgs: mov ah,04Ch mov al,1h int 21h end start
В результате выполнения данной программы появится надпись:
Все правильно в числе 5 третий бит установлен. Можете поэкспериментировать с другими числами.