Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабАсм09.doc
Скачиваний:
19
Добавлен:
29.08.2019
Размер:
159.74 Кб
Скачать

Близкие и далекие переходы.

Мнемоники команд переходов в ЯА образуются от слова Jump.

Например, безусловный переход:

JMP оp,

где ор – имя команды, которой передается управление (т.е. метка).

Адрес перехода ассоциируется с меткой команды. Метка – это имя команды, которое располагается до мнемоники команды и отделяется двоеточием. Любая программная метка (включая имя процедуры) имеет атрибут NEAR или FAR.

Например,

АМ1: ADD AX,4

………………….

JMP AM1

Команды перехода модифицируют указатель команд IP и, возможно, регистр сегмента команд CS и бывают двух типов:

  • если команда изменяет только IP , т.е. передача управления внутри сегмента, то переход называется ближний переход NEAR.

  • если изменяется пара регистров CS:IP, - это межсегментный переход или далекий переход FAR. Заметим, что переход из ассемблерного участка программы в Паскаль-программу также является далеким переходом.

а) команды, анализирующие результаты предыдущей команды (флаги) – условный переход в классическом понимании. Они имеют только 1-байтовое смещение.

Если условный переход требует удаления более чем на 128Б (30-40 команд), то используется комбинация условного и безусловного перехода.

Например:

Требуется NEAR переход на метку ZERO по флагу ZF=1, тогда

Получим фрагмент программы

………..

JNZ CONTINUE; if ZF<>1 then continue

JMP ZERO

CONTINUE

Т.е. используется условный переход по противоположному признаку, а по ZF=1 получим 2-хбайтовый переход.

Мнемоника условного перехода сложна, таких переходов более 20. Некоторые очевидны. Для образования мнемоники используют следующие сокращения:

E – equal (=)

N – not (не)

G – greater (больше для знаковых целых)

L – less (меньше для знаковых целых)

A – above (выше) беззнаковых

B –below (ниже) для беззнаковых

В условных переходах используется после J от одной до трех букв (из перечисленных выше).

Например, после сравнения чисел результат ор1<ор2, возможны 2 команды, эквивалентные между собой для одного и того же перехода:

  • для знаковых JL ADRES

JNGE ADRES

  • для беззнаковых JB ADRES

JNA ADRES

б) команды управления циклом

LOOP ор

- управление циклом по счетчику, где ор – метка первой команды цикла, цикл управляется счетчиком в СХ.

Команда LOOP уменьшает содержимое СХ (dec СХ) и передает управление в начало цикла, если содержимое СХ<>0, иначе управление передается команде следующей за LOOP.

Обычно цикл оформляется следующим образом.

mov CX,N ; СХ = {число проходов цикла}

L1: ……… начало цикла

……………….

LOOP L1;

Особенности команды LOOP:

  • счетчик цикла находится только в CX;

  • начальное значение загружается в CX>0 до входа в цикл;

  • команды прохода цикла выполняются хотя бы один раз;

  • LOOP осуществляет переход типа SHORT, поэтому проход цикла не должен занимать 128Б (30-40 команд); если нужен более длинный проход цикла, то используется сочетание условных и безусловных переходов;

  • CX может использоваться как операнд в цикле, но не должен изменяться другими командами.

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