- •1. Структура и принципы работы ms-dos
- •1.1. Основные компоненты операционной системы
- •Msdos.Sys
- •Command.Com
- •Config.Sys
- •Autoexec.Bat
- •Wina20.386
- •Драйверы
- •Внешние команды
- •Подготовка системной дискеты
- •Программа fdisk
- •Резидентные программы
- •1.2. Процесс загрузки операционной системы
- •1.3. Состав и общая схема работы ms-dos
- •Файловая система
- •Система управления памятью
- •Система управления программами
- •Система связи с драйверами устройств
- •Система обработки ошибок
- •Служба времени
- •Работа с консолью оператора
- •Другие системы ms-dos
- •1.4. Обзор прерываний bios
- •Определение конфигурации компьютера
- •Определение объема оперативной памяти
- •Работа с видеоконтроллером
- •Выбрать видеорежим (00h)
- •Установить размеры и форму курсора (01h)
- •Свернуть окно (06h, 07h)
- •Работа с клавиатурой
- •Обслуживание дисковой подсистемы
- •Перезагрузка операционной системы
- •Системный сервис для машин класса at
- •1.5. Обзор прерываний ms-dos
- •Получение системной информации
- •Символьный ввод и вывод
- •Работа с файловой системой
- •Управление программами
- •Управление памятью
- •Связь с драйверами устройств
- •Другие функции
- •1.6. Обработка ошибок
- •1.7. Вызов прерываний ms-dos
- •1.8. Программа errcode
- •1.9. Переменная errno
- •1.10. Программа errno
Получение системной информации
Функция 30h возвращает в регистре AX номер версии MS-DOS. Например, для версии MS-DOS 5.00 содержимое регистра AH равно 00h, регистра AL - 05h, для версии 6.2, соответственно, 14h и 06h.
Дополнительно через регистр BH функция возвращает программе ОЕМ-код фирмы-производителя операционной системы (IBM - 00, DEC - 16h, 0FFh - Microsoft и т. п.). В регистрах BL:CX после вызова функции должен находится серийный номер дистрибутива операционной системы, однако в существующих версиях MS-DOS серийный номер всегда равен нулю.
Эта информация может применяться для анализа возможности использования таких средств операционной системы, которые поддерживаются не всеми версиями MS-DOS.
Функции 2Ah и 2Ch позволяют программе узнать системную дату и время.
Есть функции, возвращающие текущий диск и текущий каталог. Номера этих функций - 19h и 47h.
Функция 2Fh позволяет программе узнать адрес текущей области DTA (Disk Transfer Area). Эта область используется, например, при поиске файлов в каталоге.
Важная информация находится в блоке PSP (Program Segment Prefix). Этот блок располагается в памяти непосредственно перед выполняющейся программой. В нем находятся, в частности, параметры, передаваемые программе при запуске. Функция 62h возвращает адрес текущего блока PSP.
Кратко перечислим некоторые другие функции, предназначенные для получения системной информации.
Номер функции |
Описание |
35h |
Позволяет получить значение вектора прерывания с заданным номером |
4Dh |
С помощью этой функции можно узнать код завершения программы |
59h |
Предназначена для получения расширенного кода ошибки |
54h |
Позволяет определить, используется ли проверка при записи на диск |
33h |
Позволяет узнать, может ли пользователь прервать работу программы при помощи комбинации клавиш <Ctrl+Break> |
Символьный ввод и вывод
Эти функции применяются для работы со всеми символьными устройствами, такими как консоль, принтер, последовательный порт. Они называются функциями стандартного ввода/вывода.
Ввод и вывод программы, использующей стандартные функции, может быть переназначен, например, в текстовый файл.
Приведем обзор основных функций стандартного символьного ввода/вывод в виде таблицы.
Код |
Назначение |
Описание |
01h |
Ввод с клавиатуры |
Выполняется ввод символа с устройства стандартного ввода, а также эхо-вывод символа на стандартное устройство вывода. Пользователь может прервать работу программы при помощи комбинации клавиш <Ctrl+C> и <Ctrl+Break> |
06h |
Ввод с клавиатуры без ожидания |
Ввод символа с устройства стандартного ввода без ожидания, а также вывод его на устройство стандартного вывода.Комбинации клавиш <Ctrl+C> и <Ctrl+Break> не проверяются |
07h |
Прямой ввод с клавиатуры |
Ввод символа с клавиатуры.Комбинации клавиш <Ctrl+C> и <Ctrl+Break> не проверяются |
08h |
Ввод с клавиатуры |
Аналогично функции 07h, но проверяются комбинации клавиш <Ctrl+C> и <Ctrl+Break> |
02h |
Отобразить символ |
Отображаемый символ посылается на стандартное устройство вывода |
09h |
Отобразить строку |
На стандартное устройство вывода символов посылается строка, в конце которой находится символ "$" |
03h |
Ввод из последовательного порта |
Вводится символ из последовательного порта |
04h |
Вывод в последовательный порт |
Выводится символ на последовательный порт |
05h |
Вывод на принтер |
Выводится символ на принтер |
Из таблицы видно, что для ввода с клавиатуры можно использовать несколько функций. Ввод без эхо-вывода удобен для такой информации, как пароли. Если логика работы программы не допускает прерывания со стороны пользователя, нужно использовать функции, которые не проверяют комбинации клавиш <Ctrl+C> и <Ctrl+Break>.
Для вывода строки символов можно использовать функцию 09h, но отображаемая строка не может содержать символ "$", так как этот символ используется в качестве признака конца строки.