Использование стандартных функций и разработка собственных прерываний в ОС MSDOS

Продолжительность работы – 4 часа.

Цель работы: приобретение навыков использования стандартных и разработка собственных прерываний в ОС MSDOS.

Используемое оборудование: любой IBM РС-совместимый компьютер.

Используемое программное обеспечение: система программирования Turbo Pascal 7.0.

Подготовка к работе

Изучить по конспекту лекций и приведенной ниже литературе, следующие вопросы:

· аппаратные и программные прерывания в IBM PC;

· обращение к функциям MSDOS;

· разработка собственных прерываний в ОС MSDOS;

· дополнение к существующему прерыванию в ОС MSDOS;

· назначение и состав модуля DOS в Turbo Pascal 7.0.

Программа работы

1. Составьте текст программы на языке Паскаль, которая формирует на экране меню, строки которого соответствуют названиям пунктов 2-4 лабораторной работы. Последний пункт меню - “Выход” - завершает работу программы. Пункты меню имеют сквозную нумерацию (табл. 1.) и выполняются при нажатии соответствующей клавиши. Пока программа должна обрабатывать нажатие клавиши только для завершения работы.

2. Использование стандартных функций MSDOS. В соответствии с вариантом (табл. 2), заданным преподавателем, добавьте в текст основной программы операторы для вызова требуемой функции MSDOS и вывода полученных результатов на экран дисплея.

3. Разработка собственного программного прерывания. Добавьте к основной программе процедуру обработки собственного прерывания (номер прерывания задан в табл. 3), в котором будут выполняться те же действия, что и в п.2.

4. Дополнение к существующему аппаратному прерыванию от таймера. Добавьте к основной программе процедуру обработки прерывания, которая будет являться дополнением к существующему аппаратному прерыванию от таймера. При помощи дополнения к прерыванию реализовать выполнение задания в соответствии с вариантом из табл. 4.

5. Добавьте к основной программе операторы, которые выводят на экран значения векторов прерывания и точек входа в процедуры обработки прерывания. Значения представить в виде логического адреса и физического адреса.

6. Сделайте выводы и оформите отчет по лабораторной работе.

табл. 1

№ варианта
Нумерация меню 1 - 4 F1 – F4 ABCD abcd АБВГ абвг F5 – F8

табл. 2

Функция MSDOS  
Вар. Номер прерыв Входные параметры Выходные параметры Сообщение
1. 12H   AX- размер памяти в кБ. Количество памяти в кБ.
2. 21H AX=3000H AL- основной номер версии. AH- вспомогат. номер версии. Номер версии ОС
3. 21H AH=2AH AL- день недели (0-вс. и т.д.). CX- год (1980-2099). DH- месяц (1-12). DL- день (1-31). Дата в формате: день.месяц.год
4. 21H AH=2CH CH- часы (0-23). CL- минуты (0-59). DH- секунды (0-59). Время в формате: час.минута.сек.
5. 21H AH=1BH AL- кол. сект. в кластере. CX- кол. байт в секторе. DX- кол. кластеров. Объем диска в байтах.
6. 21H AH=36H DL- номер диска (0; 1-А). AX- кол. сект. в кластере. BX- кол. своб. кластеров. CX- длина сектора в байтах. DX- кол. класт. на дорожке. Количество свободного места в байтах.
7. 21Н AH=09H DS:DX- нач.адрес строки с символом ‘$’ в конце.    

табл. 3



№ варианта
Номер прерывания

табл. 4

№ вар. Действие
1. Отсчет секунд и десятых долей с начала работы программы.
2. Выдача звукового сигнала с периодичностью 1 сек.
3. Изменение фона экрана с периодичностью 2 сек.
4. Изменение цвета символов с периодичностью 3 сек.
5. Пульсирующее окно с дискретностью изменения параметров 1/9 сек.
6. Перемещающееся окно с дискретностью изменения координат – 1/6 сек.
7. Вариант 3 + Вариант 4.

Методические указания к выполнению работы

Внутренняя организация МП семейства 80х86 в реальном режиме работы

В реальном режиме работы (например, под управлением MSDOS) любой из процессоров семейства 80х86 функционирует просто как 16-разрядный "быстрый" МП 8086, т.е. полностью соответствуют его программной модели.

