Команды управления

Цепочечные операции

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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: