Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект

Вид материалаКонспект

Содержание


Команды передачи управления
Близкие и далекие переходы.
Адресация переходов
Косвенная адресация
Jmp near cod[bx]
Относительная адресация
Команды условных переходов
Jmge adres
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   15

Команды передачи управления


Это наиболее важная часть системы команд, тесно связанная со структурой ПЭВМ, и является промежуточным звеном между командами МП и командами языка ассемблера, т.к. здесь существенна запись операндов. Команды передачи управления вызывают нарушение линейности программы.

Рассмотрим общие аспекты передачи управления. Наиболее важная особенность – это методы адресации, используемые для определения адреса ячейки памяти, куда передаётся управление

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




Переходы в ЯА кодируются от слова Jump. Например, безусловный переход:

JMP оp,

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

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

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

Например,

АМ1: ADD AX,4

………………….

JMP AM1

Адресация переходов


а) Прямая адресация.

Команда содержит в себе базовый адрес сегмента и смещение. Это допускается только в командах межсегментного перехода или вызова процедур. Метка, которой передается управление, должна иметь атрибут FAR.

JMP CATS

где CATS – метка команды или имя процедуры, а JMP – аналог GOTO.

б) Косвенная адресация

Адрес перехода содержится в регистре или ячейке памяти. Это допускается для межсегментных и внутрисегментных переходов.

JMP AX ; в АХ заранее помещен перехода

JMP NEAR COD[BX]

Во втором примере есть явное указание типа перехода (NEAR – оператор в команде), COD[BX] – базовая адресация команды, которой передается управление.


в) Относительная адресация

Место перехода указывается как некоторое расстояние от самой команды перехода. Эффективный адрес перехода вычисляется суммированием индекса смещения, находится в команде и текущего значения указателя команд IP.

Имеется 2 типа:
  1. с 8 битовым индексным смещением, обеспечивает передачу управления в диапазоне (-128:128Б) (SHORT)
  2. с 16 битовым индексным смещением

(-32 768:32768Б) от текущей команды NEAR

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

mov w, offset L1; (в ячейку w записывается смещение L1 относительно ; текущей команды offset – смещение)

…………………………….

JMP w или JMP SHORT w ;то тогда проверяется корректность программы ; ; (действительно ли short )


Команды условных переходов делятся на 2 группы:

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

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

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

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

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

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

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

JNA ADRES


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

LOOP ор

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

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

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

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

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

……………….

LOOP L1;


Команда LOOP эквивалентна 3-м командам:

Dec CX

Cmp CX, 0

Jne L1

Цикл должен быть в рамках short.

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

Есть и другие команды управления циклом. Например, команды перехода по циклу с дополнительным условием, а именно с учетом флага ZF. Можно использовать 2 эквивалентные записи:

LOOPE op

LOOPZ op

Здесь цикл повторяется CX раз, пока сохраняется ZF=1, что соответствует сложному условию передачи управления CX<>0 AND ZF=1. Эти команды управления циклом обычно используются для решения задач поиска в последовательностях, их основной недостаток состоит в том, что неочевидна причина выхода их цикла, и требуется дополнительный анализ по окончании цикла.