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

Команда сравнения

CMP – сравнивает два операнда путем вычитания второго операнда из первого. Значения операндов при этом не меняются. Используется для дальнейшего анализа командой условного перехода.1-ый операнд = Рг или переменная, 2-ой операнд = число, Рг или переменная

CMP r/m, r

CMP r, r/m

CMP AX,BX

CMP AX,[BX]

CMP AX,3

CMP D,AX

Безусловные переходы

Инструкция безусловного перехода передаёт управление команде, адрес которой указан в инструкции. Команда безусловного перехода имеет вид

JMP - безусловный переход - передает управление по адресу.

Переход можно осуществлять как в пределах одного сегмента, так и в другой сегмент.

JMP r/m

JMP i

JMP [BX]

JMP метка

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

Типы переходов:

- переход типа short (короткий) – если адрес перехода находится в пределах от –127 до +128 байт от команды, вызвавшей переход;

- переход типа near (ближний) – если адрес перехода находится в том же сегменте, что и команда, вызвавшей переход;

- переход типа far (дальний) – если адрес перехода находится в другом сегменте.

jmp [< тип > ptr ] операнд.

<тип> - тип перехода short (короткий) – смещение 127 байтов вперёд или 128 байтов назад, near (близкий) – смещение в пределах сегмента (64 Кбайта), far (дальний) – в любой сегмент с любым смещением.

ptr – приставка, которую можно перевести как указанный в.

Если тип не задан, по умолчанию принимается near.

Всего можно выделить пять типов безусловных переходов (таблица 3.1).

Таблица 3.1

Типы команд безусловного перехода

Название

Мнемоника

Описание

внутрисегментный прямой короткий

jmp short <операнд>

IP ← (IP) + 8-битное сме­ще­ние, определяемое операндом

внутрисегментный прямой близкий переход

jmp near ptr <операнд>

IP ← (IP)+16-битное сме­щение, определяемое операндом

внутрисегментный косвенный переход

jmp <адрес операнда>

IP ← 16-битный адрес перехода

Межсегментный прямой далекий переход

jmp far ptr <операнд>

IP ← смещение операнда в сегменте

CS ← адрес сег­мен­та, содержа­ще­го опе­ранд

Межсегментный косвенный далёкий переход

jmp far ptr <адрес опе­ран­да>

IP ← операнд

CS ← адрес операн­да +2

Условный переход

Команда условного перехода организует передачу управления при выполнении определённого в команде условия, в противном случае переход осуществляется на команду, следующую за инструкцией условного перехода. Условия определяются текущим состоянием флагов процес­сора. Каждая из 30 команд условных переходов проверяет определенную ком­би­нацию флагов.

Все условные переходы являются короткими, т.е. адрес перехода должен отстоять не далее, чем на - 128 или +127 байтов от первого байта следующей команды.

Jусловие - условный переход .

Это набор команд, выполняющих переход, если удовлетворяется соответствующее условие. При использовании после команды cmp, условия приобретают формулировки, соответствующие отношениям между операндами cmp.

Значение аббревиатур в названии команды jcc

Обозначение

Англ.

Русский

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

e

equal

Равно

любые

n

not

Не

любые

g

greater

Больше

числа со знаком

l

less

Меньше

числа со знаком

a

above

Выше (больше)

числа без знака

b

bellow

Ниже (меньше)

числа без знака

Эти команды осуществляют переходы типа short и near

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

Условие

Мнемокод

со знаком

без знака

ОП-1 = ОП_2

je equal

ОП-1 < >ОП_2

jne not equal

ОП-1 < ОП_2

jl low

jnqe not greater or equal

jb below

jnae not above or equal

ОП-1 <= ОП_2

jle low or equal

jng not greater

jbe below not equal

jna not above

ОП-1 > ОП_2

jg greater

jnle not low or equal

ja above

jnbe not below or equal

ОП-1 => ОП_2

jge greater or equal

jnl not lower

jae above or equal

jnb not below

Циклы

Инструкция, организующая программный цикл имеет вид:

loop[<условие повторения цикла>] <метка короткого перехода>

Инструкция loop использует содержимое регистра СХ как счетчик повторений цикла. Команда loop уменьшает содержимое регистра СХ на 1 и передает управление по адресу, определяемому меткой перехода, если содержимое СХ ≠ 0, в противном случае выполняется следующая за LOOP инструкция. Подобно условным переходам инструкции этой группы могут осуществлять только короткие передачи управления, т.е. в пределах от -128 до +127.

Добавление к инструкции loop <условие повторения цикла> позволяет ввести дополнительные логические условия на повторение цикла:

  • loope/loopz – повторять, пока ноль;

  • loopne/loopnz – повторять, пока не ноль.

Проверка флага ZF осуществляется командой loop. Цикл повторяется, если содержимое СХ ≠ 0 и выполняется соответствующее условие, в противном случае выполняется следующая за loop инструкция.

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