Внутренние регистры МП

В состав МП входят следующие блоки регистров (табл. 5):

табл. 5

  CS сегмент кода  
  DS сегмент данных Сегментные
  SS сегмент стека Регистры
  ES дополнительный сегмент  
  IP указатель команд  
  SP указатель стека  
  BP указатель базы Регистры
  SI индексный регистр  
  DI индексный регистр Общего
AX AH AL аккумулятор  
BX BH BL указатель базы Назначения
CX CH CL счетчик  
DX DH DL расширитель аккумулятора  
  F регистр флагов  

· блок сегментных регистров. 4 сегментных регистра используются для хранения 16-и разрядных сегментных адресов начала сегмента.

· IP – 16-и разрядный регистр указателя команд, в котором хранится адрес смещения команды в кодовом сегменте.

· регистры общего назначения (РОН) могут использоваться для хранения любой информации. Но, как правило, РОН AX, BX, CX и DX используются в основном для хранения данных и допускают раздельное использование их байтов, а регистры SP,BP,SI,DI используются, в основном, для хранения адресной информации. Кроме того, каждый из РОН имеет специальные функции, которые используются по умолчанию в некоторых командах.

· регистр флагов (признаков) F содержит признаки последней выполненной АЛУ операции.

Организация памяти

Память представляет собой последовательность байтов, каждый из которых имеет 20-и разрядный физический адрес (исполнительный адрес) в диапазоне 00000-FFFFF. Все пространство памяти представляется как набор сегментов, определяемых программным путем. Размер каждого сегмента составляет 64К. В каждый момент времени в памяти имеется 4 сегмента: CS, SS, DS, ES. Эти сегменты могут не пересекаться, могут частично пересекаться, а если содержимое сегментных регистров одинаково, то они полностью совпадают.

Для определения физического адреса памяти необходимо знать начальный адрес сегмента и внутрисегментное смещение. Физический адрес формируется сумматором блока шинного интерфейса МП (рис. 1) в соответствии со следующей формулой:

FA = SR*16 + ЕА, где:

FA – физический адрес;

SR – содержимое текущего сегментного регистра;

ЕА – эффективный адрес.

Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru

рис. 1

Сегментный адрес хранится в одном из сегментных регистров (16 старших разрядов 20-ти разрядного адреса памяти). При вычислении физического адреса памяти к содержимому сегментного адреса дописываются нули. Поэтому начальные адреса сегментов всегда кратны 16.

Смещение в сегменте формируется процессором в зависимости от его режима работы. Если процессор выполняет выборку команд из памяти, то сегментный адрес берется из регистра CS, а смещение – из указателя команд IP (рис. 2). Во всех остальных случаях смещение формируется из содержимого РОН, индексных или базовых регистров. Способ вычисления смещения является способом адресации.

Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru

рис. 2

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

Для точного указания адреса в памяти используется логический адрес, который имеет следующий формат записи:

SR:EA; где SR – содержимое сегментного регистра; EA – эффективный адрес.

Например, пусть DS=2000H, EA=3100H. Тогда:

Логический адрес: 2000:3100

Физический адрес: 2000 0 + 3100 = 23100

Иногда объем памяти измеряется в параграфах (§): 1§ = 16 байт.

Система прерываний МП

Прерывание – это событие, которое прерывает нормальный ход выполнения программы (процесса).

МП 80х86 имеет эффективную систему прерываний, в которой каждому прерыванию поставлен в соответствие код (от 0 до 255), который идентифицирует тип прерывания. В системах с МП 8086 различают внешние и внутренние прерывания.

Внешние прерывания – это прерывания, обусловленные каким-либо внешним событием. Сигнал свершения этого события поступает на один из двух входов МП:

INTR – вход маскируемого запроса прерывания от внешних устройств;

NMI – вход немаскируемого запроса прерывания.

Для разрешения обслуживания внешних прерываний используется выход подтверждения прерывания Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru .

МП имеет только один вход для запроса прерывания, а устройств, требующих обслуживания по прерыванию в системе может быть несколько. Для обслуживания прерываний от нескольких устройств используется специализированная МС - программируемый контроллер прерывания (ПКП). ПКП выполняет следующие основные функции:

