Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект
Вид материала | Конспект |
СодержаниеИспользование прерываний Схема организации прерываний Рассмотрим программные прерывания Lea si, [bx+2]; si := [bx]+2 |
- Инновационной образовательной программы, 1090.47kb.
- Самостоятельная работа 2 часа в неделю всего часов, 28.69kb.
- Самостоятельная работа 2 часа в неделю всего часов, 45.89kb.
- Самостоятельная работа 2 часа в неделю всего часов, 73.46kb.
- Самостоятельная работа 2 часа в неделю всего часов, 46.6kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.37kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.08kb.
- Самостоятельная работа 2 часа в неделю всего часов, 64.33kb.
- Самостоятельная работа 2 часа в неделю всего часов, 29.72kb.
- Самостоятельная работа 2 часа в неделю всего часов, 33.42kb.
Использование прерываний
Система прерываний – важнейшая часть персонального компьютера, позволяющая быстро реагировать на события, обработка которых должна выполняться немедленно.
Существует 3 вида прерываний:
- Аппаратные (от машинных таймеров, клавиатуры и т.д.)
- Внутренние (возбуждаются в самом МП: деление на 0, несуществующая команда)
- Программные (вызываются командой int (от interrupt - прерывать) с числовым аргументом, который рассматривается как номер вектора прерывания, который обычно представляет собой два слова)
Схема организации прерываний
IP обр.прер.0 |
CS обр.прер.0 |
IP обр.прер.1 |
CS обр.прер.1 |
……………………. |
IP обр.прер.n |
CS обр.прер.n |
………………… |
IP |
CS |
FLAGS |
………………….. |
|
|
|
|
МП
|
4
6
(2)
Вектор прерв. процесса
(1)
SP в момент прерывания
Обработка прерываний n – обработчик прерываний, указывает адреса, в которых хранятся программы диспетчеры, открывающие доступ к большим гркппам подпрограмм обслуживающих конкретное прерывание.
Сигналы аппаратных прерываний, возникающие во внешних устройствах, поступают в МП через два контроллера прерываний, при этом по линиям данных передаётся номер вектора прерываний. Самое начало ОП отводится под векторы прерываний (адреса от 00000h до 003FFh), именно поэтому начальные адреса недоступны никому кроме системы (ПЗУ).
Векторы прерываний делят на группы:
- Внутренние прерывания (от 00h до 06h)
- Аппаратные прерывания (от 08h до 0Fh и от 70h до 77h)
Разные устройства имеют разные адреса:
- BIOS(10h, 13h, и д.р.)
- DOS(21h, 22h, и д.р.)
- Адреса системы таблиц BIOS(1Dh,1Eh, и д.р.)
Рассмотрим программные прерывания:
Общий вид: INT{номер прерывания}, где {номер прерывания} может принимать значения от 0 до 255, и соответствовать ситуации обслуживания конкретным прерыванием.
Прерывания вызываемые DOS называются прерываниями нижнего уровня; прерывания верхнего уровня используются в прикладных программах.
Номер | Ситуация или выполняемое действие | |
10-чный | 16-чный | |
32 | 20h | Нормальное завершение программы |
33 | 21h | Обращение к функциям DOS |
34 | 22h | Вызов подпрограммы обработки завершения задачи |
Особенно важно прерывание 21h, которое может выполнять множество функций DOS по обслуживанию стандартных устройств и файловой системы.
№ функции | Выполняемая операция |
0 | Завершение программы (аналог 20h) |
1 | Ввод символа с клавиатуры с эхо на экране |
2 | Вывод символа на дисплей |
5 | Вывод символа на печать |
8 | Ввод символа с клавиатуры без эхо на экране |
9 | Вывод строки символов на экран |
3Fh | Чтение из файла или ввод с устройства |
40h | Запись в файл или вывод на устройство |
4Ch | Завершение программы с возвратом управления DOS |
4Dh | Выдача кода завершения программы |
Номер функции заносится в AH до вызова прерывания. Например,
MOV AH, {номер функции}
INT 21h
Кроме того, в другие регистры вызывающая программа должна поместить аргумент выполняемой операции, если они нужны, а по окончании обработки из регистров могут быть получены результаты операции.
Ниже приведен пример программы из трех сегментов для вывода на экран строки.
Text SEGMENT
Hello DB “Здравствуйте!$”
; программа
Prim SEGMENT
ASSUME CS:Prim, DS:text
Start MOV AX, Text
MOV DS,AX
MOV AH, 9; функция вывода строки
MOV DX, OFFSET Hello
INT 21h
MOV AH, 4Ch; выход из программы
INT 21h
Prim ENDS
Stak SEGMENT ‘stack’
DW 128 dup(?)
Stak ENDS
END Start
Здесь для вывода сообщения в DX записывается начальный адрес ООП с именем Hello. Оператор OFFSET позволяет определить эффективный (относительный) адрес переменной или метки внутри сегмента данных. Общий вид оператора
OFFSET {переменная или метка}
Этот оператор используется обычно в командах MOV . Заметим, что для загрузки эффективный адреса в регистр существует специальная команда МП. Общий вид
LEA op1, op2
Где op1 – регистр для слова (2Б);
Op2 – описывает адрес в ОП
Например,
LEA SI, [BX+2]; SI := [BX]+2
LEA BX,Q ; BX := адрес Q
MOV DX,Q ; DX := содержимое Q