Вывод на экран средствами DOS

DOS предоставляет следующие возможности вывода текстовой информации на экран:

-обращение к экрану как к файлу, с помощью прерывания DOS Int 21h с

функцией 40h;

-использование группы функций DOS из диапазона l...Ch (прерывание Int

21h) , реализующих посимвольный вывод, а также вывод строк.

Вывод на экран средствами файловой системы (Int 21h, функция 40h) осуществляется точно так же, как и запись в файл. Используются предопределенные дескрипторы 1 или 2, закрепленные за стандартными устройствами вывода и ошибки, соответственно (по умолчанию - экраном). Число выводимых символов указывается в регистре СХ, а адрес выводимой строки - в регистре DX. Коды 08h (забой), 0Ah (перевод строки), 0Dh (возврат каретки) и некоторые другие рассматриваются, как управляющие и приводят к выполнению соответствующих им действий. Число выводимых символов передается через регистр СХ, однако, если в строке встречается <Ctrl>/Z (код 26), вывод прекращается. Дескриптор 1, закрепленный за стандартным устройством вывода, обеспечивает перенаправление вывода. Пусть, например, программа FILTXT содержит строки вывода через дескриптор 1. При запуске программы командой

FILTXT

ее вывод появится на экране, однако команда

FILTXT>MYFILE.DOC

приведет к автоматическому образованию файла MYFILE.DOC и записи в него всего вывода программы (на экран ничего не поступит); команда

FILTXT » MYFILE.DOC

направит вывод программы FILTXT в тот же файл MYFILE.DOC, при этом новая запись добавится к уже сущест­вующим, увеличив тем самым длину файла MYFILE.TXT.

Предопределенный дескриптор 2 (стандартная ошибка) всегда связан с экраном и не может быть перенаправлен.

Если требуется исключить для каких-то операторов вывода или для всей программы в целом возможность перенаправле­ния, то, помимо использования дескриптора стандартной ошиб­ки, можно открыть экран, как файл (с именем CON) функци­ей 3Dh, получить выделенный системой дескриптор, а затем использовать его в операциях вывода 40h:

;Поля данных

screen db 'CON',0 ;Имя устройства

handlscr dw 0 ;Новый дескриптор

;Откроем новый дескриптор

mov АН,3Dh ;Функция открытия

mov AL.1 ;Доступ для записи

mov DX,off set screen ;Адрес имени устройства

int Blh

mov handlscr,AX ;Получили дескриптор

Второй способ вывода на экран текстовой информации реализуется с помощью трех функций прерывания Int 21h:

02h - вывод символа;

06h - прямой ввод-вывод;

09h - вывод строки.

Функция 09h широко используется в системных программах (например, в драйверах) для вывода на экран информационных и диагностических сообщений. Перед вызовом прерывания адрес сообщения засылается в регистр DX; заканчивается сообщение символом "$". В сообщение могут быть включены управляющие коды (возврата каретки, перевода строки, забоя и др.), а также Esc-последовательности. Так же, как и при выводе через дескриптор 1 (функция 40h), вывод функцией 09h поступает на стандартное устройство вывода и при запуске программы может быть перенаправлен на другие внешние устройства с помощью операторов перенаправления.

Если в процессе вывода сообщения на экран с клавиатуры поступает код <Ctrl>/C, срабатывает стандартная процедура обработки этого прерывания и вывод завершается (как и вся программа в целом). Для надежной обработки прерывания по <Ctrl>/C следует включать режим BREAK (командой DOS BREAK ON).

Функция 02h вызывает передачу на экран (точнее - на стандартное устройство вывода) одного символа, помещаемого в регистр DL. Для вывода строки функцию следует использовать в цикле. В остальном она не отличается от функции 09h (перенаправление, обработка управляющих кодов, реакция на ввод с клавиатуры <Ctrl>/C).

Функция 06h (прямой ввод-вывод через консоль) используется в тех случаях, когда надо исключить стандартную реакцию системы на ввод с клавиатуры <Ctrl>/C. В остальном она действует так же, как функции 09h и 02h, однако обеспечивает не только вывод, но ввод. В случае вывода код ASCII передаваемого символа засылается в регистр DL; при вводе DL=FFh.

Средства DOS "в чистом виде" позволяют выводить на экран только черно-белый текст; возможности позиционирования текста на экране ограничиваются использованием символов возврата каретки (0Dh) и перевода строки (0Ah). Для вывода на экран средствами DOS цветных изображений следует использовать управляющие Esc-последовательности, реализуемые драйвером ANSI.SYS.