Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
PSUBUSB
Влияние команды на флаги и форматы команды:
0F D8 /r |
PSUBUSB mm,mm/m64 |
Вычесть с насыщением упакованные знаковые байты mm/m64 из mm, результат поместить в mm |
psubusb mm1,mm6 |
0F D9 /r |
PSUBUSW mm,mm/m64 |
Вычесть с насыщением упакованные знаковые слова mm/m64 из mm, результат поместить в mm |
psubusw mm5,[ecx] |
Описание:
Команда PSUBUS производит вычитание беззнаковых элементов операнда-источника из соответствующих беззнаковых элементов операнда-назначения, используя принцип насыщения. Результат операции записывается в операнд-назначение.
Операндом-назначением является MMX-регистр. Операндом-источником может быть как MMX-регистр, так и операнд в памяти.
Команда PSUBUSB производит вычитание беззнаковых байтов. Если значение результата меньше нуля, то результат операции насыщается до 00h.
Команда PSUBUSW производит вычитание беззнаковых слов. Если значение результата меньше нуля, то результат операции насыщается 0000h.
Операция:
IF Команда PSUBUSB
THEN
DEST(7..0) = SaturateToUnsignedByte (DEST(7..0 – SRC (7..0) );
DEST(15..8) = SaturateToUnsignedByte (DEST(15..8) – SRC(15..8));
DEST(23..16) = SaturateToUnsignedByte (DEST(23..16) – SRC(23..16));
DEST(31..24) = SaturateToUnsignedByte (DEST(31..24) – SRC(31..24));
DEST(39..32) = SaturateToUnsignedByte (DEST(39..32) – SRC(39..32));
DEST(47..40) = SaturateToUnsignedByte (DEST(47..40) – SRC(47..40));
DEST(55..48) = SaturateToUnsignedByte (DEST(55..48) – SRC(55..48));
DEST(63..56) = SaturateToUnsignedByte (DEST(63..56) – SRC(63..56));
ELSE (* Команда PSUBUSW *)
DEST(15..0) = SaturateToUnsignedWord (DEST(15..0) – SRC(15..0));
DEST(31..16) = SaturateToUnsignedWord (DEST(31..16) – SRC(31..16));
DEST(47..32) = SaturateToUnsignedWord (DEST(47..32) – SRC(47..32));
DEST(63..48) = SaturateToUnsignedWord (DEST(63..48) – SRC(63..48));
FI;
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru