Цепочечные операции
Команда | Описание |
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 автоматически продвигаются на следующий элемент. Разновидности для разных элементов цепочки: · байт, · слово или · двойное слово. |
Управление флагами
Команда | Описание |
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 байт). Команда имеет разновидности, которые выбираются ассемблером автоматически, в зависимости от того, является процедура ближней или дальней. |