- •Цели и задачи практики
- •Введение Аппаратные прерывания
- •Программные прерывания
- •Работа с прерываниями на языке Ассемблера и яву (с, Pascal)
- •Обмен данными через порты
- •Тема 1. Работа с видео-системой Теоретические вопросы:
- •Примерные варианты заданий
- •Тема 2. Программирование клавиатуры Теоретические вопросы:
- •Примерные варианты заданий
- •Тема 3. Работа с дисковыми накопителями Теоретические вопросы:
- •Примерные варианты заданий
- •Написать функцию, возвращающую объем доступного дискового пространства.
- •Тема 4. Работа с манипулятором «мышь» Программа работы:
- •Краткие пояснения к изучаемому материалу
- •Определение наличия драйвера и мыши в пк
- •Тема 5. Работа с таймером. Генерация звука. Теоретические вопросы:
- •Примерные варианты заданий
- •Список литературы
- •Приложение 1. Форма отчета
- •Приложение 2 вопросы к защите отчета по практике Вопросы к теме 1
- •Вопросы к теме 2
- •Вопросы к теме 3
Работа с прерываниями на языке Ассемблера и яву (с, Pascal)
Работая на языке Ассемблера, при необходимости вызова той или иной функции DOS или BIOS программист должен предварительно загрузить в определенные регистры процессора номер функции и ее аргументы и вызвать прерывание по номеру.
Программируя на языке С или Pascal, можно пользоваться функциями стандартных модулей. Оба они носят одноименное название DOS и поддерживают обращение к прерываниям DOS и BIOS.
Процедуры языка Pascal
GetIntVec (N : byte; var Adress: Pointer)
Возвращает в переменную Adress адрес программы обработки прерывания с номером N.
SetIntVec (N : byte; var Adress: Pointer)
Устанавливает в DOS новую подпрограмму обработки прерывания с номером N, замещая старое значение адреса на Adress.
Intr (N : byte; var R : Registers)
Активизирует программное прерывание N, передавая ему номер функции и параметры в переменной R.
MsDos(var R : Registers)
Специализированный вызов прерывания с номером 21h.
В модуле DOS так же определн тип Registers, который является записью с вариантами:
Registers = record
Case Integer of
0: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : word);
1: (AL,AH,BL,BH,CL,CH,DL,DH :byte);
end;
Функции языка С
int intdos(union REGS *inregs, union REGS *outregs);
int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs);
Эти функции выполняют вызов определенной функции 21h-го прерывания DOS .
int int86(int intno, union REGS *inregs, union REGS *outregs);
int int86x(int intno, union REGS *inregs, union REGS *outregs, struct SREGS *segregs);
Альтернативный вызов функции DOS
void intr(int intno, struct REGPACK *preg);
Альтернативный вызов функции DOS по номеру intno
void geninterrupt(int intr_num);
Осуществляет вызов прерывания по номеру intr_num
Объединение REGS используется для доступа к регистрам микропроцессора с помощью функций: int86, int86x, intdos, intdosx:
union REGS {
struct WORDREGS x;
struct BYTEREGS h; };
В свою очередь структуры WORDREGS и BYTEREGS дают доступ к 16-ти разрядным регистрам и их 8-ми разрядным частям:
struct BYTEREGS { unsigned char al, ah, bl, bh; unsigned char cl, ch, dl, dh; };
|
struct WORDREGS { unsigned int ax, bx, cx, dx; unsigned int si, di, cflag, flags; };
|
Обмен данными через порты
Во время работы микропроцессору приходится обмениваться данными с внешними устройствами. Передача управляющих сигналов и данных осуществляется через порты.
Порты представляют собой своеобразные “двери”, через которые информация поступает на внешние устройства или передается с них. Одно устройство может использовать несколько портов. Каждый порт идентифицируется 16-разрядным номером. Диапазон номеров от 0 до 65535. Как и при доступе к памяти, процессор для связи с портами использует шины данных и адреса. При обращении к порту вначале по управляющей шине идет сигнал, который оповещает, все внешние устройства, что адрес на шине является адресом порта, а затем посылает сам адрес. То устройство, адрес которого совпадает, дает ответ. Номер порта – это адрес ячейки памяти, которая имеет 8 или 16 разрядов и является частью устройства, а не оперативной памяти.
Основной способ обращения к портам заключается в применении команд IN и OUT языка Ассемблер. По команде IN происходит считывание одного байта или одного слова из порта. По команде OUT происходит запись одного байта или одного слова в порт.
Ниже представлены номера портов центрального процессора, используемые в операционной системе MS-DOS для каких-то конкретных целей.
Порт центрального процессора CPU Адрес ввода/вывода Вектор прерывания
Таймер 040=043 8
Клавиатура 060=063 9
Последовательный порт СОМ2 2F8=2FF 11
Последовательный порт СОМ1 3F8=3FF 12
Жесткий диск 320=32F 13
Гибкий диск 3F0=3F7 14
Параллельный порт LPT1 378=37F 15
Монохромный дисплей 380=3BF -
Цветной дисплей 3D0=3DF -