Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

Распределение памяти

Основная память отводится для системных и прикладных программ. 16 старших байтов, начиная с FFFF0h, отводятся под команды начальной загрузки системы и используются процессором в момент включения питания. Первые 1024 байта отведены под адреса программ обработки прерывания (вектора). На каждое прерывание (вектор) отводится 4 байта, которые содержат дальний адрес программы обработки прерывания. Адрес первой выполняемой команды при инициализации (при включении питания или сигнала "Сброс") определяется значениями регистров: SS, DS, ES=0; CS=F000h; IP=FFF0h.

Прерывания

Процессор может выполнять прерывания 256 типов. Каждому прерыванию соответствует свой вектор прерывания - двойное слово, содержащее дальний адрес вызываемой процедуры обработки прерывания (CS:IP). Каждое прерывание имеет свой номер. Некоторые номера заданы аппаратно. Когда возникает прерывание, процессор использует номер как индекс в таблице адресов программ обработки прерывания (векторов прерывания). Каждый элемент таблицы занимает 4 байта и представляет полный логический адрес начала процедуры обработки прерывания. Для хранения векторов прерывания в памяти зарезервирована область 0 - 3FFh (1024 ячеек). По действиям процессора прерывания аналогичны дальним вызовам процедур (сохранение в стеке адреса возврата, т.е. содержимого регистров CS и IP и передача управления по указанному адресу). Порядок выполнения прерывания следующий.

  1. Вначале выполнения прерывания процессор помещает в стек регистр флагов и сбрасывает бит разрешения прерывания IF (Interrupt Flag) в регистре флагов.

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

  3. По номеру вектора прерывания извлекается и загружается в регистры дальний адрес программы обработки прерывания.

  4. По окончанию выполнения программы обработки прерывания по инструкции (команде) IRET из стека извлекаются и загружаются в соответствующие регистры адрес возврата и содержимое регистра флагов.

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

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

вектор 0 вырабатывается в случае деления на 0,

вектор 1 вырабатывается после выполнения каждой команды при установленном флаге трассировки TF в регистре флагов,

вектор 4 вырабатывается по команде INTO (Interrupt Overflow), если установлен флаг переполнения OF в регистре флагов.

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

Аппаратные или внешние прерывания могут возникать асинхронно относительно выполняемой программы. Они делятся на маскируемые и немаскируемые.

Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTR (Interrupt Request - запрос прерывания) при установленном флаге разрешения прерывания (IF=1). Процессор этом случае сбрасывает флаг IF (запрещает прерывания) и вырабатывает два следующих друг за другом цикла подтверждения прерывания, в которых генерируются управляющие сигналы INTA# (Interrupt Acknowledge - подтверждения прерывания). По второму импульсу внешний контроллер прерываний передает по шине данных байт, содержащий номер вектора прерывания. Обработка текущего прерывания может быть прервана немаскируемым прерыванием и другим маскируемым прерыванием, если обработчик установит флаг IF.

Немаскируемое прерывание выполняется независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Высокий уровень сигнала на этом входе вызывает прерывание с вектором 2, которое не может прерываться под действием сигнала NMI до выполнения инструкции возврата IRET.

Программные прерывания вызываются командой INT xx, где хх - номер вектора прерывания. Программные прерывания исполняются независимо от состояния флага IF. Программные прерывания позволяют быстро вызывать часто используемые процедуры. Использование процедур обработки прерывания BIOS и DOS дает разработчику мощный инструмент для написания программ.