-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||0F A6/r CMPXCHG r/m8,r8 6/7, если срав- Сравнение AL с байтом || нение успешно, r/m. При равенстве ус- || и 6/10 иначе танавливает ZF и загру-|| жает байт регистра в || байт r/m. Иначе очищает|| ZF и загружает байт r/m|| в AL ||0F A7/r CMPXCHG 6/7, если срав- Сравнение AL со словом || r/m16,r16 нение успешно, r/m. При равенстве ус- || и 6/10 иначе танавливает ZF и загру-|| жает регистр-слово в || слово r/m. Иначе очищает|| ZF и загружает слово r/m|| в AX ||0F A7/r CMPXCHG 6/7, если срав- Сравнение AL с двойным || r/m32,r32 нение успешно, словом r/m. При равенс-|| и 6/10 иначе тве устан-т ZF и загру-|| жает регистр-двойное || слово r/m. Иначе очищает|| ZF и загружает двойное || слово r/m в EAX. |----------------------------------------------------------------- Работа команды IF аккумулятор = DEST ZF <- 1 DEST <- SRCELSE ZF <- 0 аккумулятор <- DEST ОписаниеКоманда CMPXCHG сравнивает аккумулятор (регистр AL, AX или EAX) с DEST.Если они равны, то SRC загружается в DEST. В противном случае DESTзагружается в аккумулятор.Изменяемые флагиФлаги CF, PF, AF, SF и OF изменяются таким образом, как если бы былавыполнена команда CMP с DEST и аккумулятором в качестве операндов. Флаг ZFустанавливается, если операнд назначения и аккумулятор равны; в противномслучае он очищается. Исключения защищенного режима#GP(0), если результат должен помещаться в сегмент, для которого запрещеназапись; #GP(0) в случае недопустимого исполнительного адреса операндапамяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае недопустимогоадреса в сегменте SS; #PF(код сбоя) в случае страничного сбоя; #AC дляневыравненной ссылки к памяти при текущем уровне привилегированности,равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев; #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3. ПримечанияЭта команда может быть использоваться с префиксом LOCK. Для упрощенияинтерфейса с шиной процессора операнд назначения принимает цикл записибезотносительно к результату сравнения. Если сравнение закончилосьнеудачно, то DEST записывается назад, а в противном случае в операндназначения записывается DEST. (Процессор никогда не выдает цикла чтения сзахватом без соответствующей записи с захватом). Эта команда процессорами386 не поддерживается. Использование команды CMPXCHG совместимым с 386образом см. в разделе 3.11.
CWD/CDQ - Преобразование слова в двойное слова Преобразование двойного слова в учетверенное слово
-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || || 99 CWD 3 DX:AX <- расширение знаком AX || 99 CDQ 3 EDX:EAX <- расширение знаком EAX |----------------------------------------------------------------- Работа команды IF OperandSize = 16 (* команда CWD *)THEN IF AX < 0 THEN DX <- 0FFFFH; ELSE DX <- 0; FI;ELSE (* OperandSize = 32, команда CDQ *) IF EAX < 0 THEN EDX <- 0FFFFFFFFH; ELSE EDX <- 0; FI;FI; ОписаниеКоманда CWD преобразует имеющее знак слово в регистре AX в имеющее знакдвойное слово в паре регистров DX:AX, расширяя старший бит регистра AX вовсе биты регистра DX. Команда CDQ преобразует имеющее знак двойное словоиз регистра EAX в имеющее знак 64-разрядное целое в паре регистровEDX:EAX, расширяя старший бит регистра EAX (знакового бита) во все битырегистра EDX. Отметим, что команда CWD отличается от команды CWDE. КомандаCWDE использует как назначение регистр EAX, вместо пары регистров DX:AX. Изменяемые флагиОтсутствуют Исключения защищенного режимаОтсутствуют Исключения режима реальных адресовОтсутствуют Исключения виртуального режима 8086Отсутствуют