Инструкции процессора (продолжение)



CBW Преобразование байта в слово.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T------T-----T-----T------T---------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+--------+------+-----+-----+------+---------------+ ¦98 ¦CWB ¦3 ¦3 ¦2 ¦2 ¦Регистр AX бу-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦дет представ-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦лять собой рас-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ширение по зна-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ку регистра AL.¦ L------------+--------+------+-----+-----+------+---------------- Инструкция CBW преобразует байт со знаком в регистре AL в слово со знаком в регистре AX, распространяя старший бит AL (бит знака) на все биты регистра AH. 2

CDQ Преобразование двойного слова в четверное (только для процессоров 386 и i486)

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T------T-----T----------------------------+ ¦ ¦ ¦486 ¦386 ¦ ¦ +------------+--------+------+-----+----------------------------+ ¦99 ¦CDQ ¦3 ¦2 ¦Регистры EDX:EAX будут пред-¦ ¦ ¦ ¦ ¦ ¦ставлять собой расширение по¦ ¦ ¦ ¦ ¦ ¦знаку регистра EAX ¦ L------------+--------+------+-----+----------------------------- Инструкция CDQ преобразует двойное слово со знаком в регист- ре EAX в четверное слово со знаком (64-битовое целое) в паре ре- гистров EDX:EAX, распространяя старший бит регистра EAX (бит зна- ка) на все биты регистра EDX.

CLC Очистка флага переноса.

--------------------------------------------------------- O D I T S Z A P C 0 ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T-----T-----T----T---T--------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+--------+-----+-----+----+---+--------------------+ ¦F8 ¦CLC ¦2 ¦2 ¦2 ¦2 ¦Очищает флаг перено-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦са. ¦ L------------+--------+-----+-----+----+---+--------------------- Инструкция CLC присваивает флагу переноса нулевое значение. На состояние других флагов или регистров она не влияет.

CLD Очистка флага направления.

--------------------------------------------------------- O D I T S Z A P C 0 ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T----T-----T-----T---T--------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+--------+----+-----+-----+---+--------------------+ ¦C ¦CLD ¦2 ¦2 ¦2 ¦2 ¦Очищает флаг направ-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ления. ¦ L------------+--------+----+-----+-----+---+--------------------- Инструкция CLD присваивает флагу направления нулевое значе- ние. На состояние других флагов или регистров она не влияет. Пос- ле выполнения инструкции CLD строковые операции будут увеличивать значения используемых индексных регистров (SI или DI).

CLI Очистка флага прерывания.

--------------------------------------------------------- O D I T S Z A P C 0 ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T----T-----T-----T--T---------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86¦ ¦ +------------+--------+----+-----+-----+--+---------------------+ ¦FA ¦CLI ¦5 ¦3 ¦3 ¦2 ¦Очистка флага преры-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вания. ¦ L------------+--------+----+-----+-----+--+---------------------- Если текущий уровень привилегий не меньше заданного IOPL (уровень привилегий ввода-вывода), инструкция CLI присваивает флагу переноса нулевое значение. На состояние других флагов или регистров она не влияет. В конце инструкции CLI или в другой точ- ке с момента установки флага прерывания переорганизация внешних прерываний не выполняется.

CLTS Очистка флага переключения задач (только для защищенного режима процессоров 80286/386/i486).

--------------------------------------------------------- O D I T S Z A P C TS = 0 (TS находится в CR0, а не в регистре флагов) ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T----T-----T---T--------------------------+ ¦ ¦ ¦486 ¦386 ¦286¦ ¦ +------------+--------+----+-----+---+--------------------------+ ¦0F 006 ¦CLTS ¦7 ¦5 ¦2 ¦Очистка флага переключения¦ ¦ ¦ ¦ ¦ ¦ ¦задач. ¦ L------------+--------+----+-----+---+--------------------------- Инструкция CLTS очищает флаг переключения задач в регистре CR0. Этот флаг устанавливается процессором 386 каждый раз, когда происходит переключение задач. Флаг TS используется для управле- ния расширениями процессора: - если флаг TS установлен, каждое выполнение инструкции ESC перехватывается; - если установлены оба флага TS и MP, то перехватывается вы- полнение инструкции WAIT. Таким образом, если выполнение инструкции произошло после начала выполнения инструкции ESC, то перед тем, как сможет выпол- няться новая инструкция ESC, может потребоваться сохранения со- держимого расширения процессора. Инструкция CLTS встречается не в прикладных программах, а в системном программном обеспечении. Это привилегированная инструк- ция, которая может выполняться только на уровне нулевого приори- тета.

CMC Дополнение флага переноса.

--------------------------------------------------------- O D I T S Z A P C * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T--------T----T-----T-----T---T--------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+--------+----+-----+-----+---+--------------------+ ¦А5 ¦CMC ¦2 ¦2 ¦2 ¦2 ¦Дополнение флага пе-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦реноса. ¦ L------------+--------+----+-----+-----+---+--------------------- Инструкция CMC изменяет значение флага переноса на обратное. Другие флаги не изменяются.

CMP Сравнение двух операндов.

--------------------------------------------------------- O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T---------------T---T---T---T-------T--------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +------------+---------------+---+---+---+-------+--------------+ ¦3C ib ¦CMP AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта с AL.¦ +------------+---------------+---+---+---+-------+--------------+ ¦3D iw ¦CMP AX,imm16 ¦1 ¦2 ¦ ¦ ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го слова с¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦EAX. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦3D id ¦CMP AX,imm32 ¦1 ¦2 ¦ ¦ ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова с EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------------+---------------+---+---+---+-------+--------------+ ¦80 /7 ib ¦CMP r/m8,imm8 ¦1/2¦2/5¦3/6¦4/10+EA¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта с¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байтом r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦81 /7 iw ¦CMP r/m32,imm32¦1/2¦2/5¦3/6¦4/10+EA¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го слова со¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦81 /7 id ¦CMP r/m32,imm32¦1/2¦2/5¦ ¦ ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова с двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦83 /7 ib ¦CMP r/m16,imm8 ¦1/2¦2/5¦ ¦ ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта, рас-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ширенного по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку, со сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вом r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦83 /7 ib ¦CMP r/m32,imm8 ¦1/2¦2/5¦ ¦ ¦Сравнение не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го байта, рас-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ширенного по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку, с двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦38 /r ¦CMP r/m8,r8 ¦1/2¦2/5¦2/7¦3/9+EA ¦Сравнение бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦тового регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ра с байтом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦39 /r ¦CMP r/m16,r16 ¦1/2¦2/5¦2/7¦3/9+EA ¦Сравнение ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово со¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦39 /r ¦CMP r/m32,r32 ¦1/2¦2/5¦ ¦ ¦Сравнение ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово с двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦3A /r ¦CMP r8,r/m32 ¦1/2¦2/6¦2/6¦3/9+EA ¦Сравнение бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦та r/m с бай-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦товым регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦3B /r ¦CMP r16,r/m8 ¦1/2¦2/6¦2/6¦3/9+EA ¦Сравнение сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ва r/m с реги-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦стром разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово. ¦ +------------+---------------+---+---+---+-------+--------------+ ¦3B /r ¦CMP r32,r/m32 ¦1/2¦2/6¦ ¦ ¦Сравнение дво-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦йного слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m с регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово.¦ L------------+---------------+---+---+---+-------+--------------- Инструкция CMP вычитает второй операнд из первого, но, в от- личие от инструкции SUB, не сохраняет результат, а только изменя- ет значения флагов. Инструкция CMP обычно используется в сочета- нии с условными переходами и инструкцией SETсс. Если операнд, превышающий один байт, сравнивается с непосредственным байтовым значением, то байт расширяется по знаку.

