- •Системное программирование
- •Контрольные вопросы
- •2. Программная модель микропроцессора 8086
- •2.1. Представление информации
- •2.2. Регистры микропроцессора
- •2.3. Формат машинной команды
- •2.4. Способы задания операндов команды
- •Контрольные вопросы
- •3. Основные понятия языка ассемблера
- •3.1. Предложения
- •3.2. Директивы определения данных
- •3.3. Выражения
- •Контрольные вопросы
- •4. Сегментированная модель памяти
- •4.1. Сегментирование адресов
- •4.2. Директивы сегментации
- •4.3. Общая структура программы
- •4.4. Модели памяти
- •Контрольные вопросы
- •5. Основные группы команд
- •5.1. Соглашению по описанию команд
- •5.2. Команды пересылки данных
- •5.3. Арифметические команды
- •5.4. Логические команды
- •5.5. Команды переходов
- •5.6. Команды организации циклов
- •5.7. Команды обработки строк
- •5.8. Стековые команды
- •5.9. Команды ввода-вывода
- •5.10. Команды прерываний
- •5.11. Команды управления микропроцессором
- •Контрольные вопросы
- •6. Подпрограммы
- •Контрольные вопросы
- •7. Разработка одномодульной программы
- •7.1. Трансляция и компоновка программы
- •7.2. Отладка программы
- •Контрольные вопросы
- •8. Разработка многомодульных программ
- •8.1. Принципы разработки модулей
- •8.2. Расширенное применение директивы сегментации
- •9. Упражнения
- •Контрольные вопросы
- •Программирование микропроцессорных устройств
- •10. Программирование системного таймера
- •10.1. Описание таймера-счетчика 8254
- •10.2. Режимы работы таймера
- •10.3. Структура регистров таймера
- •10.4. Упражнения
- •Контрольные вопросы
- •11. Программирование контроллера прерываний
- •11.1. Механизм обработки прерываний
- •11.2. Типы прерываний
- •11.3. Приоритеты прерываний
- •11.4. Контроллер прерываний 8259
- •11.5. Идентификация прерываний
- •11.6. Прерывания bios и ms-dos
- •11.7. Упражнения
- •Контрольные вопросы
- •12. Программирование параллельного порта
- •12.1. Интерфейс Centronics
- •12.2. Работа с параллельным портом на низком уровне
- •12.3. Стандартные средства работы с параллельным портом
- •12.4. Упражнения
- •Контрольные вопросы
- •13. Программирование последовательного порта
- •13.1. Основы последовательной передачи данных
- •13.2. Последовательный интерфейс rs-232c
- •13.3. Универсальный асинхронный приемо-передатчик 8250
- •13.4. Порты асинхронного адаптера
- •13.5. Стандартные средства программирования последовательного порта
- •13.6. Упражнения
- •Контрольные вопросы
- •Литература
- •141 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета
11.6. Прерывания bios и ms-dos
Системное программное обеспечение аппаратных компонент ПК находится в ПЗУ, расположенной на системной плате и носит название BIOS (Basic Input-Output System, базовая система ввода-вывода).
Система BIOS выполняет процедуру самопроверки POST, которая активизируется при включении питания или при системном сбросе, проверяет аппаратуру системы и инициализирует для нормальной работы некоторые узлы, а также содержит ряд системных сервисов, например, определения объема памяти, конфигурации внешних устройств, установки даты и времени суток.
Кроме того, BIOS управляет всеми прерываниями. Система BIOS строит таблицу прерываний (инициализирует векторы прерываний), выполняет прерывание INT 11h (получение списка присоединенного оборудования) и INT 12h (запрос размера физической памяти). Подпрограммы обработки прерываний находятся в модуле ПЗУ, в том же, что и процедура POST.
Среди прерываний BIOS для пользователя могут быть полезны функции прерывания 10h (вывод информации на дисплей), 13h (дисковые операции), 14h (обмен данными через последовательный порт), 16h (обмен данными с клавиатурой), 17h (функции вывода на печать), 1Ah (функции времени) и ряд других.
Прерывания в диапазоне от 20h до 27h закреплены за функциями операционной системы MS-DOS (табл. 93). Эти прерывания проще в использовании и менее машинно-зависимы, чем их BIOS аналоги. Например, многие функции прерывания INT 21h не имеют собственной реализации, а только транслируются в один или несколько вызовов функций BIOS. Дополнительную информацию по применению функций можно получить в [2,4,6].
Табл. 93. Прерывания операционной системы MS-DOS.
Номер |
Описание прерывания |
20 |
Завершение программы и передача управления операционной системе. |
21 |
Вызовы функций операционной системы MS-DOS. Вызов функции в соответствии с кодом в регистре AH. |
22 |
Адрес подпрограммы обработки завершения задачи. |
23 |
Адрес выхода при обработке комбинации Ctrl-Break. |
24 |
Адрес подпрограммы реакции на критическую ошибку. |
25 |
Абсолютное чтение с диска. |
26 |
Абсолютная запись на диск. |
27 |
Завершение программы с сохранением ее в памяти (резидентная программа). |
28-3F |
Зарезервированы для MS-DOS. |
Многие из функций MS-DOS осуществляют проверку своего выполнения. При успешном выполнении функции флаг CF равен 0, и 1 в случае возникновения ошибки. В последнем случае код ошибки возвращается в регистр AX. В табл. 94 описаны значения кодов ошибок.
Табл. 94. Коды ошибок при вызовах функций MS-DOS.
Код |
Значение |
1 |
Ошибочный номер функции. |
2 |
Файл не найден. |
3 |
Путь к файлу не найден. |
4 |
Слишком много открытых файлов (не осталось свободных логических номеров). |
5 |
Доступ не разрешен. |
6 |
Ошибочный логический номер файла. |
7 |
Управляющий блок памяти разрушен. |
8 |
Недостаточно памяти. |
9 |
Ошибочный адрес блока памяти. |
10 |
Ошибочная аппаратная среда. |
11 |
Ошибочный формат. |
12 |
Ошибочный код доступа. |
13 |
Ошибочные данные. |
14 |
Ошибочное имя дисковода. |
15 |
Попытка удалить текущую директорию. |
16 |
Неверное устройство. |
17 |
Превышен предел числа файлов. |
Функции прерывания 21h предоставляют множество возможностей по взаимодействию с клавиатурой, дисплеем, дисковой системой, последовательным адаптером. Наиболее полезные функции перечислены в табл. 95.
Табл. 95. Функции прерывания 21h.
Регистр |
Операция |
Дополнительные входные регистры |
Выходные регистры |
Функции по работе с клавиатурой | |||
1 |
Ожидание набора символа на клавиатуре и последующее изображение его на экране (с проверкой на Ctrl-Break) |
Не используются |
AL = символ |
6 |
Чтение символа с клавиатуры (без проверки на Ctrl-Break) |
DL = 0FFh |
AL = очередной символ, если буфер клавиатуры не пуст; AL = 0, если буфер клавиатуры пуст |
7 |
Ожидание набора символа на клавиатуре без последующего его изображения (без проверки на Ctrl-Break) |
Не используются |
AL = символ |
8 |
То же, что функция 7, но с проверкой на Ctrl-Break |
Не используются |
AL = символ |
A |
Чтение клавиатурной строки в буфер |
DS:DX = Адрес буфера Первый байт буфера = размер буфера |
Второй байт буфера = число фактически прочитанных символов |
B |
Чтение состояния клавиатуры |
Не используются |
AL = 0FFh, если клавиатурная строка пуста, AL = 0, если она содержит хотя бы один символ |
C |
Очистка буфера клавиатуры и вызов функции для работы с клавиатурой |
AL = номер функции для работы с клавиатурой |
В соответствии с вызываемой функцией |
Функции по работе с дисплеем | |||
2 |
Изображение символа (с проверкой на Ctrl-Break) |
DL = символ |
Не используются |
5 |
Печать символа |
DL = символ |
Не используются |
6 |
Изображение символа (без проверки на Ctrl-Break) |
DL = символ |
Не используются |
9 |
Изображение строки |
DS:DX = адрес строки, которая должна заканчиваться символом $ |
Не используются |
Функции для обмена данными с асинхронным последовательным портом | |||
3 |
Ожидание ввода символа через асинхронное последовательное устройство |
Не используются |
AL = символ |
4 |
Вывод символа на асинхронное последовательное устройство |
DL = символ |
Не используются |
Функции управления файлами | |||
D |
Сброс текущего дисковода в начальное состояние |
Не используются |
Не используются |
E |
Задание нового текущего дисковода |
DL = номер дисковода (0 = A, 1 = B, 2 = C) |
AL = число дисководов (2 в случае одного дисковода) |
2E |
Задание режима проверки |
DL = 0 AL = 0 для отключения проверки AL = 1 для включения проверки |
Не используются |
Функции по работе с датами и временем | |||
2A |
Чтение системной даты |
Не используются |
CX = год (1980-2099) DH = месяц (1-12) DL = день (1-31) |
2B |
Установка системной даты |
CX, DX = дата в том же формате, что и для функции 2A |
AL = 0, если дата правильная AL = FF, если дата ошибочная |
2C |
Чтение системного времени |
Не используются |
CH = часы (0-23) CL = минуты (0-59) DH = секунды (0-59) DL = сотые доли секунды (0-99) |
2D |
Установка системного времени |
CX, DX = время в том же формате, что и для функции 2C |
AL = 0, если время правильное AL = FF, если время ошибочное |
Функции по работе с векторами прерываний | |||
25 |
Установка вектора прерывания |
DS:DX = новое значение вектора |
Не используются |
35 |
Чтение вектора прерывания |
AL = номер (тип) прерывания |
ES:BX = значение вектора |
Функции по работе с директориями | |||
39 |
Создание директории (команда MKDIR) |
DS:DX = адрес ASCIIZ-строки с именем директории |
Возможен код ошибки 3 или 5 |
3A |
Удаление директории (команда RMDIR) |
DS:DX = адрес ASCIIZ-строки с именем директории |
Возможен код ошибки 3 |
3B |
Смена текущей директории (команда CHDIR) |
DS:DX = адрес ASCIIZ-строки с именем новой директории |
|
47 |
Чтение имени текущей директории |
DL = номер дисковода (0 = текущий, 1 = А и т.д.) DS:DI = адрес буфера размером 64 байта |
DS:SI = адрес ASCIIZ-строки Возможен код ошибки 15 |
Функции расширенного управления файлами | |||
36 |
Получение сведений о свободном месте на диске |
DL = номер дисковода (0 = текущий, 1 = А и т.д.) |
AX = 0FFFFh, если обнаружена ошибка AX = число секторов в кластере BX = число свободных кластеров DX = общее число кластеров CX = число байтов в секторе |
3C |
Создание файла |
DS:DX = адрес ASCIIZ-строки CX = атрибут файла |
AX = логический номер файла Возможен код ошибки 3, 4 или 5 |
3D |
Открытие файла |
DS:DX = адрес ASCIIZ-строки AL = 0 при открытии для чтения AL = 1 при открытии для записи AL = 2 при открытии для чтения и записи |
AX = логический номер файла Возможен код ошибки 2, 4, 5 или 12 |
3E |
Закрытие логического номера файла |
BX = логический номер файла |
Возможен код ошибки 6 |
3F |
Чтение файла или ввод данных с устройства |
BX = логический номер файла CX = число считываемых байтов DS:DX = адрес буфера |
AX = число фактически считанных байтов AX = 0 при попытке чтения за концом файла Возможен код ошибки 5 или 6 |
40 |
Запись в файл или вывод данных на устройство |
BX = логический номер файла CX = число записываемых байтов DS:DX = адрес буфера |
AX = число фактически записанных байтов Возможен код ошибки 5 или 6 |
41 |
Удаление файла |
DS:DX = адрес ASCIIZ-строки |
Возможен код ошибки 2 или 5 |
43 |
Чтение атрибута файла |
AL = 0 DS:DX = адрес ASCIIZ-строки с именем файла |
CX = атрибут Возможен код ошибки 2 или 5 |
43 |
Установка нового атрибута файла |
AL = 1 DS:DX = адрес ASCIIZ-строки с именем файла CX = атрибут |
Возможен код ошибки 2 или 5 |
54 |
Чтение режима проверки |
Не используются |
AL = 0, если проверка выключена AL = 1, если проверка включена |
56 |
Переименование файла |
DS:DX = адрес ASCIIZ-строки со старым именем файла ES:DI = адрес ASCIIZ-строки с новым именем файла |
Возможен код ошибки 3, 5 или 17 |