Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 2

.doc
Скачиваний:
81
Добавлен:
01.05.2014
Размер:
116.74 Кб
Скачать

CПГЭТУ

кафедра А и ПУ

ЛАБОРАТОРНАЯ РАБОТА N 2

“Система прерываний ПЭВМ IBM PC/AT”

ОТЧЕТ

Группа: 5325

Выполнили:

Яхнев А.Н.

Рунова О.А.

2008

Цель работы:

1. Изучение принципов программирования контроллера прерываний.

2 .Приобретение навыков программирования пользовательских обра-

ботчиков прерываний.

Общие сведения:

Для управления аппаратными прерываниями во всех типах ПЭВМ IBM PC используется микросхема программируемого контроллера прерываний Intel 8259. Поскольку в каждый момент времени может поступить не один запрос, микросхема имеет схему приоритетов. Имеется 8 уровней приоритетов, максимальный приоритет соответствует уровню 0. Добавочные 8 уровней ( Уровень 8 - Уровень 15 ) обрабатываются второй микросхемой 8259, этот второй набор уровней имеет приоритет между уровнями 2 и 3. Запросы на прерывания по уровням 0 - 7 соответствуют векторам прерывания от INT 8 до INT 0F. Запросы на прерывания по уровням 8 - 15 обслуживаются векторами INT 70 - INT 77. Исключением из общего правила является аппаратное немаскируемое прерывание NMI которое имеет максимальный приоритет, поскольку запрос, минуя контроллер прерываний, поступает непосредственно на процессор.

Микросхема 8259 имеет три однобайтовых регистра, которые управляют восемью линиями аппаратных прерываний. Регистр запроса на прерывание <IRR> устанавливает соответствующий бит, когда на линии прерывания уровень сигнала изменяется от низкого к высокому. Затем микросхема автоматически проверяет, не обрабатывается ли другое прерывание. При этом она запрашивает информацию регистра обслуживания <ISR>. Дополнительная цепь отвечает за схему приоритетов. Перед вызовом прерывания проверяется регистр маски прерываний <IMR>, чтобы узнать разрешено ли в данный момент прерывание данного уровня.

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

Получив от процессора разрешение, контроллер выдает на шину данных адрес вектора прерываний. Процессор использует этот адрес, чтобы определить точку входа в программу обработки прерываний. Когда программа обработки прерываний завершается, необходимо командой OSW1/EOI в контроллере 8259 сбросить бит регистра ISR с максимальным приоритетом. В противном случае обработка прерываний для уровня с текущим приоритетом и уровней с более низким приоритетом будет блокирована.

Доступ к внутренним регистрам контроллеров осуществляется через порты 20h, 21h для главного контроллера и A0h, A1h - для подчиненного. Формат команды обращения показан на рис. 5.6. На этапе начального пуска программой BIOS выполняется инициализация контроллера прерывания. В процессе инициализации устанавливаются значения векторов прерываний и дисциплина обслуживания приоритетных уровней.

В лабораторной работе используется аппаратное прерывание INT 8 от микросхемы таймера. Стандартный обработчик данного прерывания поддерживает системные часы операционной системы MS DOS, контролирует длительность паузы при выполнении операций с гибким диском, а также вызывает программное прерывание INT 1C, предназначенное для подключения обработчиков прерываний разработанных пользователем.

Вектора прерываний, используемые операционной системой, образуют таблицу векторов и располагаются в начальной области оперативной памяти, начиная с нулевого физического адреса. Таблица векторов занимает 1К оперативной памяти и содержит 256 векторов. На каждый вектор отводится четыре байта. Вектор прерываний имеет следующий формат в оперативной памяти:

Формат вектора прерываний:

+2

0

CS - сегмент точки входа в обработчик прерываний

IP - смещение точки входа в обработчик прерываний

Структурная схема системы прерываний IBM PC :

Главный

I8259А

Уровень 0

Уровень 1

Уровень 2

Уровень 3

Уровень 4

Уровень 5

Уровень 6

Уровень 7


INT 8

INT 9

INT B

INT C

INT D

INT E

INT F

INT 2

Системные часы

Клавиатура

Последовательный интерфейс COM1

Последовательный интерфейс COM2

Параллельный интерфейс LPT2

Дискетные устройства

Параллельный интерфейс LPT1

NMI


Ошибка четности

Подчиненный

I8259А

Уровень 8

Уровень 9

Уровень 10

Уровень 11

Уровень 12

Уровень 13

Уровень 14

Уровень 15

--- INT 70

--- INT 71

--- INT 72

--- INT 73

--- INT 74

--- INT 75

--- INT 76

