АРХІТЕКТУРА ЦЕНТРАЛЬНОГО ПРОЦЕСОРА
ПРОГРАММИРОВАНИЕ ПРЕРЫВАНИЙ Механизм прерываний Прерывание можно рассматривать как некоторое особое событие в системе, требующее моментальной реакции. Например, хорошо спроектированные системы повышенной надежности используют прерывание по аварии в питающей сети для выполнения процедур записи содержимого регистров и оперативной памяти на магнитный носитель, с тем чтобы после восстановления питания можно было продолжить работу с того же места. Возможны самые разнообразные прерывания по самым различным причинам. С каждым прерыванием связывают число, называемое номером прерывания. С каждым номером прерывания связывается то или иное событие. Система умеет распознавать, какое прерывание с каким номером произошло и запускает соответствующую этому номеру процедуру-обработчик прерывания. Программы могут вызывать прерывания с заданным номером. Для этого они используют команду int в разных модификациях. Это так называемые синхронные (программные) прерывания. Программные прерывания являются синхронными, так как вызываются из программы (а она знает, когда вызывает прерывание!). Программные прерывания удобно использовать для организации доступа к отдельным, общим для всех программ модулям. Например, программные модули операционной системы доступны прикладным программам именно через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные программы могут сами устанавливать свои обработчики прерываний для их последующего использования другими или этими же программами. Для этого встраиваемые обработчики прерываний должны быть резидентными в памяти. Аппаратные прерывания вызываются физическими устройствами и приходят асинхронно по отношению к выполняющейся программе. Эти прерывания информируют систему о событиях, связанных с работой устройств, например о том, что завершилась печать символа на принтере и нужно выдать следующий символ, или о том, что требуемый сектор диска уже прочитан и его содержимое доступно программе. Некоторые прерывания (первые пять в порядке номеров) зарезервированы для использования самим центральным процессором для особых событий вроде попытки деления на ноль, переполнения и т.п. Использование прерываний при работе с медленными внешними устройствами позволяет совместить ввод/вывод с обработкой данных в центральном процессоре и в результате повышает общую производительность системы. Обработчики прерываний могут сами вызывать программные прерывания, например, для получения доступа к сервису BIOS или MS-DOS. Составление собственных программ обработки прерываний и замена стандартных обработчиков DOS и BIOS является ответственной и сложной работой. Необходимо учитывать все тонкости работы аппаратуры и взаимодействия программного и аппаратного обеспечения. При отладке возможно разрушение операционной системы с непредсказуемыми последствиями, поэтому надо очень внимательно следить за тем, что делает Ваша программа. Таблица векторов прерываний Для того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адресá от 0000:0000 до 0000:03FF. Таблица состоит из 256 четырехбайтовых элементов – FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В старшем слове вектора прерывания записан адрес сегмента обработчика прерывания, в младшем слове записано смещение. Расположение векторов прерываний в ОП и их связь с обработчиками прерываний BIOS и MS-DOS: Номера прерываний Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004 и т.д. Для программиста, использующего язык Си, таблицу можно описать следующим образом: void (* interrupt_table[256])();Заполнение таблицы происходит частично из BIOS после тестирования аппаратуры и перед началом загрузки операционной системы, частично – при загрузке MS-DOS. DOS может заменить некоторые прерывания BIOS. Назначение некоторых наиболее важных векторов и, соответственно, прерываний:
IRQ0-IRQ15 – это аппаратные прерывания с номерами, соответствующими важности прерываний (их приоритету). Наиважнейшее, обрабатываемое в первую очередь, прерывание имеет номер IRQ0. Вызов прерываний из программ В языке Си есть 4 основных функции для вызова прерываний: int86 – выполняет прерывания процессоров i80x86 (и старших моделей);int86x – выполняет прерывания процессоров i80x86 с указанием значения сегментного регистра;intdos – выполняет прерывание MS-DOS INT21h;intdosx – выполняет прерывание MS-DOS INT21h с указанием значения сегментного регистра. #include <DOS.H> // Для работы с // прерываниями требуется // заголовочный файл dos.h. int int86 (int intno, union REGS *inregs, union REGS *outregs);int int86x (int intno, union REGS *inregs, union REGS *outregs, struct SREGS *segregs);здесь intno – номер прерывания, union REGS *inregs, union REGS *outregs – указатели на объединения (союзы); inregs позволяет заносить значения в регистры, outregs – получать возвращаемые в регистрах значения после выполнения прерывания. union REGS{ struct WORDREGS x; struct BYTEREGS h;};где struct WORDREGS // двухбайтовые // регистры{ unsigned int ax; unsigned int bx; unsigned int cx; unsigned int dx; unsigned int si; unsigned int di; unsigned int cflag;};struct BYTEREGS // однобайтовые // регистры{ unsigned char al, ah; unsigned char bl, bh; unsigned char cl, ch; unsigned char dl, dh;};struct SREGS // сегментные регистры{ unsigned int es; unsigned int cs; unsigned int ss; unsigned int ds;}; Многочисленные функции прерывания INT21h выполняются с помощью функций Си: int intdos (union REGS *inregs, union REGS *outregs);int intdosx (union REGS *inregs, union REGS *outregs, struct SREGS *segregs); Все 4 функции Си возвращают данные, которые остаются после их выполнения в регистре AX.АРХІТЕКТУРА ЦЕНТРАЛЬНОГО ПРОЦЕСОРА Intel8086/88
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (255)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |