Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ЗЫКОВ.doc
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
678 Кб
Скачать

6 Вывод символа без атрибутов

9 Вывод строки символов

Функции 9 и A прерывания 10H вообще не интерпретируют управ-

ляющие символы. Функции DOS интерпретируют управляющие коды,

приведенные в следующей таблице. Функция E прерывания 10H интерп-

ретирует все коды таблицы, кроме ASCII 9.

ASCII 7 звонок

ASCII 8 возврат на шаг (BackSpace)

ASCII 9 табуляция

ASCII 10 перевод строки

ASCII 13 возврат каретки

Первые две функции прерывания 10H не передвигают курсор после

вывода символа. Функция 9 этого прерывания выводит на экран с

указанием атрибутов, а функция A - без указания, при этом сохра-

няется текущее значение байта атрибутов для этого символа. AL

должен содержать выводимый символ, а BL - атрибуты. Номер страни-

цы дисплея содержится в BH. Он должен указываться даже для монох-

ромного дисплея, который имеет только одну страницу памяти дисп-

лея. В этом случае должна быть установлена первая страница, кото-

рой соответствует номер 0. Особое свойство этих двух функций BIOS

состоит в том, что символ выводится такое число раз, какое указа-

но в CX. Обычно указывают CX равным 1, но эти функции могут легко

выводить целые строки символов, если указать большее значение

счетчика - полезное свойство при создании рамок. Отметим, что

даже если выводится много символов, то позиция курсора не изме-

няется. Когда строка выводимых символов займет все свободное

пространство экрана справа-вниз от курсора, то вывод будет пере-

несен в первые позиции экрана.

;---вывод символа в негативе

MOV AH,9 ;функция записи с атрибутами

MOV AL,THE_CHARACTER ;символ в AL

MOV BL,112 ;атрибуты в BL

MOV BH,0 ;страница 1

MOV CX,1 ;вывести один раз

INT 10H

Вместо того, чтобы постоянно восстанавливать значение счетчика в

CX прерывание BIOS предоставляет также телетайпную процедуру,

которая больше подходит для вывода строки символов. Она выпол-

няется функцией E. Она готовится так же, как и функция A, но не

надо засылать значение в CX. Строка выводится просто за счет

изменения символа в AL и повторного вызова прерывания. При ис-

пользовании в графическом режиме в BL устанавливается цвет палет-

ты, в противном случае сохраняется старый атрибут.

;---вывод строки с помощью телетайпной процедуры

MOV AH,0EH ;номер функции

MOV BH,0 ;номер страницы

LEA BX,STRING ;BX указывает на строку

NEXT_CHAR: MOV AL,[BX] ;берем символ в AL

CMP AL,'$' ;проверка на конец строки

JE ALL_DONE ;если да, то выход

Int 10h ;вывод строки

Inc bx ;переходим к следующему символу

JMP SHORT NEXT_CHAR ;повторяем процедуру

ALL_DONE:

Прерывание DOS 21H как правило предоставляет более полезные

процедуры, поскольку они перемещают курсор и приводят к сдвигу

экрана при достижении нижней строки, а также интерпретируют неко-

торые из обычных управляющих кодов. Функции DOS выводят на стра-

ницу, которая должна быть установлена функцией 5 прерывания 10H

[4.5.3]. Предоставляются две функции для вывода символа, с номе-

рами 2 и 6. Первая из них распознает Ctrl-Break [3.2.8], а вторая

- нет. (Когда с клавиатуры вводится Ctrl-Break, то процедура

обработки Ctrl-Break не выполняется до тех пор, пока не исполь-

зуется функция, которая распознает его наличие).

Обе функции выводят белые символы на черном фоне, до тех пор,

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

устройства ANSI.SYS [4.1.3]. В общем необходимо только поместить

символ в DL, номер функции в AH и вызвать прерывание 21H. Однако

функция 6 особенная в том смысле, что она имеет второе назначение

в качестве функции ввода с клавиатуры. Она выступает в этой роли

только если в DL помещен код FF [3.1.5]. Во всех остальных слу-

чаях она выводит на экран содержимое DL. В следующем примере

функция 6 поочередно принимает и печатает символ (в [3.1.4] об-

суждается процедура, которая комбинирует оба этих свойства).

MOV AH,6 ;номер функции

NEXT: MOV DL,0FFH ;при этом значении принимаем ввод