Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Команды общего назначения.doc
Скачиваний:
20
Добавлен:
25.09.2019
Размер:
279.55 Кб
Скачать

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