CMPS Сравнение двух операндов.

CMPSB --------------------------------------------------------- CMPSW O D I T S Z A P C CMPSD * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T---------------T---T---T---T-----T------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A6 ¦CMPS m8,m8 ¦8 ¦10 ¦8 ¦22 ¦Сравнение байт ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI] (второй¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦операнд) и [(E)SI]¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(первый операнд). ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A7 ¦CMPS m16,m16 ¦8 ¦10 ¦8 ¦22 ¦Сравнение слов ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI] (второй¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦операнд) и [(E)SI]¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(первый операнд). ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A7 ¦CMPS m32,m32 ¦8 ¦10 ¦ ¦ ¦Сравнение двойных¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слов ES:[(E)DI]¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(второй операнд) и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)SI] (первый¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦операнд). ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A6 ¦CMPSB ¦8 ¦10 ¦8 ¦22 ¦Сравнение байт ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI] и DS[SI]. ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A7 ¦CMPSW ¦8 ¦10 ¦8 ¦22 ¦Сравнение слов ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI] и DS[SI]. ¦ +----------+---------------+---+---+---+-----+------------------+ ¦A7 ¦CMPSBD ¦8 ¦10 ¦ ¦ ¦Сравнение двойных ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слов ES:[(E)DI] и ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦DS[SI]. ¦ L----------+---------------+---+---+---+-----+------------------- Инструкция CMPS сравнивает байт, слово или двойное слово, на которое указывает источник (индексный регистр) с байтом, словом или двойным словом, на которое указывает приемник (индексный ре- гистр). Если атрибут размера адреса в данной инструкции равен 16, то в качестве исходного и целевого индексных регистров (источник и приемник) будут использоваться регистры SI и DI. В противном слу- чае будут использоваться регистры ESI и EDI. Перед выполнением инструкции CMPS загрузите в регистры SI и DI правильные индексные значения. Сравнение выполняется путем вычитания операнда, на который указывает индексный регистр приемника, с операндом, на который указывает индексный регистр источника. Заметим, что направлением вычитания для CMPS является [SI] - [DI] или [EDI] - [EDI]. Левый операнд (SI или DI) представляет собой источник, а правый (DI или EDI) - приемник. Это обратный порядок по сравнению с тем, который обычно принят фирмой Intel, когда левый операнд - это приемник, а правый - источник. Результат вычитания не сохраняется, изменение отражают толь- ко флаги. Типы операндов определяют, будут ли сравниваться байты, слова или двойные слова. Если не присутствует байт переопределе- ния сегмента, то для первого операнда (SI или ESI) используется регистр DI. Второй операнд (DI или EDI) должен адресоваться через регистр ES. Переопределение сегмента не допускается. После выполнения сравнения индексный регистр источника и ин- дексный регистр приемника автоматически продвигаются. Если флаг направления равен 0 (выполнена инструкция CLD), то регистры уве- личиваются. Если флаг направления равен 1 (была выполнена инс- трукция STD), то значения регистров уменьшаются. Если сравнивают- ся байты, то регистры уменьшаются или увеличиваются на 1, если сравниваются слова - на 2, а если двойные слова - то на 4. Синонимами инструкции CMPS для байта, слова и двойного слова являются инструкции CMPSB, CMPSW и CMPSD соответственно. Инструкции CMPS при сравнении блоков байт, слов или двойных слов CX или ECX может предшествовать префикс REPE или REPNE. Бо- лее подробно об этой операции рассказывается в описании REP.

CMPXCHG Сравнение и обмен (только для процессоров i486).

--------------------------------------------------------- O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T-----------------T-----------------T------------------+ ¦ ¦ ¦486 ¦ ¦ +--------+-----------------+-----------------+------------------+ ¦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 r/m16,r16¦6/7, если сравне-¦Сравнение AX cо¦ ¦ ¦ ¦ние выполнено ус-¦словом r/m. Если¦ ¦ ¦ ¦пешно; 6/10, если¦они равны, то ус-¦ ¦ ¦ ¦сравнение завер-¦танавливается флаг¦ ¦ ¦ ¦шилось неудачно ¦ZF, и регистр раз-¦ ¦ ¦ ¦ ¦мером в слово заг-¦ ¦ ¦ ¦ ¦ружается в слово r¦ ¦ ¦ ¦ ¦/m. В противном¦ ¦ ¦ ¦ ¦случае флаг ZF¦ ¦ ¦ ¦ ¦очищается, и слово¦ ¦ ¦ ¦ ¦r/m загружается в¦ ¦ ¦ ¦ ¦регистр AX. ¦ +--------+-----------------+-----------------+------------------+ ¦0F A7/r ¦CMPXCHG r/m32,r32¦6/7, если сравне-¦Сравнение EAX c¦ ¦ ¦ ¦ние выполнено ус-¦двойным словом¦ ¦ ¦ ¦пешно; 6/10, если¦r/m. Если они рав-¦ ¦ ¦ ¦сравнение завер-¦ны, то устанавли-¦ ¦ ¦ ¦шилось неудачно ¦вается флаг ZF, и¦ ¦ ¦ ¦ ¦регистр размером в¦ ¦ ¦ ¦ ¦двойное слово заг-¦ ¦ ¦ ¦ ¦ружается в двойное¦ ¦ ¦ ¦ ¦слово r/m. В про-¦ ¦ ¦ ¦ ¦тивном случае флаг¦ ¦ ¦ ¦ ¦ZF очищается, и¦ ¦ ¦ ¦ ¦двойное слово r/m¦ ¦ ¦ ¦ ¦загружается в ре-¦ ¦ ¦ ¦ ¦гистр EAX. ¦ L--------+-----------------+-----------------+------------------- Инструкция CMPXCHG сравнивает аккумулятор (регистр AL, AX, или EAX) с приемником. Если они равны, то источник загружается в приемник, в противном случае источник загружается в аккумулятор. Исключительные ситуации защищенного режима: #GP(0), если ре- зультат находится в сегменте, запись в который запрещена; #GP(0), если в сегментах CS, DS, ES, FS или GS находится недопустимый действующий адрес операнда в памяти; #SS(0), если в сегменте SS находится недопустимый адрес; #PF (сбой) при сбое страницы; #AC при невыровненной ссылке на память (если текущим уровнем привиле- гий является уровень 3). Исключительные ситуации реального режима: если любая часть операнда лежит вне действующего пространства адресов (от 0 до 0FFFFh), то возникает прерывание 13. Исключительные ситуации виртуального режима процессора 8086: прерывание 13, как в реальном режиме, и #PF и #AC, как в защищен- ном режиме. Примечание: Данная инструкция может использоваться с префиксом LOCK. Чтобы упростить интерфейс с шиной процессо- ра, операнд-приемник получает цикл записи безотносительно к результату сравнения. Если сравнение заканчивается неудач- но, то приемник записывается обратно, в противном случае в приемник записывается источник. (Процессор никогда не соз- дает чтение с блокировкой без записи с блокировкой.)

CWD Преобразование слова в двойное слово (только для процессоров 386 и i486).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T------------T----T----T----T---T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+------------+----+----+----+---+------------------+ ¦99 ¦CWD ¦3 ¦2 ¦2 ¦5 ¦В DX:AX записыва-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ется AX с расшире-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нием знака. ¦ L------------+------------+----+----+----+---+------------------- Инструкция CWD преобразует слово со знаком в регистре AX в двойное слово со знаком в паре регистров DX:AX, распространяя старший бит AX на все биты DX. Заметим, что инструкция CWD отли- чается от инструкции CWDE. Инструкция CWDE использует в качестве приемника вместо DX:AX EAX.

CWDE Преобразование слова в двойное слово (только для процессоров 386 и i486).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T------------T----T----T----T---T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+------------+----+----+----+---+------------------+ ¦98 ¦CWDE ¦3 ¦3 ¦ ¦ ¦В EAX записыва-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ется AX с расшире-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нием знака. ¦ L------------+------------+----+----+----+---+------------------- Инструкция CWDE преобразует слово со знаком в регистре AX в двойное слово со знаком в регистрe EAX, распространяя старший бит AX на старшие байты EAX. Заметим, что инструкция CWDE отличается от инструкции CWD. Инструкция CWDE использует в качестве приемни- ка вместо EAX пару регистров DX:AX.

DAA Десятичная настройка регистра AL после сложения.

--------------------------------------------------------- O D I T S Z A P C ? * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T------------T----T----T----T---T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+------------+----+----+----+---+------------------+ ¦27 ¦DAA ¦2 ¦4 ¦3 ¦4 ¦Десятичная наст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ройка регистра AL¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦после сложения. ¦ L------------+------------+----+----+----+---+------------------- Выполняйте инструкцию DAA только после выполнения инструкции ADD, которая оставляет байтовый результат из двух двоично-деся- тичных цифр в регистре AL. Операнды инструкции DAA должны состо- ять из двух упакованных двоично-десятичных цифр (BCD). Инструкция DAA настраивает AL таким образом, чтобы он содержал корректный упакованный десятичный результат из двух цифр.

DAS Десятичная настройка регистра AL после вычитания.

--------------------------------------------------------- O D I T S Z A P C ? * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------------T------------T----T----T----T---T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------------+------------+----+----+----+---+------------------+ ¦2F ¦DAS ¦2 ¦4 ¦3 ¦4 ¦Десятичная наст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ройка регистра AL¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦после вычитания. ¦ L------------+------------+----+----+----+---+------------------- Выполняйте инструкцию DAS только после выполнения инструкции вычитания, которая оставляет байтовый результат из двух двоич- но-десятичных цифр в регистре AL. Операнды инструкции DAS должны состоять из двух упакованных двоично-десятичных цифр (BCD). Инс- трукция DAS настраивает AL таким образом, чтобы он содержал кор- ректный упакованный десятичный результат из двух цифр.

DEC Уменьшение на 1.

--------------------------------------------------------- O D I T S Z A P C * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T----------T----T----T----T-------T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +----------+----------+----+----+----+-------+------------------+ ¦FE /1 ¦DEC r/m8 ¦1/3 ¦2/6 ¦2/7 ¦3/15+EA¦Уменьшение байта¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m на единицу. ¦ +----------+----------+----+----+----+-------+------------------+ ¦FF /1 ¦DEC r/m16 ¦1/3 ¦2/6 ¦2/7 ¦3/15+EA¦Уменьшение слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m на единицу. ¦ +----------+----------+----+----+----+-------+------------------+ ¦ ¦DEC r/m32 ¦1/3 ¦2/6 ¦ ¦ ¦Уменьшение двойно-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦го слова r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦единицу. ¦ +----------+----------+----+----+----+-------+------------------+ ¦48+rw ¦DEC r16 ¦1 ¦2 ¦2 ¦3 ¦Уменьшение регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ра размером в сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦во на 1. ¦ +----------+----------+----+----+----+-------+------------------+ ¦48+rw ¦ EC r32 ¦1 ¦2 ¦ ¦ ¦Уменьшение регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ра размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1. ¦ L----------+----------+----+----+----+-------+------------------- Инструкция DEC вычитает из операнда 1. Флаг переноса при этом не изменяется. Чтобы изменялся флаг переноса, используйте инструкцию SUB с непосредственным операндом и 1.

DIV Беззнаковое деление.

--------------------------------------------------------- O D I T S Z A P C ? ? ? ? ? ? ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T----------T-----T-------T---------------------------+ ¦ ¦ ¦486 ¦386 ¦ ¦ +----------+----------+-----+-------+---------------------------+ ¦F6/6 ¦DIV r/m8 ¦16/16¦14/17 ¦Беззнаковое деление AX на¦ ¦ ¦ ¦ ¦ ¦байт r/m (AL= частное, AH=¦ ¦ ¦ ¦ ¦ ¦остаток). ¦ +----------+----------+-----+-------+---------------------------+ ¦F7/6 ¦DIV r/m16 ¦24/24¦22/25 ¦Беззнаковое деление DX:AX¦ ¦ ¦ ¦ ¦ ¦на слово r/m (AL=частное,¦ ¦ ¦ ¦ ¦ ¦AH= остаток). ¦ +----------+----------+-----+-------+---------------------------+ ¦F7/6 ¦DIV r/m32 ¦40/40¦38/41 ¦Беззнаковое деление EDX:EAX¦ ¦ ¦ ¦ ¦ ¦на двойное слово r/m¦ ¦ ¦ ¦ ¦ ¦(AL=частное, AH=остаток). ¦ L----------+----------+-----+-------+---------------------------- Операция DIV выполняет беззнаковое деление. Делимое задается неявно. В качестве операнда задается только делитель. Остаток всегда меньше меньше чем делитель. Тип делителя определяет, какие регистры нужно использовать: ---------T---------T-----------T-----------T-----------------¬ ¦Размер ¦Делимое ¦Делитель ¦Частное ¦Остаток ¦ +--------+---------+-----------+-----------+-----------------+ ¦байт ¦AX ¦r/m ¦AL ¦AH ¦ ¦cлово ¦DX:AX ¦r/m16 ¦AX ¦DX ¦ ¦двойное ¦ ¦ ¦ ¦ ¦ ¦слово ¦EDX:EAX ¦r/m32 ¦EAX ¦EDX (только для ¦ ¦ ¦ ¦ ¦ ¦процессора 386) ¦ L--------+---------+-----------+-----------+------------------

