2847

Прерывания в ОС MS-DOS

Контрольная

Информатика, кибернетика и программирование

Прерывания в ОС MS-DOS Драйвер – это программа, являющаяся посредником между устройством и программой пользователя и предоставляющая набор функций для работы с устройством. В MS-DOS существуют драйверы символьных устройств (за одну операцию обм...

Русский

2012-10-20

36 KB

15 чел.

Прерывания в ОС MS-DOS

Драйвер – это программа, являющаяся посредником между устройством и программой пользователя и предоставляющая набор функций для работы с устройством. В MS-DOS существуют драйверы символьных устройств (за одну операцию обмена между устройством и драйвером передаётся один символ) и блочных устройств (за одну операцию обмена между устройством и драйвером передаётся блок символов, размер блока зависит от устройства).

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

Контроллер – это специальная микросхема, обеспечивающая работу определённого устройства и его взаимодействие с ЦП.

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

  •  внутренние – возникают в процессе работы ЦП (деление на 0, переполнение регистра);
  •  аппаратные – инициируются аппаратурой ПК (нажатие клавиш клавиатуры, перемещение мыши);
  •  программные – вызываются пользовательскими приложениями или операционной системой (печать на экран, ввод с клавиатуры).

Каждое прерывание представляется 4-байтовым адресом начала (первой команды) программы обработки прерывания, которая может быть драйвером или входить в состав ОС или BIOS. Этот адрес называется вектором прерывания. В ОС MS-DOS определены 256 различных прерываний, имеющих номера от 00h до FFh. Положение векторов прерываний в ОЗУ строго фиксировано на протяжении всего времени работы ПК. В ОС MS-DOS вектора прерываний располагаются в диапазоне адресов 00000h-003FFh и занимают объём памяти 1K, каждый адрес имеет размер 4 байта (по два байта на адреса сегмента и смещения) для адресации к любому участку 1M памяти ОС. Адрес расположения начала вектора прерывания можно вычислить, умножив номер этого вектора на 4 (так как каждый вектор имеет размер 4 байта).

Каждое прерывание связано с каким-либо устройством или системной операцией. Так как с каждым устройством или системной операцией можно выполнять различные действия (определить положение курсора мыши, состояние кнопок мыши), то каждое прерывание имеет несколько режимов работы, называемых функциями прерывания.

В дальнейшем будем рассматривать только аппаратные и программные прерывания.

Действия, выполняемые системой при обработке прерывания.

  1.  Прерывание инициируется источником прерывания. Если это программное прерывание, то выполняется команда процессора int с номером соответствующего прерывания. Если это аппаратное прерывание, то сигнал от устройства поступает на вход контроллера прерываний, который посылает по соответствующей линии на вход процессора сигнал запроса прерывания.
  2.  Процессор приступает к обработке прерывания. Он сохраняет в стеке выполняемой программы содержимое регистра флагов, регистров CS и IP.
  3.  Процессор читает номер прерывания, определяющий вектор прерывания (для программного прерывания номер задается в команде, для аппаратного прерывания он читается процессором из контроллера прерываний), то есть новые значения регистров CS и IP. Таким образом, выполняется переход по адресу программы обработки прерывания.
  4.  Выполняется программа обработки прерывания, в конце которой должна стоять команда возврата.
  5.  При выполнении команды возврата из стека прерванной программы извлекается содержимое регистра флагов, регистров CS и IP, продолжается выполнение прерванной программы.

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

Регистры процессора Intel8086.

Регистры данных: AX(AH и AL), BX(BH и BL), CX(CH и CL), DX(DH и DL). Это двухбайтовые регистры, однако возможно обращение отдельно к старшему или младшему байту регистра.

Регистры указатели: SI, DI, BP, SP, IP.

Сегментные регистры:  CS, DS, ES, SS.

Регистр флагов, содержит набор специальных битовых переменных (флагов).

Пара регистров CS (сегмент) и IP (смещение) определяют адрес выполняемой команды.

Через регистры передаются данные от инициатора прерывания к программе обработки при вызове прерываний и от программы обработки к инициатору при возврате из программы обработки. Регистры на входе – регистры до выполнения прерывания, регистры на выходе – регистры после выполнения прерывания. Назначение регистров и характер передаваемых через них данных строго фиксированы и описываются в соответствующей документации по ОС MS-DOS.

Средства Borland C++ 3.1 для работы с регистрами процессора Intel8086.

В файле dos.h для работы с регистрами процессора объявлены агрегативные типы данных.

struct  SREGS   {

   unsigned int    es;

   unsigned int    cs;

   unsigned int    ss;

   unsigned int    ds;

};

struct WORDREGS {

   unsigned int    ax, bx, cx, dx, si, di, cflag, flags;

};

struct BYTEREGS {

   unsigned char   al, ah, bl, bh, cl, ch, dl, dh;

};

union   REGS    {

   struct  WORDREGS x;

   struct  BYTEREGS h;

};

Структура SREGS предназначена для работы с сегментными регистрами, структура WORDREGS – для работы с двухбайтовыми регистрами, структура BYTEREGS – для работы с однобайтовыми регистрами, объединение REGS – для возможности доступа к регистрам данных одновременно как двухбайтовым и однобайтовым регистрам.

int int86(int intno, REGS * in, REGS * out);

int int86x(int intno, REGS * in, REGS * out, SREGS * seg);

Функции int86() и int86x() выполняют вызов программного прерывания, номер которого задается параметром intno. Параметры in и out задают регистры на входе и выходе прерывания соответственно. Для функции int86x() параметр seg задает значения сегментных регистров. Перед выполнением прерывания функции копируют значения переменных параметра in в регистры процессора (функция int86x() перед вызовом прерывания также копирует в сегментные регистры DS и ES соответствующие значения из полей cтруктуры seg), после выполнения – значения регистров копируются в параметр out. Функции возвращают значение регистра AX после выполнения прерывания.

unsigned FP_SEG(void far *p);

unsigned FP_OFF(void far *p);

Макросы FP_SEG и FP_OFF выполняют для указателя p выделение сегментной части или смещения соответственно, которое и является результатом макрорасширения.

void far * MK_FP(unsigned seg, unsigned off);

Макрос MK_FP позволяет получить значение указателя из параметров seg и off, задающих сегментную часть и смещение соответственно.


 

А также другие работы, которые могут Вас заинтересовать

39407. Статистика Методические указания по выполнению курсовой работы 2 MB
  Цель работы закрепление и углубление теоретических знаний полученных в ходе изучения курса Статистика формирование у студентов будущих специалистов обучающихся по специальности Государственное и муниципальное управление теоретических знаний и практических навыков по сбору обработке и анализу статистической информации выявление эффективных вариантов принимаемых управленческих решений развитие у студентов творческой инициативы и навыков исследовательской деятельности. Примерные темы курсовых работ Статистикоэкономический...
39408. Проектирование цифрового частотомера 840.51 KB
  В роли источника питания может выстапать гальванический элемент или аккумулятор напряжением 15 В. С помощью преобразователя напряжения это значение повышают до 5 В напряжение необходимое для стабильной работы устройства. Вход Рисунок 2 Функциональная схема В состав блока формирователя импульсного напряжения входит: входное гнездо XS1 на которе подают импульсное или переменное напряжение частоту которого нужно измерить; резисторы R1 ограничивает входной ток R2 R3 устанавливает нижний предел напряжения входного сигнала R4;...
39409. Проект полігонометрії 4 класу 192 KB
  Розграфлення система поділу топографічних карт на частини з метою одержання листів карт більш крупного масштабу. Основою для створення всіх крупно масштабних карт є карта масштабу 1:1000000. Для того щоб отримати карту масштабу 1:1000000 вся поверхня земної кулі умовно поділяється на колони через 6˚ по довготі від меридіана 180˚ та паралелями на пояси через 4˚ по широті на північ та на південь від лінії екватора. Утворення карти масштабу 1:1000000 Правило подальшого розграфлення листів топографічних карт полягає в постійному поділі листа...
39410. Геодезія, картографія та кадастр 349.5 KB
  070908 Геоінформаційні системи і технології ВСТУП Поряд з теоретичною підготовкою з курсу Організація планування і управління топографогеодезичним виробництвом і інших спеціальних дисциплін в лабораторних і індивідуальних заняттях складається курсовий проект для надбання студентами практичних навиків в плануванні і організації геодезичних робіт. Зміст технічних проектів на виконання робіт регламентується Положенням про складання технічних проектів і програм на виконання загальнодержавних топографогеодезичних і картографічних робіт та...
39411. Знімальні мережі 345.5 KB
  Мензульне і тахеометричне знімання При мензуальному або тахеометричному зніманні пункти планової знімальної мережі є одночасно пунктами висотної знімальної мережі і служать безпосередньо для встановлення на них мензули з кіпрегелем або теодоліта якими здійснюється набір пікетів для створення контурної частини плану і рельєфу місцевості. В цьому випадку пункти знімальної основи закріплюють на місцевості центрами тривалого збереження з таким розрахунком щоб на кожному планшеті було не менше трьох точок при зніманні в масштабі 1:2000...
39412. Проект робіт при оновленні топографічних карт масштабу 1:10000 515 KB
  Київський Державний Університет Будівництва та Архітектури КУРСОВИЙ ПРОЕКТ з дисципліни Організації управління і планування топографогеодезичного виробництва на тему: Проект робіт при оновленні топографічних карт масштабу 1:10000 Виконала:...
39413. Реализация и исследование быстрого алгоритма двумерного вещественного ДПФ по основанию 4 представлением данных в гиперкомплексной алгебре 294.73 KB
  Заданный алгоритм был реализован программно с помощью технологии Microsoft. NET Framework на языке программирования C++. Написанное приложение состоит из двух сборок: библиотеки классов FFT, содержащей все необходимое для вычисления ДПФ по формуле и БПФ.
39414. Реализация и исследование быстрого алгоритма двумерного вещественного ДПФ с расщеплением основания с представлением данных в алгебре кватернионов 308.5 KB
  ЗАДАНИЕ Реализация и исследование быстрого алгоритма двумерного вещественного ДПФ с расщеплением основания с представлением данных в алгебре кватернионов. Текст программы 1 Постановка задачи Нахождение спектра квадратной матрицы размера с помощью быстрого алгоритма двумерного вещественного ДПФ с расщеплением основания с представлением данных в алгебре кватернионов. Тестирование полученной реализации алгоритма ее исследование и сравнение с обычным алгоритмом двумерного ДПФ. Рассмотрим...
39415. РАСЧЕТ И КОНСТРУИРОВАНИЕ ОДНОСТУПЕНЧАТОГО ЗУБЧАТОГО РЕДУКТОРА 4.1 MB
  Проектный расчёт закрытой цилиндрической зубчатой передачи . Геометрический расчет закрытой цилиндрической передачи.5 Проверочный расчет закрытой цилиндрической передачи . Расчет открытой цилиндрической зубчатой передачи .