--- INT 77


CMOS - часы реального времени

резервировано

Арифметический процессор 80287

Контроллер жесткого диска

резервировано

Pис. 1.

Программная модель контроллера I8259А :

IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

Регистр IRR

Регистр

состояния


Регистр ISR

Регистр

команд


Регистр IMR

DA<7. . . 0> DA<7. . . 0>

Рис. 2.

IR<7. . . 0> - запросы прерываний;

DA<7. . . 0> - шина данных;

IRR - регистр запросов прерываний;

ISR - регистр обслуживаемых прерываний;

IMR - регистр маски прерываний.

Формат регистра маски :

7 6 5 4 3 2 1 0

IR7

IR6

IR5

IR4

IR3

IR2

IR1

IR0

1 - запрос блокирован,

0 - маска сброшена.

Рис. 3.

Порт 21h - для главного контроллера;

Порт A1h - для подчиненного контроллера.

Формат команды управления OSW 0 :

7 6 5 4 3 2 1 0

R

SE0I

EOI

0

0

L2

L1

L0

Адрес входа IR

1 - Сбросить бит ISR с максимальным приоритетом

1 - Поле L<2. . .0> не используется

1 - Циклический приоритет

Рис. 4.

Формат команды управления OSW 1 :

7 6 5 4 3 2 1 0

*

ESMM

SMM

0

1

P

ERIS

RIS

ESMM SMM

0

*

Не использ.

1

0

Читать IRR

1

1

Читать ISR


Не использ.

0

*

Сбросить SMM

1

0

Установить SMM

1

1

1 - Опросить номер обслужи-

ваемого прерывания.

Рис. 5.

Формат слова состояния прерываний в режиме опроса :

7 6 5 4 3 2 1 0

L2

L1

L0

код запроса

111 - при D7=0

1 - наличие запроса

Рис. 6.

Порядок выполнения работы:

1. Загрузить отладчик AFD;

2. С помощью HELP <F4> изучить команды отладчика “i”, ”o”;

Команда i<номер порта> (например, i21) чтение содержимого порта

Команда o i<номер порта>,<новое значение> (например, o21,B9) запись значения B9 в порт 21.

3. Прочитать содержимое регистров маски: 21h - главный контроллер,

A1h - подчиненный контроллер.

Пользуясь рис. 1, расшифровать содержимое регистров, результаты записать в отчет.

Порт 21h – содержимое B8h

Расшифровка:

B8h=10111000

INT 8 = 0

INT 9 = 0

Уровень 2 = 0

INT B = 1

INT C = 1

INT D = 1

INT E = 0

INT F = 1

Прерывания по адресам Bh,Ch,Dh,Fh запрещены.

Порт A1h – содержимое 0Fh

Расшифровка:

0Fh=00001111

INT 70 = 1

INT 71 = 1

INT 72 = 1

INT 73 = 1

INT 74= 0

INT 75 = 0

INT 76 = 0

INT 77 = 0

Прерывания по адресам 70h,71h,72h,73h, запрещены

4. Установить маску на системный таймер, не изменяя маски остальных источников прерываний. Код новой маски записать в отчет. Выйти из AFD и убедится, что системные часы остановлены.

Код новой маски – B9 = 10111001. Команда O21,B9 останавливает системные часы.

5. Вернуться в AFD.

6. Набрать, начиная с адреса 100, текст программы:

CLI

MOV CX , FFFF

L1: NOP

NOP

LOOP L1 ;при наборе вместо L1 установить фактический адрес

M : MOV AL , 0A ; команда управления

OUT [20] , AL

IN AL , [20] ;чтение регистра IRR или слова состояния

MOV BL , AL ; в BL содержимое регистра IRR или слова состояния

MOV AL , 0B

OUT [20] , AL

IN AL , [20] ;чтение регистра ISR

STI

L2: NOP ; установить контрольную точку останова

Программа позволяет читать внутренние регистры контроллера используя команду OSW1.

7. Изучить возможности АFD для установки контрольных точек программы (нажать клавиши F4, F5 ). Установить контрольную точку останова на метке L2.

Для установки контрольной точки останова необходимо указать ее адрес (CS:120) в поле Адрес BRK, в поле действие ввести STOP.

8. Многократно запуская программу по команде g100, фиксировать в отчете значения регистров IRR и ISR главного контроллера.

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

CLI

MOV CX , FFFF

L1: NOP

L1=CS:104

MOV DX,FFFF

L3: DEC DX

L1=CS:108

CMP DX,0

JNZ L3:

NOP

LOOP L1 ;при наборе вместо L1 установить фактический адрес