ENTER Устанавливает границы стека для параметров процедуры (только для процессоров 80186/286/386/486).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T-----------------T----T----T-----T------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦ ¦ +----------+-----------------+----+----+-----+------------------+ ¦C8 iw 00 ¦Enter imm16,0 ¦14 ¦10 ¦11 ¦Устанавливает гра-¦ ¦ ¦ ¦ ¦ ¦ ¦ницы стека проце-¦ ¦ ¦ ¦ ¦ ¦ ¦дуры. ¦ +----------+-----------------+----+----+-----+------------------+ ¦C8 iw 01 ¦Enter imm16,1 ¦17 ¦12 ¦15 ¦Устанавливает гра-¦ ¦ ¦ ¦ ¦ ¦ ¦ницы стека для па-¦ ¦ ¦ ¦ ¦ ¦ ¦раметров процеду-¦ ¦ ¦ ¦ ¦ ¦ ¦ры. ¦ +----------+-----------------+----+----+-----+------------------+ ¦C8 iw ib ¦Enter imm16,imm8 ¦17+ ¦15+ ¦12+ ¦Устанавливает гра-¦ ¦ ¦ ¦3n ¦4(n-¦4(n- ¦ницы стека для па-¦ ¦ ¦ ¦ ¦1) ¦1) ¦раметров процеду-¦ ¦ ¦ ¦ ¦ ¦ ¦ры. ¦ L----------+-----------------+----+----+-----+------------------- Команда ENTER создает границы стека, необходимые в большинс- тве блочно-структурированных языков высокого уровня. Первый операнд задает число байт динамической памяти, выделяемых в памя- ти для подпрограммы, в которую осуществляется вход. Второй опе- ранд задает лексический уровень вложенности (от 0 до 31) подпрог- раммы в исходном коде языка высокого уровня. Он определяет число указателей границ стека, копируемых в новые границы стека из пре- дыдущих границ. Текущим указателем границы стека является регистр BP (или EBP, если атрибут размера операнда равен 32 битам). Если атрибут размера операнда равен 16 битам, то процессор в качестве указателя границы использует регистр BP, а в качестве указателя стека - SP. Если атрибут размера операнда равен 32, то процессор в качестве указателя границы использует регистр EBP, а в качестве указателя стека - ESP. Если второй операнд равен 0, то инструкция ENTER заносит указатель границы стека (BP или EBP) в стек. Затем ENTER вычитает из указателя стека первый операнд и устанавливает границу стека в значение текущего указателя стека. Например, процедура с 12 байтами локальный переменных имела бы в качестве точки входа инструкцию ENTER 12,0 и инструкцию LEAVE перед каждой инструкцией RET. К 12 локальным байтам стека можно при этом адресоваться через отрицательные смещения относи- тельно указателя стека.

HLT Останов.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +-----------T---------------T---T---T---T----T------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +-----------+---------------+---+---+---+----+------------------+ ¦F4 ¦ HLT ¦4 ¦5 ¦2 ¦2 ¦Выполняет останов.¦ L-----------+---------------+---+---+---+----+------------------- Инструкция HLT останавливает выполнение инструкций и перево- дит процессор х86 в состояние останова. Разрешение прерывания (NMI) или сброс возобновит выполнение. Прерывание (включая NMI) используется для возобновления выполнения после HLT. На инструк- цию после HLT указывает значение CS:IP (или CS:EIP для процессора 386).

IDIV Деление со знаком.

--------------------------------------------------------- O D I T S Z A P C ? ? ? ? ? ? ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T----------T-----T-----T------T--------T-------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +----------+----------+-----+-----+------+--------+-------------+ ¦F6/7 ¦IDIV r/m8 ¦19/20¦19 ¦17/20 ¦101- ¦Деление со¦ ¦ ¦ ¦ ¦ ¦ ¦112/107-¦знаком AX на¦ ¦ ¦ ¦ ¦ ¦ ¦118+EA ¦байт r/m (AL=¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦частное, AH=¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦остаток). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+----------+-----+-----+------+--------+-------------+ ¦F7/7 ¦IDIV r/m16¦27/28¦27 ¦25/28 ¦165- ¦Деление со¦ ¦ ¦ ¦ ¦ ¦ ¦184/171-¦знаком DX:AX¦ ¦ ¦ ¦ ¦ ¦ ¦190+EA ¦на слово EA¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(AX= частное,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦DX= остаток).¦ +----------+----------+-----+-----+------+--------+-------------+ ¦F7/7 ¦IDIV r/m32¦43/44¦43 ¦ ¦ ¦Деление со¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаком пары¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦регистров EDX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦:EDX на двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(EAX= част-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное, EDX= ос-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦таток). ¦ L----------+----------+-----+-----+------+--------+-------------- Операция IDIV выполняет деление со знаком. Делимое, частное и остаток размещаются неявно в фиксированных регистрах. В качест- ве явного операнда r/m задается только делитель. Тип делителя оп- ределяет, какие регистры будут использоваться: ------------T---------T----------T-----------T------------------¬ ¦ Размер ¦ Частное ¦ Делитель ¦ Остаток ¦ Делимое ¦ +-----------+---------+----------+-----------+------------------+ ¦ байт ¦ AL ¦ r/m ¦ AH ¦ AH ¦ ¦ cлово ¦ AX ¦ r/m16 ¦ DX ¦ DX:AX ¦ ¦ двойное ¦ ¦ ¦ ¦ ¦ ¦ слово ¦ EAX ¦ r/m32 ¦ EDX ¦ EDX:EAX (только ¦ ¦ ¦ ¦ ¦ ¦ для процессора ¦ ¦ ¦ ¦ ¦ ¦ 386) ¦ L-----------+---------+----------+-----------+------------------- Если полученное в результате частное слишком велико и не мо- жет разместиться в приемнике, или выполняется деление на 0, то генерируется прерывание 0. Нецелое частное усекается в сторону нуля. Остаток имеет тот же знак, что и делимое, а абсолютное зна- чение остатка всегда меньше, чем абсолютное значение делителя. 20

IMUL Умножение со знаком.

