Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать

1.3.Вывод на экран в текстовом режиме

      1. Средства dos

Подавляющее большинство программ содержат команды вывода данных на экран. Текстовая система DOS обеспечивает ряд функций для вывода данных на экран в текстовом режиме как на консоль терминала. При этом экран представляет собой набор из 25 строк по 80 позиций в каждой (в большинстве случаев). В каждой позиции может быть отображен один из 256 символов кодовой таблицы ASCII (по умолчанию серым цветом на черном фоне). Строки нумеруются с 1-й (верхняя) по 25-ю (нижняя). Вывод осуществляется, начиная с текущей позиции курсора; с выводом каждого нового символа курсор смещается вправо к следующей позиции. Если курсор находится в последней позиции строки, вывод символа приводит к переводу курсора в начало новой строки. Если курсор находится в предпоследней (25-й) строке, то его перевод на следующую строку приводит к сдвигу изображения на экране на строку вверх (прокрутка экрана).

В DOS имеются функции вывода одного символа и строки символов на стандартное устройство вывода STDOUT. Обычно этим устройством является экран компьютера. DOS позволяет изменять стандартное устройство; при этом говорят о перенаправлении вывода данных на новое устройство, которым может быть файл на диске, устройство, подключенное к одному из коммуникационных портов компьютера, пустое устройство NULL или стандартный ввод другой программы. Перенаправление вывода при использовании командной строки указывается с помощью символа ">", разделяющего источник и приемник данных. Например, если написать в командной строке

dir > files.txt

то на экран ничего выдано не будет, а в текущей директории появится файл files.txt, содержащий список файлов текущего каталога.

В дальнейшем предполагается использование экрана в качестве устройства STDOUT.

Функции DOS поддерживают интерпретацию управляющих кодов. Это значит, что при выводе символов с этими кодами на экран вместо непосредственно вывода символов производятся определенные управляющие действия:

07h (BEL) — звуковой сигнал (со стандартного звукового устройства);

08h (BS) — BackSpace (курсор сдвигается на 1 позицию влево);

09h (HT) — горизонтальная табуляция (курсор сдвигается к ближайшей правой границе табуляции);

0Ah = 10 (LF) — перевод строки (курсор сдвигается на одну позицию вниз);

0Dh = 13 (CR) — возврат каретки (курсор сдвигается в начало текущей строки).

Управляющие коды дают возможность выводить на экран форматированный текст.

При перенаправлении вывода интерпретация управляющих кодов может меняться.

Функция 2 выдает один символ, код которого находится в регистре DL, на экран в текущую позицию курсора. Имеется возможность прервать работу функции нажатием комбинации клавиш Ctrl-Break (вызов INT 23h). Выходных параметров нет.

В дальнейшем описание синтаксиса функций будет приводиться в следующем виде:

Функция № — Название.

Ввод: <перечень входных параметров>

Вывод: <перечень выходных параметров>

Для функции 2 оно будет выглядеть так:

Функция DOS 02h — Записать символ в STDOUT с проверкой на Ctrl-Break

Ввод: АН = 02h

DL = ASCII-код символа

Вывод: Нет.

В DOS имеется почти аналогичная функция, не реагирующая на Ctrl-Break:

Функция DOS 06h — Записать символ в STDOUT без проверки на Ctrl-Break

Ввод: АН = 06h

DL = ASCII-код символа (кроме FFh)

Вывод: Нет.

Функция 6 может применяться как для вывода, так и для ввода отдельных символов. Код FFh соответствует режиму ввода, поэтому при выводе его нельзя использовать. Благодаря отсутствию проверки на Ctrl-Break выполнение функции обычным образом прервать нельзя.

Функция DOS 09hЗаписать строку в STDOUT с проверкой на Ctrl-Break

Ввод: АН = 09h

DS:DX = адрес строки, заканчивающейся символом «$» (24h)

Вывод: Нет.

При описании строки необходимо указать ее полный адрес (сегмент:смещение). Особенностью работы данной функции является использование знака "$" в качестве признака конца строки. Ctrl-Break обрабатывается. Ниже приведен пример использования функции:

message db 'Некоторая строка$' ; выводимый текст

[. . .]

mov ah, 9h ; функция DOS 9h вывода строки на экран

mov dx, offset message ; относительный адрес выводимой строки

int 21h ; вызов DOS

Первая команда примера (MOV АН, 9) помещает число 9, то есть номер функции DOS «вывод строки», в регистр АН. Следующая команда помещает в регистр DX смещение (относительный адрес) определенной выше строки MESSAGE относительно начала сегмента, в котором определена строка. Последняя команда (INT 21h) вызывает функцию DOS. (Порядок инициализации входных параметров значения не имеет, но обычно команду, определяющую номер вызываемой функции ставят перед другими для наглядности).

Для вывода строк также может использоваться более общая функция 40h. Она относится к функциям для работы с файлами и позволяет выводить строки в файл или устройство (например, на экран).

Функция DOS 40h Записать строку в файл или устройство

Ввод: АН = 40h

ВХ = 1 для STDOUT или 2 для STDERR

DS:DX = адрес строки

СХ = длина строки

Вывод: CF = 0, если не было ошибок, АХ = число записанных байт

На входе (при вызове) ВХ должен содержать описатель устройства для вывода, пара DS:DX — адрес строки, а счетчик СХ — длину строки. На выходе флаг CF показывает успешность выполненной операции. Если CF = 0 — операция вывода прошла успешно, при этом регистр АХ содержит число выведенных байт. Если CF = 1, произошла ошибка при выводе, при этом АХ содержит код ошибки.

Устройство STDERR, в отличие от STDOUT, всегда соответствует экрану и не позволяет перенаправлять вывод в файл. Оно предназначено для вывода сообщений об ошибках, которые должны в любом случае появляться на экране.

Так как строка в данном случае определяется адресом и длиной, она может содержать все символы таблицы ASCII, хотя управляющие коды при выводе будут обрабатываться.

И наконец, последняя функция DOS вывода на экран, которая здесь рассматривается — недокументированное прерывание 29h.

INT 29hБыстрый вывод символа на экран

Ввод: AL = ASCII-код символа

В большинстве случаев INT 29h просто вызывает функцию BIOS «вывод символа на экран в режиме телетайпа», так что никаких преимуществ, кроме экономии байт при написании как можно более коротких программ, она не имеет. Кроме того, нужно иметь в виду, что использование недокументированных средств данной системы не гарантирует совместимости программы с будущими версиями системы (впрочем, полной гарантии нет в любом случае).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]