Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kratkie_otvety_ekzamen_CP_2011-12.docx
Скачиваний:
19
Добавлен:
14.04.2019
Размер:
132.13 Кб
Скачать

Команды возврата из подпрограмм

Каждая подпрограмма должна содержать минимум одну команду возврата RET, которая возвращает управление вызывающей программе. Такая передача управления осуществляется путем извлечения из стека адреса возврата, включенного в него командой вызова под­программы.

Команды внутрисегментного и межсегментного возврата имеют одну и ту же мнемонику RET. Тип команды, соответствующей этой мнемонике, определяется ассемблером автоматически.

Формат команды:

RET                - однобайтный вариант,

RET data - трехбайтный вариант.  

Однобайтная команда RET с кодом операции C3 реализует внут­рисегментный возврат. Она передает слово из вершины стека в IP и увеличивает SP на 2.

Однобайтная команда RET с кодом операции CB осуществляет межсегментный возврат. Она передает слово из вершины стека в IP, увеличивает SP на 2. передает слово из вершины стека в CS и снова увеличивает SP на 2.

Трехбайтные варианты команд возврата осуществляют те же действия, что и однобайтные, а затем прибавляют содержащиеся в них данные к указателю стека. Эти команды предназначены для упро­щения возврата из тех подпрограмм, параметры которых передаются в стеке. Прибавление к SP данных из RET эквивалентно удалению пара-

метров из стека.

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

Три команды управления циклами применяются для организации программных циклов. В них предусматривается использование регист­ра CX в качестве счетчика цикла.

В поле операнда команд управления циклами находится метка первой команды цикла (8-битовое смещение). Диапазон переходов этих команд составляет -128 - +127 байт от следующей команды.

Команда LOOP производит декремент регистра CX и, если содер­жимое CX не равно нулю, происходит переход к началу цикла. В противном случае выполняется следующая по порядку команда.

Мнемоники LOOPE/LOOPZ определяют одну и ту же машинную команду, которая производит декремент регистра CX, а затем пере­дает управление в начало цикла, если содержимое CX не равно нулю и ZF=1. В противном случае выполняется следующая по порядку команда.

Мнемоники LOOPNE/LOOPNZ также определяют одну и ту же машин­ную команду, которая производит декремент регистра CX, а затем передает управление в начало цикла, если содержимое CX не равно нулю и ZF=0. В противном случае выполняется следующая по порядку команда.

Команды прерываний

В процессоре 8086 имеются 3 команды, относящиеся к прерыва­ниям.

Команда программного прерывания INT вызывает программу обра­ботки, определяемую типом прерывания.

Формат команды:

Int type - вызов прерывания с номером type (от 0 до 255),

INT                 - вызов прерывания контрольного останова (номер 3).

Команда INT выполняется следующим образом:

1) декремент указателя стека на 2;

2) включение в стек содержимого регистра флажков;

3) сброс флажков IF и TF;

4) декремент указателя стека на 2;

5) включение в стек содержимого регистра CS;

6) определение адреса вектора прерывания ADDRESS путем умноже­ния кода типа прерывания на 4;

7) загрузка в регистр CS слова памяти, расположенного по адресу ADDRESS+2;

8) декремент указателя стека на 2;

9) включение в стек содержимого IP;

10) загрузка в регистр IP слова памяти, расположенного по адресу ADDRESS.

В результате этих действий осуществляется межсегментный кос-

венный вызов подпрограммы обработки прерывания.

Команда прерывания при переполнении INTO генерирует прог­раммное прерывание только в том случае, если установлен флаг переполнения. Она вызывает прерывание с номером 4.

Формат команды:

INTO

Команда возврата из прерывания IRET предназначена для выхода из подпрограммы обработки прерываний, инициированной аппаратно или программно.

Команда IRET выполняется следующим образом:

1) слово из вершины стека передается в IP;

2) производится инкремент SP на 2;

3) слово из вершины стека передается в CS;

4) производится инкремент SP на 2;

5) слово из вершины стека передается в регистр флагов;

6) производится инкремент SP на 2.

Формат команды:

IRET

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