- •Команды общего назначения
- •1.1.1.Команды ввода-вывода
- •1.1.2.Инструкции работы со стеком
- •1.1.3.Арифметико-логические инструкции
- •1.1.4.Цепочечные операции
- •1.1.5.Команды управления
- •1.1.6.Команды поддержки языков высокого уровня
- •1.1.7.Команды прерываний
- •1.1.8.Команды синхронизации процессора
- •1.1.9.Команды обработки цепочки бит
- •Синтаксис ммх-команд
- •1.1.10.Классификация команд
1.1.4.Цепочечные операции
Команда |
Описание |
REP
REPE и REPZ REPNE и REPNZ |
REPeat string operation – повторить цепочечную операциюю Префикс, означающий повтор следующей за ним операции до обнуления ECX. Префикс имеет разновидности: REPZ (REPE) - выполнять, пока не нуль (ZF=1), REPNZ (REPNE) – выпо лнять, пока нуль. |
MOVS приемник, источник
MOVSB MOVSW MOVSD |
MOVe String Byte/Word/Double word operands – пересылка цепочек. Приемник, источник можно явно не указывать. Команда передает из цепочки, адресуемой DS:[ESI], в цепочку приемника, адресуемую ES:[EDI]. Разновидности для разных элементов цепочки: байт, слово или двойное слово. |
LODS источник
MOVSB MOVSW MOVSD |
LOaD String Byte/Word/Double word operands – загрузка цепочек. Загружает из ячейки памяти, адресуемой DS:ESI/si, в регистр AL/AX/EAX цепочку, и изменяет содержимое SI на величину, равную длине цепочки. Разновидности для разных элементов цепочки: байт, слово или двойное слово. |
STOS приемник
STOSB STOSW STOSD |
STOre String Byte/Word/Double word operands – сохранение цепочек. Сохраняет в ячейке памяти, адресуемой DS:ESI/SI, из регистра AL/AX/EAX цепочку, и изменяет содержимое SI на величину, равную длине цепочки. Разновидности для разных элементов цепочки: байт, слово или двойное слово. |
SCAS приемник
SCASB SCASW SCASD |
SCAn String Byte/Word/Double word – сканированение цепочек. Команда вычитает элемент цепочки приемника из содержимого аккумулятора (AL\AX\EAX) и модифицирует флаги. Разновидности для разных элементов цепочки: байт, слово или двойное слово. |
CMPS приемник, источник
CMPSB CMPSW CMPSD |
CoMPare String Byte/Word/Double word operands - сравнение цепочек. Команда вычитанет элемент цепочки приемника из соответствующего элемента цепочки источника и модифицирует флаги. Регистры EDI и ESI автоматически продвигаются на следующий элемент. Разновидности для разных элементов цепочки: байт, слово или двойное слово. |
1.1.5.Команды управления
Управление флагами
Команда |
Описание |
CLC |
CLear Carry flag Сброс флага переноса. |
STC |
SeT Carry flag Установка флага переноса. |
CMC |
CoMplement Carry flag Инверсия флага переноса. |
CLD |
CLear Direction flag Сброс флага направления – для цепочечных команд процессор будет выполнять инкремент регистров SI DI. |
STD |
SeT Direction flag Установка флага направления - для цепочечных команд процессор будет выполнять декремент регистров SI DI. |
CLI |
CLear Interrupt flag Сброс флага прерываний - запрет маскируемых аппаратных прерываний. |
STI |
SeT Interrupt flag Установка флага прерываний - разрешение маскируемых аппаратных прерываний. |
Команды передачи управления
Команда |
Описание |
JMP метка |
JuMP –безусловный переход. Имеется несколько форм, различающихся расстоянием метки перхода от текущего адреса, и способом задания целевого адреса. При работе в Windows используется в основном внутрисегментный переход (NEAR) в пределах 32-битного сегмента. Адрес перехода может задаваться непосредственно (в программе это метка) или косвенно, т.е. содержаться в ячейке памяти или регистре (JMP [EAX]). Другой тип перехода - короткий переход (SHORT), занимает всего 2 байта. Диапазон смещения, в пределах которого происходит переход: -128 ... 127. Использование такого перехода весьма ограниченно. |
Jcc метка |
Jump if condition - условный переход. Команда осуществляет переход при выполнении условия, заданного в . поле условия. Возможны условия, кодируемые 4-ех битным кодом: JA/JNBE - перейти, если выше. JAE/JNB - перейти, если выше или равно. JB/JNAE - перейти, если ниже JBE/JNA - перейти, если ниже. JC - перейти, если перенос JE/JZ - перейти, если нуль JG/JNLE - перейти, если больше. JGE/JNL - перейти, если больше или равно JL/JNGE - перейти, если меньше. JLE/JNG - перейти, если меньше или равно JNC - перейтИ, если нет переноса. JNE/JNZ - перейти, если меньше или равно JNO - перейти, если нет переполнения JNP/JPO - перейти, если нет паритета JNS - перейти, если нет знака JO - перейти, если есть переполнения JP/JPE - перейти, если есть паритет JS - перейти, если есть знак JCXZ - переход, если СХ=0 JECXZ - переход, если ECX=0 В плоской модели команды условного перехода осуществляют переход в пределах 32-битного регистра. |
LOOP метка |
LOOP control by register CX - команды управления циклом по регистру CX. Команды этой группы используют счетчик цикла в регистре CX. В них осуществляется декремент CX и проверка его содержимого. Тело цикла повторяется пока содержимое CX не равно нулю. Если содержимое CX равно нулю, то управление передается команде, метка которой опреджелена в команде LOOP. |
LOOPE метка LOOPZ метка |
LOOP control by register CX not Equal 0 and ZF=1 - команды управления циклом по регистру CX с учетом ZF=1. Команды этой группы основаны на командах LOOP. Дополнительно в них в теле цикла анализируется флаг ZF. Цикл принудительно завершается, если ZF= 1. |
LOOPNE метка LOOPNZ метка |
LOOP control by register CX not Equal 0 and ZF=0 - команды управления циклом по регистру CX с учетом ZF=0. Команды этой группы основаны на командах LOOP. Дополнительно в них в теле цикла анализируется флаг ZF. Цикл принудительно завершается, если ZF= 0. |
CALL цель |
CALL – вызов. Передает управление процедуре (метке) с сохранением в стеке адреса, следующей за CALL командой. В плоской модели адрес возврата представляет собой 32-битное смещение. Межсегментный вызов предполагает сохранение в стеке селектора и смещения, т.е. 48-битной величины (16 бит - селектор и 32 бита - смещение). |
RET [N] |
RETurn from procedure – возврат из процедуры Необязательный параметр N предполагает, что команда также автоматически чистит стек (освобождает N байт). Команда имеет разновидности, которые выбираются ассемблером автоматически, в зависимости от того, является процедура ближней или дальней. |