--------------------------------------------------------- O D I T S Z A P C * ? ? ? ? * ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦oперации ¦ +---------T----------T-----T-----T------T--------T--------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦F6/5 ¦IMUL r/m8 ¦13- ¦19- ¦13/16 ¦80-98/86¦AX <- AL* байт¦ ¦ ¦ ¦18/13¦14/12¦ ¦-104+EA ¦r/m. ¦ ¦ ¦ ¦-18 ¦-17 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦F7/5 ¦IMUL r/m16¦13- ¦9- ¦21/24 ¦128-154/¦DX:AX <- AL*¦ ¦ ¦ ¦26/13¦22/12¦ ¦134-160 ¦слово r/m. ¦ ¦ ¦ ¦-26 ¦-25 ¦ ¦+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦F7/5 ¦IMUL r/m32¦12- ¦9- ¦ ¦ ¦EDX:EAX <- EAL¦ ¦ ¦ ¦42/13¦38/12¦ ¦ ¦* двойное сло-¦ ¦ ¦ ¦-42 ¦-41 ¦ ¦ ¦во r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦OF AF/r ¦IMUL r16, ¦13- ¦9- ¦ ¦ ¦Регистр разме-¦ ¦ ¦rm/16 ¦26/13¦22/12¦ ¦ ¦ром в слово <-¦ ¦ ¦ ¦-26 ¦-25 ¦ ¦ ¦регистр разме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ром в слово *¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦6B /r ib ¦IMUL r16, ¦13- ¦9- ¦21/24 ¦ ¦Регистр разме-¦ ¦ ¦rm/16,imm8¦26/13¦14/12¦ ¦ ¦ром в слово <-¦ ¦ ¦ ¦-26 ¦-17 ¦ ¦ ¦r/m16 * не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственный¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байт, расши-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ренный по зна-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ку. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦6B /r ib ¦IMUL r32, ¦13-42¦9- ¦ ¦ ¦Регистр разме-¦ ¦ ¦rm/32,imm8¦ ¦14/12¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦ ¦-17 ¦ ¦ ¦слово <- r/m16¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* непосредс-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦твенный байт,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦расширенный по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦6B /r ib ¦IMUL r16, ¦13-26¦9- ¦21/24 ¦ ¦Регистр разме-¦ ¦ ¦imm8 ¦ ¦14/12¦ ¦ ¦ром в слово¦ ¦ ¦ ¦ ¦-17 ¦ ¦ ¦<- регистр¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово * не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственный¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байт, расши-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ренный по зна-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ку. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦6B /r ib ¦IMUL r32, ¦13-42¦9- ¦ ¦ ¦Регистр разме-¦ ¦ ¦imm8 ¦ ¦14/12¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦ ¦-17 ¦ ¦ ¦слово <- ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистр размером¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦в двойное сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦во * не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственный¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байт, расши-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ренный по зна-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ку. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦6B /r iw ¦IMUL r16, ¦13-26¦9- ¦21/24 ¦ ¦Регистр разме-¦ ¦ ¦r/m16, ¦/13- ¦22/12¦ ¦ ¦ром в слово¦ ¦ ¦imm16 ¦26 ¦-25 ¦ ¦ ¦<- непосредст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦венное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m16. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦69 /r id ¦IMUL r16, ¦13-26¦9- ¦21/24 ¦ ¦Регистр разме-¦ ¦ ¦r/m16, ¦/13- ¦22/12¦ ¦ ¦ром в двойное¦ ¦ ¦imm16 ¦26 ¦-25 ¦ ¦ ¦слово r/m32 <-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* посредст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦венное двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦69 /r iw ¦IMUL r16, ¦13-26¦9- ¦ ¦ ¦Регистр разме-¦ ¦ ¦imm16 ¦/13- ¦22/12¦ ¦ ¦ром в слово¦ ¦ ¦ ¦26 ¦-25 ¦ ¦ ¦<- r/m16 * не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* посредст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦венное слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------+----------+-----+-----+------+--------+--------------+ ¦69 /r id ¦IMUL r32, ¦13-42¦9- ¦ ¦ ¦Регистр разме-¦ ¦ ¦imm32 ¦/13- ¦38/12¦ ¦ ¦ром в двойное¦ ¦ ¦ ¦42 ¦-41 ¦ ¦ ¦слово <- r/m32¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦* посредст-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦венное двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L---------+----------+-----+-----+------+--------+--------------- Инструкция IMUL выполняет умножение со знаком. Некоторые формы этой инструкции используют неявные регистровые операнды. Сочетания операндов для всех форм инструкций показаны ниже в столбце "Описание". При следующих условиях инструкция IMUL очища- ет флаг переполнения и флаг переноса: -------------------T-----------------------------------------¬ ¦ Форма инструкции ¦ Условия очистки флагов CF (переноса) и ¦ ¦ ¦ OF (переполнения) ¦ +------------------+-----------------------------------------+ ¦ r/m8 ¦ AL = расширение по знаку AL до 16 бит ¦ ¦ ¦ ¦ ¦ r/m16 ¦ AX = расширение по знаку AX до 32 бит ¦ ¦ ¦ ¦ ¦ r/m32 ¦ EDX:EAX = расширение по знаку EAX до 32 ¦ ¦ ¦ бит ¦ ¦ ¦ ¦ ¦ r16,r/m16 ¦ Результат умещается равно в 16 бит ¦ ¦ ¦ ¦ ¦ r32,r/m32 ¦ Результат умещается равно в 32 бита ¦ ¦ ¦ ¦ ¦ r16,r/m16,imm16 ¦ Результат умещается равно в 16 бит ¦ ¦ ¦ ¦ ¦ r16,r/m32,imm32 ¦ Результат умещается равно в 32 бита ¦ L------------------+------------------------------------------

IN Ввод из порта.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-----T-----------T--------T-------T---T--T---------------------+ ¦ ¦ ¦486 ¦386 ¦286¦86¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦E4 ib¦IN AL,imm8 ¦14, ¦12, ¦5 ¦10¦Ввод непосредственно-¦ ¦ ¦ ¦pm=8/28,¦pm=6/26¦ ¦ ¦го значения из порта¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦(байта) и запись его¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦в регистр AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦E5 ib¦IN AX,imm8 ¦14, ¦12, ¦5 ¦10¦Ввод непосредственно-¦ ¦ ¦ ¦pm=8/28,¦pm=6/26¦ ¦ ¦го значения из порта¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦(слова) и запись его ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦в регистр AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦E5 ib¦IN AX,imm8 ¦14, ¦12, ¦ ¦ ¦Ввод непосредственно-¦ ¦ ¦ ¦pm=8/28,¦pm=6/26¦ ¦ ¦го значения из порта¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦(двойного слова) и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦запись его в регистр¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦EC ¦IN AL,DX ¦14, ¦12, ¦5 ¦8 ¦Ввод байта из порта¦ ¦ ¦ ¦pm=8/28,¦pm=7/27¦ ¦ ¦DX и запись в регистр¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦ED ¦IN AX,DX ¦14, ¦12, ¦5 ¦8 ¦Ввод слова из порта¦ ¦ ¦ ¦pm=8/28,¦pm=7/27¦ ¦ ¦DX и запись в регистр¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦ED ¦IN EAX,DX ¦14, ¦12, ¦5 ¦8 ¦Ввод двойного слова¦ ¦ ¦ ¦pm=8/28,¦pm=7/27¦ ¦ ¦из порта DX и запись¦ ¦ ¦ ¦vm=27 ¦ ¦ ¦ ¦в регистр EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+--------+-------+---+--+---------------------+ ¦ 8 - если CPL <= IOPL ¦ ¦ 28 - если CPL > IOPL или в виртуальном режиме процессора 8086¦ L---------------------------------------------------------------- Инструкция IN пересылает байт или слово данных из порта, но- мер которого указан вторым операндом в регистр (AL, AX или EAX), который задается первым операндом. Доступ к порту от 0 до 65535 можно получить, поместив номер порта в регистр DX и используя ин- струкцию IN с регистром DX в качестве второго параметра. Эти инс- трукции ввода-вывода можно сократить, используя в инструкции 8-битового порта ввода-вывода. При использовании 8-битового ввода -вывода из порта старшие 8 бит порта будут равны 0.

INC Увеличение на 1.

