![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Базовая система ввода-вывода BIOS. Прерывания BIOS. Области данных и таблицы BIOS
Первые 20 прерываний с номерами от 00Н до 1Fh закреплены за прерываниями, генерируемыми аппаратными средствами либо предназначенными для управления аппаратурой персонального компьютера. ISR этих прерываний вместе с некоторыми данными образуют так называемую базовую систему ввода-вывода или BIOS (Base Input-Output System). Все ISR и данные BIOSa записаны в ПЗУ. ISR, входящие в BIOS, представляют собой самый нижний уровень иерархической структуры программного обеспечения (ПО) управления аппаратными средствами компьютера. Они взаимодействуют с аппаратурой на уровне физических сигналов, портов, заданных адресов и в этой связи являются немобильной частью ПО. При появлении новых аппаратных средств приходится перерабатывать BIOS. Поэтому принято различать версии BIOS по дате разработки. Кроме того, для облегчения дополнений BIOSa новые периферийные устройства снабжаются своей секцией ПЗУ, а основной блок BIOS, при загрузке системы проверяет наличие дополнительных секций и "переключает" на них соответствующие прерывания. Важной особенностью BIOSa является стандартный интерфейс с программой практически для всех персональных компьютеров на базе микропроцессоров семейства Intel. Другими словами, BIOS выполняет роль "экрана" между программами (в частности, программами MS-DOS) и большим разнообразием конкретных аппаратных средств. Например, для вывода символа на экран дисплея независимо от типа дисплея и используемого адаптера необходимо выполнить инструкцию INT 10h с теми же самыми значениями во внутренних регистрах. Все детали интерфейса программы с ВЮ5ом описываются в техническом справочнике BIOS. При выполнении ISR BIOS для хранения данных используется зарезервированная область памяти, называемая областью данных BIOSa. Она начинается с адреса 40:00h и занимает 256 байт до адреса 40:FFh. Здесь располагается ряд таблиц, копируемых из ПЗУ при начальной загрузке системы и уточняемых по результатам тестирования узлов компьютера. При выполнении функций BIOS многие параметры изменяются. Например, корректируется адрес позиции курсора на экране, номер установленного режима адаптера дисплея и т.п. Другими словами, таблицы в области данных BIOSa отражают текущие параметры и состояние аппаратных средств компьютера. Функции библиотеки Turbo С для доступа к обработчикам прерывания
Библиотечные функции Turbo С, как правило, в конечном итоге обращаются к ISR BIOS или MS-DOS. В тех случаях, когда необходимо непосредственное обращение к BIOS или MS-DOS, используются специальные функции, описываемые далее.
# include<dos.h> int int86(int intno, union REGS *inregs, union REGS *outregs) Функция загружает внутренние регистры микропроцессора значениями, записанными в объединении по шаблону union REGS, на начало которого указывает inregs, и выполняет прерывание с номером intno. Значения внутренних регистров на выходе из прерывания записываются в объединении по шаблону union REGS, на начало которого указывает outregs. Описание объединений выполняет точка вызова функции. Шаблон union REGS описан в заголовочном файле <dos.h> и представляет собой объединение двух структур:
Struct WORDREGS { Unsigned int ax, bx, ex, 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; }; Структура WORDREGS используется для доступа к регистрам как двухбайтовым единицам. Структура BYTEREGS позволяет осуществлять доступ к отдельным байтам РОН. Поле структуры flags позволяет перед вызовом задать, а после вызова прочесть значение регистра флагов. Так как многие функции MS-DOS используют флаг переноса для сигнализации об ошибках в программе-обработчике прерывания, в структуре WORDREGS специально выделено поле cflag для значения флага переноса. Все функции int...() возвращают значение регистра АХ на выходе из ISR. Недостатком функции int86() является возможность доступа лишь к ограниченному числу регистров. При выполнении некоторых функций MS-DOS значения задаются и в сегментных регистрах. В таких (правда, достаточно редких) случаях следует использовать более общую функцию int86x():
#include <dos.h> int int86x(int intno, union REGS *inregs, union REGS *outregs, struct SREGS *segregs) В отличие от int86() перед выполнением прерывания intno дополнительно устанавливаются сегментные регистры из структурной переменной по шаблону SREGS. В функцию передается указатель на эту структурную переменную. По возвращении из ISR в структурную переменную по шаблону SREGS дополнительно копируются значения всех сегментных регистров. Если необходимо выполнить обращение к функции MS-DOS (т. е. прерывание 21h с заданным значением АН), можно использовать функцию intdos(), всегда обращающуюся к прерыванию 21h.
#include <dos.h> int intdos(union REGS *inregs, union REGS *outregs) В отличие от ранее рассмотренных функций данной функции не передается номер генерируемого прерывания, так как всегда генерируется прерывание 21h.
Содержание
Лабораторная работа №1 ИССЛЕДОВАНИЕ ВИДЕОСИСТЕМЫ (ТЕКСТОВЫЙ РЕЖИМ). 2 1.1. Общие положения. 2 1.2. Видеорежимы и их краткая характеристика. 3 1.3. Функции консольного вывода. 7 1.4. Управление курсором.. 8 1.5. Работа с текстовой информацией. 9 1.6. Скроллинг. Очистка окна и всего экрана. 10 1.7. Вывод информации в окно экрана средствами Turbo С.. 11 1.8. Предварительная подготовка к работе. 14 1.9. Порядок выполнения работы.. 14 1.10. Содержание отчета. 14 1.11. Контрольные вопросы.. 14 Лабораторная работа №2 ИССЛЕДОВАНИЕ ВИДЕОСИСТЕМЫ (ГРАФИЧЕСКИЙ РЕЖИМ). 15 2.1. Библиотека графики Turbo С. Основные компоненты графической модели.. 15 2.2. Инициализация и закрытие системы графики Turbo С.. 16 2.3. Обработка ошибок системы графики Turbo С.. 19 2.4. Определение и установка графического режима. 20 2.5. Управление цветами и палитрами. 21 2.6. Задание окна экрана. Определение и установка графических координат. 22 2.7. Вывод текста в графическом режиме видеоадаптера. 23 2.8. Вывод графической информации. 27 2.8.1. Параметры и атрибуты графического вывода. 27 2.8.2. Чтение-запись отдельных пикселов. 31 2.8.3. Вывод отрезков прямых линий. 31 2.8.4. Вывод основных графических примитивов. 32 2.9. Предварительная подготовка к работе. 36 2.10. Порядок выполнения работы.. 36 2.11. Содержание отчета. 37 2.12. Контрольные вопросы.. 37 Лабораторная работа N 3 КЛАВИАТУРА IBM PC. ИСПОЛЬЗОВАНИЕ ПРЕРЫВАНИЙ.. 38 3.1. Общие положения. 38 3.2. Аппаратные и программные средства ввода информации с клавиатуры.. 38 3.2.1. Аппаратные средства персонального компьютера для ввода информации с клавиатуры.. 38 3.2.2. Анализ и преобразование скэн-кода. 39 3.2.3. Буфер клавиатуры.. 41 3.3. Ввод информации с клавиатуры средствами MS-DOS. 42 3.3.1. Функции прерывания 21h MS-DOS для ввода информации с клавиатуры.. 42 3.3.2. Функции библиотеки Turbo С.. 43 3.4. Ввод информации с клавиатуры средствами BIOS. 44 3.5. Порядок выполнения работы.. 44 3.6. Содержание отчета. 45 3.7. Контрольные вопросы.. 45 4. Прерывания. 46 4.1. Понятия прерывания и обработчика прерывания. Таблица векторов прерываний. 46 4.2. Аппаратные прерывания. 47 4.3. Немаскируемые прерывания. 49 4.4. Программные прерывания. 50 4.5. Исключительные ситуации. 50 4.6. Базовая система ввода-вывода BIOS. Прерывания BIOS. Области данных и таблицы BIOS. 50 4.7. Функции библиотеки Turbo С для доступа к обработчикам прерывания. 51 Содержание. 53
![]() |