· фиксирует запросы прерываний от внешних устройств;

· анализирует приоритеты поступивших прерываний;

· запрашивает у МП и, в случае подтверждения прерывания, выдает МП номер прерывания с наивысшим приоритетом.

При поступлении на один из входов ПКП IRQ0-IRQ7 запроса прерывания от внешнего устройства (рис. 3), ПКП фиксирует это прерывание, анализирует его приоритет и, если поступившее прерывание имеет наивысший в данный момент приоритет, выдает МП сигнал запроса прерывания INTR. При поступлении на вход INTR сигнала высокого уровня процессор заканчивает выполнение текущей команды и выдает сигнал подтверждения прерывания Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru , который поступает на соответствующий вход ПКП. В ответ на этот сигнал ПКП процессору информации не передает. Затем процессор вырабатывает еще один сигнал Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru , в ответ на который ПКП передает МП по шине данных байт, определяющий номер (тип) прерывания (0¸255). Этот номер однозначно связан с ПП обслуживания прерывания, на которую затем переходит процессор.

Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru

рис. 3

Прерывания по входу INTR можно разрешить или запретить(замаскировать), управляя состоянием флага I. Для этих целей имеются две специальные команды:

CLI – очистить флаг I=0 (запретить прерывания по входу INTR);

STI – установить флаг I=1 (разрешить прерывания по входу INTR).

Если пришел запрос прерывания, а прерывания были запрещены (I=0), то процессор не обслуживает этот запрос и не запоминает его.

Запрос прерывания по входу NMI является немаскируемым и программно его запретить нельзя. После появления сигнала на входе NMI процессор автоматически переходит к обслуживанию прерывания типа 2 (подтверждение прерывания при этом не требуется). Обычно сигнал запроса прерывания по входу NMI используют события, требующие немедленной обработки (например, аварийное отключение питания).

Запрос прерывания по входу NMI запоминается в МП и имеет более высокий приоритет, чем прерывания по входу INTR.

Внутренние прерывания связаны с определенными событиями внутри процессора или инициируются при помощи команд. В случае внутренних прерываний не вырабатываются сигналы подтверждения прерываний Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru , процессор просто переходит по вектору, заданному типом прерывания. Виды внутренних прерываний:

1. прерывание при ошибке деления на “0”. Возникает в том случае, если частное слишком велико или делитель = 0 (тип 0);

2. прерывание по переполнению. Выполняется по команде INTO при условии, что установлен флаг переполнения V=1 (тип 4);

3. прерывание при трассировке. Возникает по окончании команды, если установлен флаг трассировки Т=1 (тип 1);

4. прерывание типа 3. Возникает при выполнении однобайтной команды INT 3. Используется для установки контрольных точек разрыва при отладке программ.

5. программные прерывания при выполнении двухбайтных команд INTn (где n – номер прерывания). Программные прерывания на самом деле ничего не прерывают, а являются удобным средством для доступа к стандартным подпрограммам (функциям ОС).

Рассмотрим взаимосвязь между типом прерывания и п/пр обслуживания прерываний.

Таблица векторов прерываний

Использование стандартных функций и разработка собственных прерываний в ОС MSDOS - student2.ru

рис. 4

Для обслуживания прерываний в системах с МП 8086 используется таблица векторов прерываний объемом 1Кбайт, расположенная с нулевого адреса памяти (0...3FF). На каждый тип прерывания отводится 2 слова (4 байта) памяти, в которых хранится логический адрес п/пр обслуживания прерывания. Слово с большим адресом загружается в сегментный регистр CS, а с меньшим адресом – в регистр указателя команд IP. Таблица векторов прерываний имеет вид представленный на рис. 4.

Таким образом, получив номер типа прерывания, процессор умножает номер типа прерывания на 4 и получает адрес вектора прерывания. При переходе к п/пр обслуживания прерываний МП сохраняет в стеке содержимое CS,IP,F. Затем CS и IP загружаются новым содержимым из вектора прерываний. Возврат из п/пр осуществляется по команде IRET, которая восстанавливает содержимое регистров CS,IP,F из стека.

Наши рекомендации