--------------------------------------------------------- O D I T S Z A P C * * * * * * ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-----T-----------T-------T-------T---T-------T-----------------+ ¦ ¦ ¦486 ¦386 ¦286¦86 ¦ ¦ +-----+-----------+-------+-------+---+-------+-----------------+ ¦FE /0¦INC r/m8 ¦1/3 ¦2/6 ¦2/7¦3/15+EA¦Увеличивает байт¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m на 1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+-------+-------+---+-------+-----------------+ ¦FF /0¦INC r/m16 ¦1/3 ¦2/6 ¦2/7¦3/15+EA¦Увеличивает сло-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦во r/m на 1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+-------+-------+---+-------+-----------------+ ¦FF /6¦INC r/m32 ¦1/3 ¦ ¦ ¦ ¦Увеличивает двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное слово r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+-------+-------+---+-------+-----------------+ ¦40+rw¦INC r16 ¦1 ¦ ¦ ¦ ¦Увеличивает ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистр размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово на 1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+-----------+-------+-------+---+-------+-----------------+ ¦40+rd¦INC r32 ¦1 ¦ ¦ ¦ ¦Увеличивает ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистр размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L-----+-----------+-------+-------+---+-------+------------------ Инструкция INC прибавляет к операнду 1. Флаг переноса она не изменяет. Чтобы повлиять на флаг переноса, используйте инструк- цию ADD со вторым операндом 1.

INS Увеличение на 1.

INSB --------------------------------------------------------- INSW O D I T S Z A P C INSD ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +----T-------------T---------T-------T---T----------------------+ ¦ ¦ ¦486 ¦386 ¦286¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6C ¦INS r/m8,DX ¦17, ¦15, ¦5 ¦Считывает байт из пор-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦та DX в ES:(E)DI. ¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6D ¦INS r/m16,DX ¦17, ¦15, ¦5 ¦Считывает слово из-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦порта DX в ES:(E)DI. ¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6D ¦INS r/m32,DX ¦17, ¦15, ¦5 ¦Считывает двойное сло-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦во из порта DX в ES:¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦(E)DI. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6C ¦INSB ¦17, ¦15, ¦5 ¦Считывает байт из пор-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦та DX в ES:(E)DI. ¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6D ¦INSw ¦17, ¦15, ¦5 ¦Считывает слово из-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦порта DX в ES:(E)DI. ¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦6D ¦INSD ¦17, ¦15, ¦5 ¦Считывает двойное сло-¦ ¦ ¦ ¦pm=10/32,¦pm=9/29¦ ¦во из порта DX в ES:¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦(E)DI. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----+-------------+---------+-------+---+----------------------+ ¦ 10 и 9, если CPL <= IOPL ¦ ¦ 32 и 29, если CPL > IOPL или в виртуальном режиме процессора¦ ¦ 8086. ¦ L---------------------------------------------------------------- Инструкция INS пересылает данные из порта, номер которого указан в регистре DX, в байт или слово в памяти, индекс которых задается регистром ES:приемник. Операнд в памяти должен быть ад- ресуемым через ES, переопределение сегмента невозможно. Если ат- рибут размера адреса в инструкции равен 16, то целевым регистром (приемником) является регистр DI, а если атрибут размера адреса равен 32 - то EDI. В инструкции INS не допускается задавать номер порта в виде непосредственного операнда. К порту нужно адресоваться через зна- чение регистра DX. Перед выполнением инструкции INS загрузите в регистр DX корректное значение. Адрес приемника определяется содержимым целевого индексного регистра. Перед выполнением инструкции INS загрузите в индексный регистр приемника корректный индекс. После выполнения пересылки регистры DI или EDI автоматически продвигаются. Если флаг направления равен 0 (была выполнена инструкция CLD), то регистр DI или EDI увеличивается, а если флаг направления равен 1 (была выполнена инструкция STD), то DI или EDI уменьшается. При вводе байта DI увеличивается или уменьшается на 1, при вводе слова - на 2, а при вводе двойного слова - на 4. Инструкции INSB, INSW и INSD являются синонимами инструкции INS, работающими с байтами, словами и двойными словами соответс- твенно. Инструкции INS может предшествовать префикс REP. При этом выполняется ввод блока из CX байт или слов. Подробности об этой операции можно узнать в описании REP.

INT Вызов процедуры обработки прерывания.

INTO --------------------------------------------------------- O D I T S Z A P C 0 0 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T---------T---------T-------T-------T----T---------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CC ¦INT3 ¦26 ¦33 ¦23 ¦52 ¦Прерывание 3 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦перехват управ-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ления отладчи-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ком. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CC ¦INT3 ¦44 ¦pm=59 ¦40 ¦ ¦Прерывание 3 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CC ¦INT3 ¦77 ¦pm=99 ¦78 ¦ ¦Прерывание 3 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CC ¦INT3 ¦82 ¦pm=119 ¦ ¦ ¦Прерывание 3 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из режима V86 в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦PL0 . ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CC ¦INT3 ¦37+ts ¦ts ¦167 ¦ ¦Прерывание 3 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CD ib ¦INTimm8 ¦30 ¦37 ¦23 ¦51 ¦Прерывание, но-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мер которого¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦задается пос-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦редственным ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байтом. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CD ib ¦INTimm8 ¦44 ¦pm=59 ¦40 ¦ ¦Прерывание: за-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щищенный режим.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CD ib ¦INTimm8 ¦77 ¦pm=99 ¦78 ¦ ¦Прерывание: за-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щищенный режим.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CD ib ¦INTimm8 ¦86 ¦pm=119 ¦ ¦ ¦Прерывание: из-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦режима V86 в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦PL0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CD ib ¦INTimm8 ¦37+ts ¦ts ¦167 ¦ ¦Прерывание: за-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щищенный режим.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CE ¦INTO ¦Pass:28, ¦Fail:3,¦Fail:3,¦Fail¦Прерывание 4,¦ ¦ ¦ ¦Fail:3 ¦pm=3 ¦Pass:24¦:4, ¦если флаг пере-¦ ¦ ¦ ¦ ¦Pass:35¦ ¦Pass¦полнения равен¦ ¦ ¦ ¦ ¦ ¦ ¦:53 ¦1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CE ¦INTO ¦46 ¦pm=59 ¦41 ¦ ¦Прерывание 4 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CE ¦INTO ¦73 ¦pm=99 ¦79 ¦ ¦Прерывание 4 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CE ¦INTO ¦84 ¦pm=119 ¦ ¦ ¦Прерывание 4 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из режима V86 в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦PL0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦CE ¦INTO ¦39+ts ¦ts ¦168 ¦ ¦Прерывание 4 -¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦защищенный ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦жим. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+---------+-------+-------+----+---------------+ ¦ * - добавляется 1 цикл для каждого байта следующей выпол-¦ ¦няемой инструкции. ¦ L---------------------------------------------------------------- Инструкция INT n генерирует через программное обеспечение обращение к обработчику прерываний. Непосредственный операнд (значение от 0 до 255) задает номер индекса в таблице дескрипто- ров прерываний (IDT) вызываемой обработки прерываний. В защищен- ном режиме IDT содержит массив восьмибайтовых дескрипторов. Деск- риптор вызываемого прерывания должен указывать прерывание, ловушку или вентиль задачи. В реальном режиме адресации IDT представляет собой массив из четырех указателей размером в байт. В защищенном и реальном режиме адресации базовый линейный адрес IDT определяется содержимым IDTR. Инструкции прерывания INT n идентична условной программной инструкции INTO, но номер прерывания неявно равен 4, а прерывание выполняется, если флаг переполнения процессоров 86, 286 или 386. Первые 32 прерывания зарезервированы фирмой Intel для сис- темных целей. Некоторые из этих прерываний используются для внут- ренних генерируемых исключительных ситуаций. Инструкция INT n в общем случае ведет себя как вызов дальне- го типа, но регистр флагов заносится в стек перед адресом возврата. Процедуры обработки прерывания возвращают управление через инструкцию IRET, которая извлекает из стека флаги и адрес возврата. В реальном режиме адресации инструкция INT n заносит в стек флаги, регистр CS и адрес возврата (IP) в указанном порядке и пе- реходит к длинному указателю, индекс которого указан номером прерывания.

