Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать
  1. Ассемблерные команды условного и безусловного перехода. Состояние флагов. Пример программы.

Синтаксис команды безусловного перехода без сохранения информации о точке возврата:

jmp [модификатор] адрес_перехода

Здесь «адрес_перехода» представляет метку или адрес области памяти, в которой находится указатель перехода.

Процессор поддерживает 18 команд условного перехода, позволяющих проверить:

отношение между операндами со знаком (больше или меньше);

отношение между операндами без знака (выше или ниже);

состояниями арифметических флагов ZF, SF, CF, OF, PF (но не AF).

Команды условного перехода имеют одинаковый синтаксис:

jcc метка_перехода

Мнемокод всех команд начинается с символа «j» — от слова jump (прыжок). Вместо символов «сс» указывается конкретное условие, анализируе­мое командой. Что касается операнда метка_перехода, то он определяет метку перехода, которая может находиться только в пределах текущего сегмента кода; меж­сегментной передачи управления в условных переходах не допускается.

Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого должно приниматься решение. Источниками такого условия могут быть:

  • любая команда, изменяющая состояние арифметических флагов;

  • команда СМР, сравнивающая значения двух операндов;

  • состояние регистра ЕСХ/СХ.

Команда сравнения СМР (СоМРаге) имеет тот же принцип работы, что и команда вычитания SUB. Команда СМР так же, как и команда SUB, выполняет вычитание операндов и по результатам сравнения устанавливает флаги. Единственное, чего она не делает — это не записывает резуль­тат вычитания на место первого операнда.

Синтаксис команды СМР: cmp операнд_1, операнд_2

Флаги, устанавливаемые командой СМР, можно анализировать специальными командами условного перехода.

Перечень команд условного перехода для команды cmp

Типы операндов

Мнемокод команды услов­ного перехода

Критерий условного перехода

Значения флагов для перехода

Любые

JE

операнд_1 = операнд_2

ZF=1

Любые

JNE

операнд_1 <> операнд_2

ZF = 0

Со знаком

JL/JNGE

операнд 1 < операнд 2

SF <> OF

Со знаком

JLE/JNG

операнд_1 <= операнд_2

SF <> OF или ZF = 1

Со знаком

JG/JNLE

операнд 1 > операнд 2

SF = OF и ZF = 0

Со знаком

JGE/JNL

операнд_1 => операнд_2

SF = OF

Без знака

JB/JNAE

операнд_1 < операнд_2

CF=1

Без знака

JBE/JNA

операнд_1 <= операнд_2

CF = 1 или ZF=1

Без знака

JA/JNBE

операнд__1 > операнд_2

CF = 0 и ZF = 0

Без знака

JAE/JNB

операнд 1 => операнд 2

CF = 0

В качестве примера применения команды CMP рассмотрим фрагмент програм­мы, который обнуляет поле pole_m длиной n байт:

.data

n equ 50

pole_m db n dup (?)

.code

xor bx,bx ;bx=0

m1: mov mem[bx],0

inc bx

cmp bx,n

jne ml exit:

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