SBB Целочисленное вычитание с заемом. SAR ------------------------------------------------------- SHL O D I T S Z A P C SHR * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T------------T---T---T---T----T------------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1C ib ¦SBB AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Вычитание с заемом не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственного байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1D iw ¦SBB AX,imm16¦1 ¦2 ¦3 ¦4 ¦Вычитание с заемом не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственного слова из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1D id ¦SBB EAX, ¦1 ¦2 ¦ ¦ ¦Вычитание с заемом не-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦посредственного двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова из EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦80 /3 ib¦SBB r/m8, ¦1/3¦2/7¦3/7¦4/17¦Вычитание с заемом не-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦+EA ¦посредственного байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦81 /3 iw¦SBB r/m16, ¦1/3¦2/7¦3/7¦4/17¦Вычитание с заемом не-¦ ¦ ¦ imm16 ¦ ¦ ¦ ¦+EA ¦посредственного слова из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦81 /3 id¦SBB r/m32, ¦1/3¦2/7¦ ¦ ¦Вычитание с заемом не-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦посредственного двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова из двойного слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦83 /3 iw¦SBB r/m16, ¦1/3¦2/7¦3/7¦4/17¦Вычитание с заемом не-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦+EA ¦посредственного расшире-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нного по знаку байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦83 /3 iw¦SBB r/m32, ¦1/3¦2/7¦ ¦ ¦Вычитание с заемом не-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦посредственного расшире-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нного по знаку байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойного слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦18 /r ¦SBB r/m8, ¦1/3¦2/6¦2/7¦3/16¦Вычитание с заемом бай-¦ ¦ ¦ r8 ¦ ¦ ¦ ¦+EA ¦тового регистра из бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦та r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦19 /r ¦SBB r/m16, ¦1/3¦2/6¦2/7¦3/16¦Вычитание с заемом ре-¦ ¦ ¦ r16 ¦ ¦ ¦ ¦+EA ¦гистра размером в слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦19 /r ¦SBB r/m32, ¦1/3¦2/6¦ ¦ ¦Вычитание с заемом ре-¦ ¦ ¦ r32 ¦ ¦ ¦ ¦ ¦гистра размером в двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное слова из двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1A /r ¦SBB r8,r/m8 ¦1/2¦2/7¦2/7¦3/9 ¦Вычитание с заемом бай-¦ ¦ ¦ r32 ¦ ¦ ¦ ¦+EA ¦тового регистра из бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1B /r ¦SBB r16, ¦1/2¦2/7¦2/7¦3/9 ¦Вычитание с заемом ре-¦ ¦ ¦ r/m16 ¦ ¦ ¦ ¦+EA ¦гистра размером в слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+----+------------------------+ ¦1B /r ¦SBB r32, ¦1/2¦2/7¦ ¦ ¦Вычитание с заемом ре-¦ ¦ ¦ r/m32 ¦ ¦ ¦ ¦ ¦гистра размером в двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное слово из двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ L--------+------------+---+---+---+----+------------------------- Инструкция SBB прибавляет второй операнд (приемник) к флагу переноса CF и вычитает результат из первого операнда (источника). Результат вычитания присваивается второму операнду (приемнику). Соответствующим образом изменяются флаги. Когда из операнда размером в слово вычитается непосредствен- ное байтовое значение, то оно расширяется по знаку.SCAS Сравнение строковых данных (SCASD - только для SCASB процессоров 386 и i486).
SCASW ------------------------------------------------------- SCASD O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T------------T---T---T---T--T----------------------------+ ¦ ¦ ¦486¦386¦286¦86¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AE ¦SCAS m8 ¦6 ¦7 ¦7 ¦15¦Сравнение байт AL - ES:[DI].¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AF ¦SCAS m16 ¦6 ¦7 ¦7 ¦15¦Сравнение слов AX - ES:[DI].¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AF ¦SCAS m32 ¦6 ¦7 ¦ ¦ ¦Сравнение двойных слов EAX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦- ES:[DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AE ¦SCASB ¦6 ¦7 ¦7 ¦15¦Сравнение байт AL - ES:[DI].¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AF ¦SCASW ¦6 ¦7 ¦7 ¦15¦Сравнение слов AX - ES:[DI].¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+---+--+----------------------------+ ¦AF ¦SCASD ¦6 ¦7 ¦ ¦ ¦Сравнение двойных слов EAX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦- ES:[DI]. ¦ L------+------------+---+---+---+--+----------------------------- Инструкция SCAS вычитает байт в памяти или слово в регистре- приемнике из регистра AL, AX или EAX. Результат отбрасывается, устанавливаются только флаги. Операнд должен быть адресуемым из регистра ES, переопределение сегмента не допускается. Если атрибут размера адреса данной инструкции равен 16, то регистр DI используется в качестве регистра-приемника. В против- ном случае атрибут размера адреса равен 32 битам, и используется регистр EDI. Адрес данных в памяти, предназначенных для сравнения, опре- деляется исключительно содержимым регистра-приемника, а не опе- рандом SCAS. Операнд позволяет определить адресуемость через сегмент ES и определяет тип данных. Перед выполнением инструкции SCAS загрузите в DI или в EDI корректное значение индекса. После сравнения регистр-приемник автоматически изменяется. Если флаг направления равен 0 (была выполнена инструкция CLD), то индексный регистр источника инкрементируется (увеличивается). Если флаг направления равен 1 (была выполнена инструкция STD), то он декрементируется (уменьшается). Декрементация или инкремента- ция выполняется на 1 при сравнении байт, на 2 при сравнении слов, или на 4 при сравнении двойных слов. Инструкции SCASB, SCASW и SCASD являются синонимами инструк- ции SCAS для работы с байтами, словами и двойными словами. Эти инструкции не требуют операндов. Писать их проще, но они не поз- воляют проверять тип или сегмент. Инструкции SCAS может предшествовать префикс REP. Это позво- ляет выполнять поиск в блоке из CX байт или слов. Подробности этой операции можно найти в описании префикса REP.SETcc Установка байта по условию (только для процессоров 386 и i486).
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T------------T---T---T-----------------------------------+ ¦ ¦ ¦486¦386¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 97 ¦SETA r/m8 ¦4/3¦4/5¦Установка байта, если выше (CF=0 и¦ ¦ ¦ ¦ ¦ ¦ZF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 93 ¦SETAE r/m8 ¦4/3¦4/5¦Установка байта, если выше или рав-¦ ¦ ¦ ¦ ¦ ¦но CF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 92 ¦SETB r/m8 ¦4/3¦4/5¦Установка байта, если ниже (CF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 96 ¦SETBE r/m8 ¦4/3¦4/5¦Установка байта, если ниже или рав-¦ ¦ ¦ ¦ ¦ ¦но (CF=1 или ZF=1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 92 ¦SETC r/m8 ¦4/3¦4/5¦Установка байта, если перенос (CF=¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 92 ¦SETC r/m8 ¦4/3¦4/5¦Установка байта, если перенос (CF=¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 94 ¦SETE r/m8 ¦4/3¦4/5¦Установка байта, если равно (CF=1).¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9F ¦SETG r/m8 ¦4/3¦4/5¦Установка байта, если больше (CF=¦ ¦ ¦ ¦ ¦ ¦0 или SF=OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9D ¦SETGE r/m8 ¦4/3¦4/5¦Установка байта, если больше или¦ ¦ ¦ ¦ ¦ ¦равно (SF=OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9C ¦SETL r/m8 ¦4/3¦4/5¦Установка байта, если меньше (SF=¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9E ¦SETLE r/m8 ¦4/3¦4/5¦Установка байта, если меньше или¦ ¦ ¦ ¦ ¦ ¦равно (ZF=1 и SF<>OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 96 ¦SETNA r/m8 ¦4/3¦4/5¦Установка байта, если не выше (CF=¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 92 ¦SETNAE r/m8 ¦4/3¦4/5¦Установка байта, если не выше или¦ ¦ ¦ ¦ ¦ ¦равно (CF=1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 93 ¦SETNB r/m8 ¦4/3¦4/5¦Установка байта, если не ниже (CF=¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 97 ¦SETNBE r/m8 ¦4/3¦4/5¦Установка байта, если не ниже или¦ ¦ ¦ ¦ ¦ ¦равно (CF=0 и ZF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 93 ¦SETNC r/m8 ¦4/3¦4/5¦Установка байта, если нет перено-¦ ¦ ¦ ¦ ¦ ¦са (CF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 95 ¦SETNЕ r/m8 ¦4/3¦4/5¦Установка байта, если не равно¦ ¦ ¦ ¦ ¦ ¦(ZF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9E ¦SETNG r/m8 ¦4/3¦4/5¦Установка байта, если не больше¦ ¦ ¦ ¦ ¦ ¦(ZF=1 или SF<>OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9C ¦SETNGE r/m8 ¦4/3¦4/5¦Установка байта, если не больше¦ ¦ ¦ ¦ ¦ ¦или равно (SF<>OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9D ¦SETNL r/m8 ¦4/3¦4/5¦Установка байта, если не меньше¦ ¦ ¦ ¦ ¦ ¦(SF=OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9F ¦SETNLE r/m8 ¦4/3¦4/5¦Установка байта, если не меньше¦ ¦ ¦ ¦ ¦ ¦или равно (ZF=1 и SF<>OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 91 ¦SETNO r/m8 ¦4/3¦4/5¦Установка байта, если нет пере-¦ ¦ ¦ ¦ ¦ ¦полнения (OF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9B ¦SETNP r/m8 ¦4/3¦4/5¦Установка байта, если нет чет-¦ ¦ ¦ ¦ ¦ ¦ности (PF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 99 ¦SETNS r/m8 ¦4/3¦4/5¦Установка байта, если нет зна-¦ ¦ ¦ ¦ ¦ ¦ка (SF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 95 ¦SETNZ r/m8 ¦4/3¦4/5¦Установка байта, если ноль (ZF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 90 ¦SETNO r/m8 ¦4/3¦4/5¦Установка байта, если нет пере-¦ ¦ ¦ ¦ ¦ ¦полнения (OF=1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9A ¦SETP r/m8 ¦4/3¦4/5¦Установка байта при флаге четнос-¦ ¦ ¦ ¦ ¦ ¦ти (PF=1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9A ¦SETPE r/m8 ¦4/3¦4/5¦Установка байта при четности (PF=¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 9B ¦SETPO r/m8 ¦4/3¦4/5¦Установка байта при нечетности¦ ¦ ¦ ¦ ¦ ¦(PF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 98 ¦SETS r/m8 ¦4/3¦4/5¦Установка байта по знаку (SF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+------------+---+---+-----------------------------------+ ¦0F 94 ¦SETZ r/m8 ¦4/3¦4/5¦Установка байта по нулю (ZF=0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+------------+---+---+------------------------------------ Инструкция SETcc записывает в приемник, заданный действующим адресом, или в регистр байт, содержащий 1, если условие удовлет- воряется, и 0, если условие не удовлетворяется.SGDT Сохранение таблицы глобальных дескрипторов/таблицы SIDT дескрипторов прерываний (только для защищенного режима процессоров 80186/286/386/486).
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T------T-------T-----T----T----------------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦ ¦ +--------+------+-------+-----+----+----------------------------+ ¦0F 01 /0¦SGDT m¦10 ¦9 ¦11 ¦Запись таблицы GDTR (гло-¦ ¦ ¦ ¦ ¦ ¦ ¦бальных дескрипторов) в m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------+-------+-----+----+----------------------------+ ¦0F 01 /1¦SIDT m¦10 ¦9 ¦11 ¦Запись таблицы IDTR (дес-¦ ¦ ¦ ¦ ¦ ¦ ¦крипторов прерываний) в m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+------+-------+-----+----+----------------------------- Инструкции SGDT/SIDT копируют содержимое регистра таблицы дескрипторов в шесть байт памяти, указанных операндом. Поле LIMIT регистра присваивается первому слову действующего адреса. Если атрибут размера операнда равен 32 битам, то следующим трем байтам присваивается поле BASE (база) регистра, а в четвертый байт запи- сывается ноль. Последний байт не определен. Если атрибут размера операнда равен 16, то следующим четырем байтам присваивается 32-битовое поле BASE регистра. Инструкции SGDT и SIDT используются только в системном прог- раммном обеспечении. В прикладных программах они не применяются.SHLD Сдвиг влево с двойной точностью (только для процессоров 386 и i486).
------------------------------------------------------- O D I T S Z A P C ? * * ? * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T---------------T---T----T-------------------------------+ ¦ ¦ ¦486¦386 ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A4 ¦SHLD r/m16,r16,¦2/3¦3/7 ¦В r/m16 записывается конкатена-¦ ¦ ¦ imm8 ¦ ¦ ¦ция SHL r/m16 и r16. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A4 ¦SHLD r/m32,r32,¦2/3¦3/7 ¦В r/m32 записывается конкатена-¦ ¦ ¦ imm8 ¦ ¦ ¦ция SHL r/m32 и r32. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A5 ¦SHLD r/m16,r16,¦2/3¦3/7 ¦В r/m16 записывается конкатена-¦ ¦ ¦ CL ¦ ¦ ¦ция SHL r/m16 и r16. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A5 ¦SHLD r/m32,r32,¦2/3¦3/7 ¦В r/m32 записывается конкатена-¦ ¦ ¦ CL ¦ ¦ ¦ция SHL r/m32 и r32. ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+---------------+---+----+-------------------------------- Инструкция SHLD выполняет сдвиг первого операнда, задаваемо- го полем r/m, влево на число бит, заданное операндом-счетчиком. Второй операнд задает биты, сдвигаемые справа (начиная с бита 0). Результат записывается обратно в операнд r/m. Регистр остается неизмененным. Операнд-счетчик задается либо в виде непосредственного бай- та, либо в виде регистра CL. Чтобы получить величину сдвига (чис- ло от 0 до 31), эти операнды берутся по модулю 32. Поскольку ве- личина сдвига задается указанными регистрами, эта операция полез- на для выполнения сдвигов с повышенной точностью (64 бита или бо- лее). Биты SF, ZF и PF устанавливаются в соответствии со значением результата. Регистр CF устанавливается в значение пос- леднего сдвигаемого вовне бита. Флаги OF и AF остаются неопреде- ленными.SHRD Сдвиг вправо с двойной точностью (только для процессоров 386 и i486).
------------------------------------------------------- O D I T S Z A P C ? * * ? * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T---------------T---T----T-------------------------------+ ¦ ¦ ¦486¦386 ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A4 ¦SHRD r/m16,r16,¦2/3¦3/7 ¦В r/m16 записывается конкатена-¦ ¦ ¦ imm8 ¦ ¦ ¦ция SHR r/m16 и r16. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A4 ¦SHRD r/m32,r32,¦2/3¦3/7 ¦В r/m32 записывается конкатена-¦ ¦ ¦ imm8 ¦ ¦ ¦ция SHR r/m32 и r32. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A5 ¦SHRD r/m16,r16,¦2/3¦3/7 ¦В r/m16 записывается конкатена-¦ ¦ ¦ CL ¦ ¦ ¦ция SHR r/m16 и r16. ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------------+---+----+-------------------------------+ ¦0F A5 ¦SHRD r/m32,r32,¦2/3¦3/7 ¦В r/m32 записывается конкатена-¦ ¦ ¦ CL ¦ ¦ ¦ция SHR r/m32 и r32. ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+---------------+---+----+-------------------------------- Инструкция SHRD выполняет сдвиг первого операнда, задаваемо- го полем r/m, вправо на число бит, заданное операндом-счетчиком. Второй операнд задает биты, сдвигаемые справа (начиная с бита 0). Результат записывается обратно в операнд r/m. Регистр остается неизмененным. Операнд-счетчик задается либо в виде непосредственного бай- та, либо в виде регистра CL. Чтобы получить величину сдвига (чис- ло от 0 до 31) эти операнды берутся по модулю 32. Поскольку вели- чина сдвига задается указанными регистрами, эта операция полезна для выполнения сдвигов с повышенной точностью (64 бита или бо- лее). Биты SF, ZF и PF устанавливаются в соответствии со значени- ем результата. Флаг CF устанавливается в значение последнего сдвигаемого вовне бита. Флаги OF и AF остаются неопределенными.SLDT Запись таблицы локальных дескрипторов (только для защищенного режима процессоров 80186/286/386/486).
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T----------T---T-------T---T---------------------------+ ¦ ¦ ¦486¦386 ¦286¦ ¦ +--------+----------+---+-------+---+---------------------------+ ¦0F 00 /0¦SLDT r/m16¦2/3¦pm-=2/2¦2/3¦Запись таблицы LDTR (ло-¦ ¦ ¦ ¦ ¦ ¦ ¦кальных дескрипторов) в¦ ¦ ¦ ¦ ¦ ¦ ¦слово EA. ¦ L--------+----------+---+-------+---+---------------------------- Инструкция SLDT записывает регистр таблицы локальных деск- рипторов (LDTR) в двухбайтовый регистр или ячейку памяти, задан- ную операндом действующего адреса. Регистр представляет собой се- лектор, который указывает на таблицу глобальных дескрипторов. Инструкция SLDT используется только в системном программном обеспечении. В прикладных программах она не применяется.SMSW Запись слова состояния машины (только для защищенного режима процессоров 80186/286/386/486).
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T----------T---T------T---T----------------------------+ ¦ ¦ ¦486¦386 ¦286¦ ¦ +--------+----------+---+------+---+----------------------------+ ¦0F 00 /0¦SMSW r/m16¦2/3¦2/3, ¦2/3¦Запись слова состояния маши-¦ ¦ ¦ ¦ ¦pm=2/2¦ ¦ны с слово EA. ¦ L--------+----------+---+------+---+----------------------------- Инструкция CMSW записывает слово состояния машины (часть CR0) в двухбайтовом регистре или ячейке памяти, на которую указы- вает операнд действующего адреса.STC Установка флага переноса.
------------------------------------------------------- O D I T S Z A P C 1 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T---T----T---T---T--T----------------------------------+ ¦ ¦ ¦486 ¦386¦286¦86¦ ¦ +--------+---+----+---+---+--+----------------------------------+ ¦F9 ¦STC¦2 ¦2 ¦2 ¦2 ¦Установка флага переноса. ¦ L--------+---+----+---+---+--+----------------------------------- Инструкция STC устанавливает флаг переноса в 1.STD Установка флага направления.
------------------------------------------------------- O D I T S Z A P C 1 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T-----T----T---T---T--T----------------------------------+ ¦ ¦ ¦486 ¦386¦286¦86¦ ¦ +------+-----+----+---+---+--+----------------------------------+ ¦FD ¦STD ¦2 ¦2 ¦2 ¦2 ¦Установка флага направления, пос-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ле чего будет выполняться декре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ментация регистров (E)SI или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(E)DI. ¦ L------+-----+----+---+---+--+----------------------------------- Инструкция STD устанавливает флаг направления в 1, что вызы- вает во всех последующих строковых операциях декрементацию (уменьшение) индексных регистров (E)SI или (E)DI.STI Установка флага разрешения прерывания.
------------------------------------------------------- O D I T S Z A P C 1 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T-----T----T---T---T--T----------------------------------+ ¦ ¦ ¦486 ¦386¦286¦86¦ ¦ +------+-----+----+---+---+--+----------------------------------+ ¦FB ¦STI ¦5 ¦3 ¦2 ¦2 ¦Установка флага разрешения преры-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вания. ¦ L------+-----+----+---+---+--+----------------------------------- Инструкция STI устанавливает флаг прерывания в значение 1. После этого ЦП при выполнении следующей инструкции отвечает на внешние прерывания (если при выполнении следующей инструкции пре- рывания останутся разрешенными). Если внешние прерывания запреще- ны, и вы записываете STI, RET (как в конце подпрограммы), то инс- трукцию RET допускается выполнять перед распознаванием внешних прерываний. Кроме того, если внешние прерывания запрещены, а вы пишете STI, CLI, то внешние прерывания не распознаются, так как при выполнении инструкции CLI флаг прерываний очищается.STOS Запись строковых данных (инструкция STOSD - только для STOSB процессоров 386 и i486).
STOSW ------------------------------------------------------- STOSD O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T---------T---T---T---T--T-------------------------------+ ¦ ¦ ¦486¦386¦286¦86¦ ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AA ¦STOS m8 ¦5 ¦4 ¦3 ¦11¦Запись AL в байте ES:[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AB ¦STOS m16 ¦5 ¦4 ¦3 ¦11¦Запись AX в слове ES:[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AB ¦STOS m32 ¦5 ¦4 ¦ ¦ ¦Запись EAX в байте ES:[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AA ¦STOSB ¦5 ¦4 ¦3 ¦11¦Запись AL в байте ES:[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AB ¦STOSW ¦5 ¦4 ¦3 ¦11¦Запись AX в слове ES:[(E)DI]. ¦ +------+---------+---+---+---+--+-------------------------------+ ¦AB ¦STOSD ¦5 ¦4 ¦ ¦ ¦Запись EAX в байте ES:[(E)DI]. ¦ L------+---------+---+---+---+--+-------------------------------- Инструкция STOS передает содержимое регистра AL, AX или EAX в байт или слово в памяти, которые задаются регистром-приемником относительно сегмента ES. Для атрибута размера адреса, равного 16, регистром-приемни- ком является регистр DI, а для атрибута размера адреса 32 - EDI. Операнд-приемник должен быть адресуемым через регистр ES. Переопределение сегмента не допускается. Адрес приемника определяется содержимым регистра-приемника, а не явным операндом инструкции STOS. Данный операнд используется только для определения возможности адресуемости через регистр ES и типа данных. Перед выполнением инструкции STOS загрузите в ре- гистр-приемник корректное значение адреса. После выполнения пересылки регистр DI автоматически обновля- ется. Если флаг направления равен 0 (была выполнена инструкция CLD), то регистр DI инкрементируется (увеличивается). Если флаг направления равен 1 (была выполнена инструкция STD), то он декре- ментируется (уменьшается). DI увеличивается или уменьшается на 1 при записи байта, на 2 при записи слова и на 4 при записи двойно- го слова. Инструкции STOSB, STOSW и STOSD являются синонимами инструк- ции OUTS для работы с байтами, словами и двойными словами. Инс- трукции STOS может предшествовать префикс REP. Это позволяет за- полнять блоки из CX байт или слов. Подробности этой операции мож- но найти в описании REP.STR Запись регистра задачи (только для защищенного режима процессоров 80286/386/486).
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T---------T----T-----T---T------------------------------+ ¦ ¦ ¦486 ¦386 ¦286¦ ¦ +-------+---------+----+-----+---+------------------------------+ ¦0F 00/1¦STR r/m16¦2/3 ¦pm= ¦2/3¦Загрузка в регистр задачи сло-¦ ¦ ¦ ¦ ¦23/27¦ ¦ва EA. ¦ L-------+---------+----+-----+---+------------------------------- Содержимое регистра задачи копируется в двухбайтовый регистр или ячейку памяти, указываемую операндом действующего адреса. Инструкция STR используется только в системном программном обеспечении. В прикладных программах она не применяется.SUB Целочисленное вычитание.
--------------------------------------------------------- O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Oписание ¦ +--------T---------------T----T----T-----T-------T--------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦04 ib ¦SUB AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦05 iw ¦SUB EX,imm16 ¦1 ¦2 ¦3 ¦4 ¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го слова из AX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦05 id ¦SUB EAX,imm32 ¦1 ¦2 ¦ ¦ ¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова из EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦80 /0 ib¦SUB r/m8,imm2 ¦1/3 ¦2/7 ¦3/7 ¦4/17+EA¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦81 /0 iw¦SUB r/m16,imm16¦1/3 ¦2/7 ¦3/7 ¦4/17+EA¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го слова из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦81 /0 id¦SUB r/m16,imm8 ¦1/3 ¦2/7 ¦3/7 ¦4/17+EA¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта с¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦расширением по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку из сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ва r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦83 /0 ib¦SUB r/m32,imm8 ¦1/3 ¦2/7 ¦ ¦ ¦Вычитание не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта с¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦расширением по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку из двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ного слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦00 /r ¦SUB r/m8,r8 ¦1/3 ¦2/7 ¦2/7 ¦3/16+EA¦Вычитание бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦тового регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ра из байта¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦01 /r ¦SUB r/m16,r16 ¦1/3 ¦2/7 ¦2/7 ¦3/16+EA¦Вычитание ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово из¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦01 /r ¦SUB r/m32,r32 ¦1/3 ¦2/7 ¦ ¦ ¦Вычитание ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово из сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ва r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦02 /r ¦SUB r8,r/m8 ¦1/2 ¦2/6 ¦2/7 ¦3/9+EA ¦Вычитание бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦та r/m из ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в байт. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦03 /r ¦SUB r16,r/m16 ¦1/2 ¦2/6 ¦2/7 ¦3/9+EA ¦Вычитание бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦та r/m из ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+---------------+----+----+-----+-------+--------------+ ¦03 /r ¦SUB r32,r/m32 ¦1/2 ¦2/6 ¦ ¦ ¦Вычитание бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦та r/m из ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+---------------+----+----+-----+-------+--------------- Операция SUB выполняет целочисленное вычитание двух операн- дов (второго операнда, источника, из первого, приемника). Резуль- тат вычитания присваивается первому операнду. Соответствующим об- разом устанавливаются флаги. Когда непосредственное байтовое значение вычитается из опе- ранда размером в слово, то оно расширяется по знаку до размера операнда-приемника.TEST Логическое сравнение.
------------------------------------------------------- O D I T S Z A P C 0 * * ? * 0 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T-------------T---T---T---T---T------------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦A8 ib ¦TEST AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Операция И над непосред-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ственным байтом и AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦A9 iw ¦TEST AX,imm16¦1 ¦2 ¦3 ¦4 ¦Операция И над непосред-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ственным байтом и AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦A9 id ¦TEST EAX, ¦1 ¦2 ¦ ¦ ¦Операция И над непосред-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦ственным двойным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦F6 /0 ib¦TEST r/m8, ¦1/2¦2/5¦3/6¦5/ ¦Операция И над непосред-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦11+¦ственным байтом и байтом¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦F7 /0 iw¦TEST r/m16, ¦1/2¦2/5¦3/6¦5/ ¦Операция И над непосред-¦ ¦ ¦ imm16 ¦ ¦ ¦ ¦11+¦ственным словом и словом¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦F7 /0 id¦TEST r/m32, ¦1/2¦2/5¦ ¦ ¦Операция И над непосред-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦ственным двойным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и двойным словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦84 /r ¦TEST r/m8, ¦1/2¦2/5¦2/6¦3/9¦Операция И над регистром¦ ¦ ¦ r8 ¦ ¦ ¦ ¦+EA¦размером в байт и байтом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦85 /r ¦TEST r/m16, ¦1/2¦2/5¦2/6¦3/9¦Операция И над регистром¦ ¦ ¦ r16 ¦ ¦ ¦ ¦+EA¦размером в слово и сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+---+---+------------------------+ ¦85 /r ¦TEST r/m32, ¦1/2¦2/5¦ ¦ ¦Операция И над регистром¦ ¦ ¦ r32 ¦ ¦ ¦ ¦ ¦размером в двойное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и двойным словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+-------------+---+---+---+---+------------------------- Операция TEST вычисляет для двух операндом поразрядную логи- ческую операцию И. Каждый бит результата будет равен 1, если оба соответствующих бита операндом равны 1. В противном случае бит равен 0. Результат операции отбрасывается. Модифицируются только флаги.VERR Проверка сегмента для чтения или записи (только для VERW защищенного режима процессоров 80286/386/486).
------------------------------------------------------- O D I T S Z A P C * ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T----------T-----T-----T---T---------------------------+ ¦ ¦ ¦486 ¦386 ¦286¦ ¦ +--------+----------+-----+-----+---+---------------------------+ ¦OF 00 /4¦VERR r/m16¦11/11¦pm= ¦14/¦Устанавливает ZF = 1, если¦ ¦ ¦ ¦ ¦10/11¦16 ¦сегмент доступен для чтения¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+----------+-----+-----+---+---------------------------+ ¦OF 00 /5¦VERW r/m16¦11/11¦pm= ¦14/¦Устанавливает ZF = 1, если¦ ¦ ¦ ¦ ¦10/11¦16 ¦сегмент доступен для записи¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+----------+-----+-----+---+---------------------------- Двухбайтовый регистр или операнд в памяти инструкции VERR или VERW содержит значение селектора. Инструкции VERR или VERW определяют, доступен ли сегмент, описанный селектором, из текуще- го привилегированного уровня, и можно ли для него выполнять чте- ние (VERR) или запись (VERW). Если сегмент доступен, то флаг нуля устанавливается в 1, а если сегмент недоступен, то флаг нуля ус- танавливается в 0. Чтобы установить флаг ZF, должны соблюдаться следующие условия: - Cелектор должен обозначать дескриптор в границах таблицы (GDT или LDT). Селектор должен быть "определен". - Селектор должен описывать дескриптор сегмента кода или данных (а не быть дескриптором сегмента состояния задачи, LDT или вентиля). - Для инструкции VERR сегмент должен быть доступен по чте- нию. Для инструкции VERW сегмент должен быть доступен по записи (сегмент данных). - Если сегмент кода доступен по чтению и удовлетворяет усло- виям, уровень привилегий дескриптора (DPL) может иметь для инструкции VERR любое значение. В противном случае DPL должно быть больше или равно (иметь меньший или тот же уровень привилегий), чем текущий уровень привилегий и RPL селектора. Проверка выполняется так же, как если бы сегмент был загру- жен в регистры DS, ES, FS или GS и был выполнен указанный доступ (чтение или запись). Результат проверки определяет значение, ко- торое получает флаг нуля. Значение селектора не может дать в ре- зультате исключительную ситуацию по нарушению защиты, что позво- ляет программному обеспечению предвидеть возможные проблемы с доступом.WAIT Ожидание, пока разряд BUSY# будет неактивным.
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T--------T-----T----T----T----T------------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +--------+--------+-----+----+----+----+------------------------+ ¦9B ¦WAIT ¦1-3 ¦6 ¦3 ¦4+5n¦Ожидание, пока разряд¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦BUSY# будет неактивным. ¦ L--------+--------+-----+----+----+----+------------------------- Инструкция WAIT приостанавливает выполнение инструкций ЦП, пока разряд BUSI# не станет неактивным. Разряд BUSY# управляется расширением арифметического сопроцессора 80х87.WBINVD Запись и запрещение кэш-буфера.
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T----------T-----T--------------------------------------+ ¦ ¦ ¦486 ¦ ¦ +-------+----------+-----+--------------------------------------+ ¦OF 09 ¦WBINVD ¦5 ¦Обратная запись и запрещение всего кэш¦ ¦ ¦ ¦ ¦-буфера. ¦ L-------+----------+-----+--------------------------------------- Внутренний кэш-буфер сбрасывается, и выполняется специальный функциональный цикл шины, который указывает, что внешний кэш-бу- фер должен вывести свое содержимое обратно в оперативную память. Затем следует другой специальный функциональный цикл шины, указы- вающий на необходимость сброса всего кэш-буфера. Примечание: Эта инструкция зависит от реализации. В будущих процессорах фирмы Intel ее функция может реализовы- ваться по-разному. Ответственность за обратную запись со- держимого внешнего кэш-буфера и индикацию сброса возлагает- ся на аппаратные средства.XADD Обмен и сложение (только для процессора i486).
------------------------------------------------------- O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T--------------T---T------------------------------------+ ¦ ¦ ¦486¦ ¦ +-------+--------------+---+------------------------------------+ ¦OF C0/r¦XADD r/m8,r8 ¦3/4¦Выполняет обмен содержимого регистра¦ ¦ ¦ ¦ ¦размером в байт и байта r/m. Загру-¦ ¦ ¦ ¦ ¦жает сумму в байт r/m. ¦ ¦ ¦ ¦ ¦ ¦ +-------+--------------+---+------------------------------------+ ¦OF C1/r¦XADD r/m16,r16¦3/4¦Выполняет обмен содержимого регистра¦ ¦ ¦ ¦ ¦размером в слово и слов r/m. Загру-¦ ¦ ¦ ¦ ¦жает сумму в слово r/m. ¦ ¦ ¦ ¦ ¦ ¦ +-------+--------------+---+------------------------------------+ ¦OF C1/r¦XADD r/m32,r32¦3/4¦Выполняет обмен содержимого регистра¦ ¦ ¦ ¦ ¦размером в двойное слово и двойного¦ ¦ ¦ ¦ ¦слова r/m. Загружает сумму в двойное¦ ¦ ¦ ¦ ¦слово r/m. ¦ ¦ ¦ ¦ ¦ ¦ L-------+--------------+---+------------------------------------- Инструкция XADD загружает приемник в источник, затем загру- жает сумму приемника и исходного значения источника в приемник. Исключительные ситуации защищенного режима: #GP(0), если ре- зультат находится в сегменте, недоступном для записи; #GP(0) при всех недопустимых операндах действующего адреса в сегментах CS, DS, ES, FS или GS; #SS(0) при недопустимом адресе в сегменте SS; #PF (сбой) при страничном сбое; #NM, если в CR0 установлены EM или TS; #AC при невыровненной ссылке на память, если текущий уро- вень привилегий равен 3. Прерывания режима реальной адресации: прерывание 13, если любая часть операнда лежит вне действующего пространства адресов (от 0 до 0FFFFh). Прерывания виртуального режима 8086: те же исключительные ситуации, что и в режиме реальной адресации; те же исключительные ситуации #PF и #AC, что и в защищенном режиме.XCHG Обмен содержимого памяти/регистра с регистром.
------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T--------------T---T---T---T------T----------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦86 /r ¦XCHG r/m8,r8 ¦3/4¦3/5¦3/5¦4/17+ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦жимого регистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в байт и байта EA.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦86 /r ¦XCHG r8,r/m8 ¦3/4¦3/5¦3/5¦4/17+ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦жимого байта EA и ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байт. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦87 /r ¦XCHG r/m16,r16¦3/4¦3/5¦3/5¦4/17+ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦жимого регистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово и слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦EA. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦87 /r ¦XCHG r/m32,r32¦3/4¦3/5¦ ¦ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦имого регистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в двойное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и двойного слова EA. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦87 /r ¦XCHG r32,r/m32¦3/4¦3/5¦ ¦ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦имого регистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в двойное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и двойного слова EA. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦90+r ¦XCHG AX,r16 ¦3 ¦3 ¦3 ¦3 ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жимого регистра AX и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦90+r ¦XCHG r16,AX ¦3 ¦3 ¦3 ¦3 ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жимого регистра AX и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦90+r ¦XCHG EAX,r32 ¦3 ¦3 ¦ ¦ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жимого регистра EAX и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойного слова. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+---+---+---+------+----------------------+ ¦90+r ¦XCHG r32,EAX ¦3 ¦3 ¦ ¦ ¦Выполняет обмен содер-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жимого регистра EAX и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойного слова. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+--------------+---+---+---+------+----------------------- Инструкция XCHG выполняет обмен содержимого двух операндов. Операнды могут следовать в любом порядке. Если используется опе- ранд в памяти, то на время выполнения операции выдается BUS LOCK (блокировка шины), независимо от наличия или отсутствия префикса LOCK или значения IOPL.XLAT Трансляция таблицы.
XLATB ------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T------------T---T---T---T--T--------------------------+ ¦ ¦ ¦486¦386¦286¦86¦ ¦ +--------+------------+---+---+---+--+--------------------------+ ¦D7 ¦XLAT m8 ¦4 ¦5 ¦5 ¦11¦Устанавливает AL в байт¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦памяти DS:[(E)BX+беззнако-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вое значение AL]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+------------+---+---+---+--+--------------------------+ ¦D7 ¦XLATB ¦4 ¦5 ¦5 ¦11¦Устанавливает AL в байт¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦памяти DS:[(E)BX+беззнако-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вое значение AL]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+------------+---+---+---+--+--------------------------- Инструкция XLAT изменяет значение регистра AL в соответствии со значением индекса и записью таблицы. AL должен представлять собой беззнаковый индекс с таблице, адресуемой через DS:BX (для атрибута размера адреса 16 бит) или через DS:EBX (для атрибута размера адреса 32 бита). Операнд инструкции XLAT допускает переопределение сегмента. Инструкция XLAT использует содержимое регистра BX, если оно отли- чается от смещения операнда. Смещение операнда должно помещаться в BX/EBX предыдущей инструкцией. Если таблица BX/EBX всегда будет находиться в сегменте DS, то можно использовать форму инструкции без операнда XLATB.XOR Логическая операция "исключающее ИЛИ"
------------------------------------------------------- O D I T S Z A P C 0 * * ? * 0 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T-------------T---T---T---T--T-------------------------+ ¦ ¦ ¦486¦386¦286¦86¦ ¦ +--------+-------------+---+---+--T+-T+-------------------------+ ¦34 ib ¦XOR AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦над непосредственным бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦том и AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦35 iw ¦XOR AX,imm16 ¦1 ¦2 ¦3 ¦4 ¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦над непосредственным сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вом и AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦80 iw ¦XOR EAX,imm32¦1 ¦2 ¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦над непосредственным двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ным словом и EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦80 /6 ib¦XOR r/m8,imm8¦1/3¦2/7¦3/¦7/¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦7 ¦17¦над непосредственным бай-¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦том и байтом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦81 /6 iw¦XOR r/m16, ¦1/3¦2/7¦3/¦7/¦Операция "исключающее ИЛИ"¦ ¦ ¦ imm16 ¦ ¦ ¦7 ¦17¦над непосредственным сло-¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦вом и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦81 /6 id¦XOR r/m32, ¦1/3¦2/7¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦над непосредственным двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ным словом и двойным сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦83 /6 ib¦XOR r/m16, ¦1/3¦2/7¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦над непосредственным рас-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ширяемым по знаку словом и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦83 /6 ib¦XOR r/m32, ¦1/3¦2/7¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦над непосредственным рас-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ширяемым по знаку словом и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойным словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦30 /r ¦XOR r/m8,r8 ¦1/3¦2/6¦2/¦3/¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦7 ¦16¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦байт и байтом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦31 /r ¦XOR r/m16,r16¦1/3¦2/6¦2/¦3/¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦7 ¦16¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦слово и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦31 /r ¦XOR r/m32,r32¦1/3¦2/6¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово и двойным¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦32 /r ¦XOR r8,r/m8 ¦1/2¦2/7¦2/¦3/¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦7 ¦9+¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦байт и байтом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦33 /r ¦XOR r16,r/m16¦1/2¦2/7¦2/¦3/¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦7 ¦9+¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦EA¦слово и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-------------+---+---+--+--+--------------------------+ ¦33 /r ¦XOR r32,r/m32¦1/2¦2/7¦ ¦ ¦Операция "исключающее ИЛИ"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦над регистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово и двойным¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+-------------+---+---+--+--+--------------------------- Операция XOR вычисляет операцию "исключающее ИЛИ" над двумя операндами. Каждый бит результата равен 1, если соответствующие биты операндов различны, и нулю, если соответствующие биты совпа- дают. Результат замещает первый операнд.
Назад | Содержание | Вперед