INVD Запрещает использование кэш-памяти (только для процессора i486).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T---------T--------T-------------------------------------+ ¦ ¦ ¦486 ¦ ¦ +------+---------+--------+-------------------------------------+ ¦0F 08 ¦INVD ¦4 ¦Запрещает использование всей кэш-па-¦ ¦ ¦ ¦ ¦мяти. ¦ L------+---------+--------+-------------------------------------- Внутренний кэш-буфер сбрасывается, и выполняется специальная функция цикла шины, которая указывает, что внешний кэш-буфер так- же должен сбрасываться. Данные, содержащиеся в записываемых внеш- них кэш-буферах, отбрасываются. Примечание: Данная инструкция зависит от конкретной ре- ализации. В будущих процессорах фирмы Intel она может реали- зовываться по-разному. Ответственность за возврат информации об очистке внешней кэш -памяти ложится на аппаратное обеспечение.

INVLPG Запрещает запись TBL (только для процессора i486).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T---------T---------T-----------------------------------+ ¦ ¦ ¦486 ¦ ¦ +-------+---------+---------+-----------------------------------+ ¦0F 01/7¦INVLPG m ¦ 12 ¦Запрещает запись таблицы TBL. ¦ L-------+---------+---------+------------------------------------ Инструкция INVLPG используется для запрещения отдельной за- писи в таблице TBL. Для записи таблицы используется кэш-память. Если таблица TBL содержит допустимую запись, которая отображает адрес операнда в памяти, то запись TBL отмечается, как недопусти- мая. И в защищенном режиме, и в виртуальном режиме процессора 8086 при использовании регистрового операнда генерируется недо- пустимый код операции. Примечание: Данная инструкция зависит от конкретной ре- ализации. В будущих процессорах фирмы Intel она может реали- зовываться по-разному.

IRET Возврат из прерывания (только для процессоров 386, i486)

IRETD --------------------------------------------------------- O D I T S Z A P C * * * * * * * * * ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T---------T-----T--------T-----T--T---------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRET ¦15 ¦22, ¦17 ¦32¦Возврат из прерывания¦ ¦ ¦ ¦ ¦pm=38 ¦pm=31¦ ¦(возврат дальнего ти-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦па и извлечение фла-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гов). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRET ¦ts+32¦pm=82 ¦55 ¦ ¦Возврат из прерыва-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ния. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRETD ¦ts ¦22, ¦ ¦ ¦Возврат из прерывания¦ ¦ ¦ ¦ ¦pm=38 ¦ ¦ ¦(возврат дальнего ти-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦па и извлечение фла-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гов). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRETD ¦36 ¦pm=82 ¦ ¦ ¦Возврат из прерывания¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦c меньшими привилеги-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ями. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRETD ¦15 ¦pm=60 ¦ ¦ ¦Возврат из прерывания¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦в режиме V86. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+---------+-----+--------+-----+--+---------------------+ ¦CF ¦IRETD ¦ts+32¦ts ¦ ¦ ¦Возврат из прерыва-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ния. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L-------+---------+-----+--------+-----+--+---------------------- В реальном режиме адресации инструкция IRET извлекает из стека указатель инструкций, регистр CS и регистр флагов и возоб- новляет выполнение прерванной подпрограммы. В защищенном режиме действие инструкции IRET зависит от установки флага вложенной задачи (бита NT) в регистре флагов. При извлечении нового образа флага из стека бит IOPL в регистре изме- няется только тогда, когда CPL = 0. Если NT равно 0, то инструкция IRET возвращает управление из процедуры обработки прерывания без переключения задачи. Програм- ма, куда возвращается управление, должна иметь меньшие или равные привилегии, чем процедура обработки прерывания (это показывают биты RPL селектора CS, извлеченного из стека). Если целевая прог- рамма имеет меньшие привилегии, то инструкция IRET извлекает так- же из стека указатель стека и регистр SS. Если NT не равно 0, то инструкция IRET резервирует операцию CALL или INT, которая вызывает переключение задач. Измененное состояние задачи, выполняющей инструкцию IRET, сохраняется в ее сегменте состояния задачи. Если позднее вновь последует вхождение в задачу, то выполняется код, следующий за инструкцией IRET.

JCC Переход, если удовлетворяется условие.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-----T---------T-----T--------T------T----T--------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦77 cb¦JA rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если выше (CF = 0¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и ZF = 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦73 cb¦JAE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если выше или равно¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(CF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦72 cb¦JB rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ниже (CF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦76 cb¦JBE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ниже или равно¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(CF = 1, или ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦72 cb¦JC rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦при переносе (если ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦CF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦= 1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦E3 cb¦JCXZ rel8¦3/1 ¦9+m,5 ¦8,4 ¦18,3¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если регистр CX ра- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вен 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦E3 cb¦JCXZ rel8¦3/1 ¦9+m,5 ¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если регистр ECX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равен 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦74 cb¦JT rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если равно (ZF = 0).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7F cb¦JG rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если больше (ZF = ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0 и SF = OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7D cb¦JGE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если больше или рав-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦но (SF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7C cb¦JT rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если меньше (SF <>¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7E cb¦JLE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если меньше или рав-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦но (ZF = 1 и SF <>¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7E cb¦JLE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не выше (CF = 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦или ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦72 cb¦JNAE rel8¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не выше (CF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦73 cb¦JNB rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не нижe (CF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦77 cb¦JNBE rel8¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не ниже или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно CF = 0 и ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦73 cb¦JNC rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если нет переноса¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(CF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦75 cb¦JNE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не равно (ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7E cb¦JNG rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не больше (ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1 или SF <> OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7C cb¦JNGT rel8¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не больше или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (SF <> OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7D cb¦JNL rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не меньше (SF¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦<> OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7F cb¦JNLE rel8¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не меньше или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (SF = 0 и SF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦71 cb¦JNO rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если нет переполне-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ния (OF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7B cb¦JNH rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если нет четности¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(PF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦79 cb¦JNS rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если SF = 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦75 cb¦JNZ rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ZF = 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦70 cb¦JO rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если переполнениe¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(OF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7A cb¦JP rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход по,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦паритету (если PF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦7A cb¦JPE rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦по четности (PF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦= 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦71 cb¦JPO rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нечетности (PF = 0).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦78 cb¦JS rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку (SF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----+---------+-----+--------+------+----+--------------------+ ¦74 cb¦JZ rel8 ¦3/1 ¦7+m,3 ¦7,3 ¦16,4¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нулю (ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L-----+---------+-----+--------+------+----+--------------------- Продолжение ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-----------T-------------T---T-----T---T--T--------------------+ ¦ ¦ ¦486¦386 ¦286¦86¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 87 cw/cd¦JA rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если выше (CF = 0 и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 83 cw/cd¦JAE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ниже (CF = 0).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 82 cw/cd¦JB rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ниже (CF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 86 cw/cd¦JBE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если ниже или равно¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(CF = 1 или ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 82 cw/cd¦JC rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если перенос (CF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 84 cw/cd¦JE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если равно (ZF = 1).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 84 cw/cd¦JZ rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если 0 (ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8F cw/cd¦JG rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если больше (ZF = 0¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и SF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8D cw/cd¦JGE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если больше или рав-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦но (SF = OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8C cw/cd¦JL rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если меньше ( SF <>¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8E cw/cd¦JLE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если меньше или рав-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦но (ZF = 1 и SF <>¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 86 cw/cd¦JNA rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не выше (CF = 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦и ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 82 cw/cd¦JNAE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не выше или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (CF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8F3cw/cd¦JNB rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не ниже (CF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦= 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 87 cw/cd¦JNBE rel16/3¦ 3/¦ 7+m,¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не ниже или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (CF = 0 и ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 83 cw/cd¦JNC rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если нет переноса и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ZF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 85 cw/cd¦JNE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не равно (ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8E cw/cd¦JNG rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не больше (ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1 или SF <> OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8C cw/cd¦JNGE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не больше или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (SF <> OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8D cw/cd¦JNL rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не меньше (SF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8F cw/cd¦JNLE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не меньше или¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦равно (ZF = 0 и SF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 81 cw/cd¦JNO rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не переполне-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ние (OF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8B cw/cd¦JNP rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если PF = 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 89 cw/cd¦JNS rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если SF = 0. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 85 cw/cd¦JNZ rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если не ноль (ZF =¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 80 cw/cd¦JO rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если переполнение¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦OF = 0). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8A cw/cd¦JP rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если PF = 1. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8A cw/cd¦JPE rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦четности (PF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 8B cw/cd¦JPO rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦нечетности (PF = 1).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 88 cw/cd¦JS rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход по¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦знаку (SF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦OF 84 cw/cd¦JZ rel16/32¦3/1¦7+m,3¦ ¦ ¦Короткий переход,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦если нуль (ZF = 1). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-----------+-------------+---+-----+---+--+--------------------+ ¦ * - при переходе добавьте один такт для каждого байта следу-¦ ¦ющей выполняемой инструкции (только для процессора 80286). ¦ L---------------------------------------------------------------- Примечание: Первое значение тактов показано для истин- ного условие (осуществление перехода), второе - для ложного (переход не выполняется). Rel16/32 показывает, что имеется две форму этой инструкции. Одна из них использует 16-бито- вое смещение, другая - 32-битовое относительное смещение, в зависимости от атрибута размера операнда в операции. Условные переход (кроме JCXZ/JECXZ) проверяет флаги, которые устанавливаются предыдущей инструкцией. Во всех приведенных выше описаниях в скобках показано условие для каждой мнемоники. Терми- ны "больше" или "меньше" используются для сравнения целых чисел со знаком, а термины "выше" или "ниже" - для беззнаковых целых значений. Если заданное условие истинно, то осуществляется переход по адресу, задаваемому операндом. Кодировка инструкции более эффек- тивна, когда цель условного перехода находится в текущем сегменте кода и в границах от -128 до +127 байт первого байта следующей инструкции. Переход можно также выполнять по адресу от -32768 до +32767 (атрибут размера сегмента 16) или от -2 в 31 степени до 2 в 31 степени - 1 (атрибут размера сегмента 32) относительно пер- вого байта следующей инструкции. Когда адрес условного перехода находится в другом сегменте, используйте противоположный вариант инструкции перехода (то есть JE и JNE), а затем перейдите на це- левой адрес в другом сегменте с помощью дальнего безусловного пе- рехода. Например, вы не можете записать: JZ FARLABEL; Вместо этого следует записать: JNZ BEYOND; JMP FARLABEL; BEYOND: Поскольку конкретное состояние флагов можно интерпретировать несколькими способами, для большинства кодов операций условных переходов TASM предусматривает более одной мнемоники. Например, если вы сравниваете два символа в регистре AX и ходите выполнить переход в случае их равенства, используйте инструкцию JZ, или вы выполните над регистром AX и битовой маской операцию AND и хотите перейти только в том случае, если результат равен 0, используйте инструкцию JZ, которая представляет собой синоним JE. Инструкции JCXZ/JECXZ отличаются от других инструкций услов- ного перехода, поскольку они проверяют не регистр флагов, а со- держимое регистра CX или ECX на 0. Инструкции JCXZ/JECXZ полезно использовать в начале условного цикла, который завершается с по- мощью инструкции условного цикла (такой как LOOP TARGET LABEL). Инструкции JCXZ/JECXZ предотвращают вхождение в цикл при нулевом содержимом CX или ECX. В противном случае потребовалось бы выпол- нять цикл не 0 раз, а 32 раза или 64К. +---------------------------------------------------------------+ ¦F7 /3 ¦NEG r/m16¦1/3 ¦2/6 ¦2/7 ¦3/16+ ¦Отрицание слова r/m¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦(дополнение до двух).¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+---------+-----+-----+-----+------+---------------------+ ¦F7 /3 ¦NEG r/m32¦1/3 ¦2/6 ¦ ¦ ¦Отрицание двойного¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слова r/m (дополнение¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦до двух). ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+---------+-----+-----+-----+------+---------------------- Инструкция NEG заменяет значение регистра или операнда в памяти его дополнением до двух. Операнд вычитается из нуля, а ре- зультат помещается обратно в операнд. Если операнд не равен нулю, то флаг переноса устанавливается в 1. В противном случае флаг переноса принимает нулевое значение.

NOP Пустая операция.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T---------T-----T-----T-----T------T-------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +--------+---------+-----+-----+-----+------+-------------------+ ¦90 ¦NOP ¦1 ¦3 ¦3 ¦3 ¦Нет операции. ¦ L--------+---------+-----+-----+-----+------+-------------------- Операция NOP не выполняет никакой операции. NOP - это одно- байтовая инструкция, которая занимает место, но но не влияет на содержимое машины (кроме (E)IP). NOP - это псевдоним инструкции XCHG (E)AX, (E)AX.

NOT Отрицание (дополнение до 1).

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +------T---------T-----T-----T-----T-------T--------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86 ¦ ¦ +------+---------+-----+-----+-----+-------+--------------------+ ¦F6 /2 ¦NOP r/m8 ¦1/3 ¦2/6 ¦2/7 ¦3/16+EA¦Изменяет значение¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦каждого бита байта¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------+---------+-----+-----+-----+-------+--------------------+ ¦F7 /2 ¦NOP r/m16¦1/3 ¦2/6 ¦2/7 ¦3/16+EA¦Изменяет значение¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦каждого бита слова¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ +------+---------+-----+-----+-----+-------+--------------------+ ¦F7 /2 ¦NOP r/m16¦1/3 ¦2/6 ¦2/7 ¦3/16+EA¦Изменяет значение¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦каждого бита двой-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ного слова r/m. ¦ L------+---------+-----+-----+-----+-------+--------------------- Инструкция NOT инвертирует операнд, каждое единичное значе- ние становится нулевым и наоборот.
                              Назад | Содержание | Вперед