M : MOV AL , 0A ; команда управления

M=CS:111

OUT [20] , AL

IN AL , [20] ;чтение регистра IRR или слова состояния

MOV BL , AL ; в BL содержимое регистра IRR или слова состояния

MOV AL , 0B

OUT [20] , AL

IN AL , [20] ;чтение регистра ISR

STI

L2: NOP ; установить контрольную точку останова

L2=CS:120

Значение регистров:

ISR = 0000h

Расшифровка 0000 0000

IRR = 0003h

Расшифровка 0000 0011

Был получен запрос прерывания по входам:

IRQ0 - прерывание интервального таймера, возникает 18,2 раза в секунду

IRQ1 - прерывание от клавиатуры. Генерируется, когда пользователь нажимает и отжимает клавиши. Используется для чтения данных из клавиатуры

9. Установить в программе, в команде помеченной меткой М, режим опроса состояния контроллера.

10. Запустить программу по команде g100, зафиксировать в отчете значения слова состояния и регистра ISR. При зависании машины выполнить перезагрузку и вернуться в AFD. Объяснить причину зависания.

В отчете расшифровать содержимое регистров внутренних регистров IRR, ISR и слова состояния контроллера. Формат регистров IRR, ISR соответствует формату регистра маски.

11. Рассчитать адрес вектора прерывания системного таймера следуя формуле :

АДРЕС = номер прерывания ( см. рис. 1 ) * 4.

Записать в отчет адрес вектора и его содержимое.

Адрес = 8*4 = 20h

Содержимое вектора прерываний:

75 18 69 07

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

CS = 0769

Команда a1875

Первые три команды обработчика прерываний системного таймера.

PUSHF

CLI

CALL Far CS:[23C0]

12. Рассчитать адрес вектора системного прерывания INT 1C. Записать в отчет адрес вектора и его содержимое. Запомнить текущее содержимое регистра CS; Записать в CS значения из вектора. В окне дизассемблера найти точку входа в обработчик прерываний INT 1C и записать в отчет три первых команды обработчика. Восстановить прежнее значение регистра CS.

Адрес = 1C *4 = 70h

Содержимое вектора прерываний:

53 FF 00 F0

CS = F000

Команда aFF53

Первые три команды обработчика прерываний системного таймера.

IRET

JMP ED04

JMP DI

1C - Программное прерывание, вызывается 18,2 раза в секунду обработчиком аппаратного прерывания таймера

INT9 (IRQ1) - прерывание от клавиатуры. Генерируется, когда пользователь нажимает и отжимает клавиши. Используется для чтения данных из клавиатуры.

Адрес = 9*4 = 24h

Содержимое вектора прерываний:

6F 4B EE 13

CS=13EE

Смещение обработчика клавиатуры: 4B6Fh

13. Начиная с адреса 100 набрать текст пр-мы обработки прерываний таймера:

PUSH AX

ADD CS:[30] , 1

MOV AL , 20

OUT [20] , AL

POP AX

IRET

Начиная с адреса 120 набрать текст :

NOP

JMP 120

В отчете привести функциональный комментарий к каждой из команд.

PUSH AX

Помещение в стек содержимого AX

ADD CS:[30] , 1

Увеличение на 1 содержимого CS:[30]

MOV AL , 20

Помещение в регистр AL управляющей команды 20h

OUT [20] , AL

Отправка в порт 20 управляющей команды 20h для фиксации обработки прерывания. В противном случае обработчик программных прерываний таймера будет вызываться постоянно, что приведет к зависанию программы (В ISR остается 1)

20h = 00100000

EOI = 1, сброс бита ISR с максимальным приоритетом

POP AX

Извлечение AX из стека

14. Замаскировать прерывание системного таймера.

15. Заменить вектор прерываний таймера на новый. Показать преподавателю.

16. Сбросить маску прерываний таймера.

17. В пошаговом режиме выполнять программу, начиная с адреса 120, контролировать содержимое ячейки CS: 0030.

При пошаговом выполнении программы наблюдается увеличение ячейки CS:0030.

18. Замаскировать прерывания системного таймера.

19. Восстановить прежний обработчик прерываний таймера.

20. Разрешить прерывания таймеру.

Оформление результатов:

Отчет должен содержать:

1. Титульный лист, цель работы.

2. Тексты всех тестов

3. Значение маски, использованное для останова системного таймера.

4. Адреса векторов прерываний системного таймера и клавиатуры.

5. Текст начальных команд обработчика прерываний таймера и системного прерывания INT 1C.

6. Текст программы обработки прерываний с комментариями.

7. Результаты работы программы обработки прерываний.

11