Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

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

Программируемые задачи редко бывают просты настолько, чтобы команды в программе выполнялись одна за другой последовательно. Большинство программ содержит ряд циклов, в которых группа команд выполняется до достижения определенных требований. Также могут быть передачи управления на подпрограммы (процедуры), возврат управления из подпрограммы, обработчиков прерывания и исключения.

О том, какая команда должна выполняться следующей, процессор узнает по содержимому регистров CS:IP (EIP). Команды передачи управления меняют либо оба регистра, либо один из них. В зависимости от того, как меняются регистры, различают переходы: far; near; short.

Переход типа short (короткий переход) осуществляется, если адрес перехода находится в пределах от –127 до + 128 байт от команды, т.е. смещение относительно текущего адреса находится в указанных выше пределах. При этом используется относительный метод адресации.

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

Переход типа far (дальний переход) применяется в том случае, если адрес перехода находится в другом сегменте. В защищенном режиме дальний переход часто вызывает смену уровня привилегий — устанавливается уровень, указанный для данного сегмента кода в соответствующем дескрипторе.

При переходе типа short, near изменяется значение регистра ip (eip), т.е. смещение относительно начала сегмента. При переходе типа far изменяется еще и значение регистра CS — кодового сегмента.

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

  • команда безусловного перехода;

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

При использовании команд перехода в программе на языке ассемблер адрес перехода задается с помощью меток. Метка — это адрес в памяти. Метке соответствуют следующие атрибуты:

  • имя сегмента кода, где эта метка описана;

  • смещение от начала сегмента;

  • тип метки.

Метка определяется двумя способами — либо директивой LABEL, либо «:».

Директива «:» ставится после имени метки и определяет метку типа near, short или far.

Директива LABEL ставится после имени метки. После директивы указывается один из следующих типов: BYTE, WORD, DWORD, FWORD, QWORD, TBYTE, NEAR, FAR.

Директива объявления данных, перед которой стоит имя метки, также определяет метку с типом, соответствующим типу данных.

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

Met1: add ax, perem1 ; метка Met1 типа near или far

Met2 label near

Add ax, perem1 ; метка Met2 типа near

Met3 db 33,67 ; метка Met3 типа byte

Met4 label word ; метка Met4 типа word

Существуют следующие команды безусловной передачи управления:

JMP метка

Команда JMP передает управление в другую точку программы, не сохраняя какой-либо информации для возврата.

BOUND reg, mem

Проверка на попадание значения reg в диапазон, заданный в ячейках, на которые указывает mem. Если значение не попадает в диапазон, вызывается прерывание 5.

CALL метка

Вызов процедуры: передача управления с сохранением адреса возврата в стеке.

INT3

Выполнение программного прерывания 3 (см описание INT int8).

INT int8

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

PUSHF ; сохраняет слово флагов в стеке;

TF ← 0 ; запрещает прерывания трассировки;

IF ← 0 ; запрещает маскируемые прерывания;

CALL FAR (INT*4) ; выполняет дальний вызов процедуры по адресу, указанному по смещению INT*4 в нулевом сегменте.

INTO

Выполнение программного прерывания 4, если OF=1.

Соседние файлы в папке Введение в вычислительную технику.