386P+ STR Сохранение содержимого регистра состояния задачи
Команда str копирует содержимое регистра задачи TR (селектор сегмента состояния задачи) в двухбайтовый регистр общего назначения или 16-битовую ячейку памяти, указанные в качестве операнда.
SUB Вычитание целых чисел
Команда sub вычитает второй операнд (источник) из первого (приемника) и помещает
результат на место первого операнда. Исходное значение первого операнда (уменьшаемое)
теряется. Таким образом, если команду вычитания записать в общем виде
sub операнд_1, операнд_2
то ее действие можно условно изобразить следующим образом:
операнд_1 - операнд_2 -> операнд_1
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.
Пример 1
mov AX,100
Пример 2
mov DL, '8 ' mov DH, '0 '
Пример 3
; ; В полях данных
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.
Пример
mov EAX,1000000
TEST Логическое сравнение
Команда test выполняет операцию логического умножения И над двумя операндами
и, в зависимости от результата, устанавливает флаги SF, ZF и PF. Флаги OF и
CF сбрасываются, a AF имеет неопределенное значение. Состояние флагов можно
затем проанализировать командами условных переходов. Команда test не изменяет
ни один из операндов.
В качестве первого операнда команды test можно указывать регистр (кроме сегментного)
или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку
памяти или непосредственное значение, однако не допускается определять оба операнда
одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять
числа со знаком или без знака.
Правила побитового умножения:
Первый операнд-бит 0101
Второй операнд-бит 0011
Бит результата 0001
Флаг SF устанавливается в 1, если в результате выполнения команды образовалось
число с установленным знаковым битом.
Флаг ZF устанавливается в 1, если в результате выполнения команды образовалось
число, состоящее из одних двоичных нулей.
Флаг PF устанавливается в 1, если в результате выполнения команды образовалось
число с четным количеством двоичных единиц в его битах.
Пример 1
test AX,1
Пример 2
test SI,8
Пример 3
test DX,0FFFFh
Пример 4
test CX,0F000h
Пример 5
test AX,AX
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.
Пример
test ЕАХ,80000000h
386Р+ VERR Проверка сегмента на чтение
Команда verr позволяет определить, разрешено ли чтение из сегмента, за которым
закреплен селектор, передаваемый команде в качестве ее операнда. Операндом может
служить 16-разрядный регистр общего назначения или 16-битовая ячейка памяти.
386Р+ VERW Проверка сегмента на запись
Команда verw позволяет определить, разрешена ли запись в сегмент, за которым
закреплен селектор, передаваемый команде в качестве ее операнда. Операндом может
служить 16-разрядный регистр общего назначения или 16-битовая ячейка памяти.