Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
34 Кб
Скачать
☆

19.Команда сравнения, усл переход для ком-ды сравнения.

Команды условного перехода осуществляют переход, который выполняется только в случае истинности некоторого условия. Истинность условия проверяется по значениям флагов. Поэтому обычно непосредственно перед командой условного перехода ставится команда сравнения, которая формирует значения флагов:

CMP <операнд1>, <операнд2>

Команда сравнения эквивалентна команде SUB за исключением того, что вычисленная разность никуда не заносится. Назначение команды CMP – установка и сброс флагов.

Что касается команд условного перехода, то их достаточно много, но все они записываются единообразно:

Jxx <метка>

Все команды условного перехода можно разделить на три группы.

В первую группу входят команды, которые обычно ставятся после команды сравнения. В их мнемокодах указывается тот результат сравнения, при котором надо делать переход.

JE Переход если равно op1 = op2 ZF = 1 Для всех чисел

JNE Переход если не равно op1 ≠ op2 ZF = 0

JL/JNGE Переход если меньше op1 < op2 SF ≠ OF Для чисел со знаком

JLE/JNG Переход если меньше или равно op1 ≤ op2 SF ≠ OF или ZF = 1

JG/JNLE Переход если больше op1 > op2 SF = OF и ZF = 0

JGE/JNL Переход если больше или равно op1 ≥ op2 SF = OF

JB/JNAE Переход если ниже op1 < op2 CF = 1 Для чисел без знака

JBE/JNA Переход если ниже или равно op1 ≤ op2 CF = 1 или ZF = 1

JA/JNBE Переход если выше op1 > op2 CF = 0 и ZF = 0

JAE/JNB Переход если выше или равно op1 ≥ op2 CF = 0

20.Команды условного перехода по состоянию флагов

Команды перехода по состоянию флагов

Команда

Флаг

Команда

Флаг

jc

cf = 1

jnc

cf = 0

jp

pf = 1

jnp

pf = 0

jz 

zf = 1 

jnz 

zf = 0 

js 

sf = 1 

jns 

sf = 0 

jo 

jo = 1 

jno 

jo = 0 

Команда перехода по состоянию регистра cx:

jcxz <метка> ;прейти, если cx = 0

21.Организация циклов

Команда loop

Для организации цикла предназначена команда LOOP. У этой команды один операнд — имя метки, на которую осуществляется переход. В качестве счётчика цикла используется регистр CX. Команда LOOP выполняет декремент CX, а затем проверяет его значение. Если содержимое CX не равно нулю, то осуществляется переход на метку, иначе управление переходит к следующей после LOOP команде.

Содержимое CX интерпретируется командой как число без знака. В CX нужно помещать число, равное требуемому количеству повторений цикла. Понятно, что максимально может быть 65535 повторений. Ещё одно ограничение связано с дальность перехода. Метка должна находиться в диапазоне -127…+128 байт от команды LOOP

mov ah,02h ;Для вызова функции DOS 02h - вывод символа

mov dl,'A' ;Первый выводимый символ

mov cx,26 ;Счётчик повторений цикла

metka:

int 21h ;Обращение к функции DOS

inc dl ;Следующий символ

loop metka ;Команда цикла

22.If else

Cmp eax, ebx; {сравниваем eax с ebx} je @IfNot; {если равны, то переходим на иначе} используются команды сравнения

Осуществляется переход по метке

23. Switch

Так же, как и If else

24.Префиксы повторений

рефиксы повторения имеют свои мнемонические обозначения:

rep  repe или repz  repne или repnz

Эти префиксы повторения указываются перед нужной цепочечной командой в поле метки.  Цепочечная команда без префикса выполняется один раз. Размещение префикса перед цепочечной командой заставляет ее выполняться в цикле.

Отличия приведенных префиксов в том, на каком основании принимается решение о циклическом выполнении цепочечной команды: по состоянию регистра ecx/cx или по флагу нуля zf:

  • префикс повторения rep (REPeat). Этот префикс используется с командами, реализующими операции-примитивы пересылки и сохранения элементов цепочек — соответственно, movs и stos.

Префикс rep заставляет данные команды выполняться, пока содержимое в ecx/cx не станет равным 0.  При этом цепочечная команда, перед которой стоит префикс, автоматически уменьшает содержимое ecx/cx на единицу. Та же команда, но без префикса, этого не делает;

  • префиксы повторения repe или repz (REPeat while Equal or Zero). Эти префиксы являются абсолютными синонимами.

Они заставляют цепочечную команду выполняться до тех пор, пока содержимое ecx/cx не равно нулю или флаг zf равен 1.  Как только одно из этих условий нарушается, управление передается следующей команде программы. Благодаря возможности анализа флага zf, наиболее эффективно эти префиксы можно использовать с командами cmps и scas для поиска отличающихся элементов цепочек.

  • префиксы повторения repne или repnz (REPeat while Not Equal or Zero). Эти префиксы также являются абсолютными синонимами. Их действие на цепочечную команду несколько отличается от действий префиксов repe/repz. Префиксы repne/repnz заставляют цепочечную команду циклически выполняться до тех пор, пока содержимое ecx/cx не равно нулю или флаг zf равен нулю.

При невыполнении одного из этих условий работа команды прекращается.  Данные префиксы также можно использовать с командами cmps и scas, но для поиска совпадающих элементов цепочек.

25-26 Цепочки

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]