Иллюстрированный самоучитель по SVGA

Вывод текста с использованием поддержки DOS и BIOS

В том случае, когда надо выделить заданным цветом одно слово или фразу, можно использовать подпрограмму, приведенную в примере 5.8. Перед обращением к ней в регистрах ds:si указывается адрес начала строки в оперативной памяти, а в сх – количество символов в строке, В регистре ы помещается код атрибута, ьь не используется.

Пример 5.8. Подпрограмма для вывода символов и атрибутов.

Coiortxt: mov ax, 920h ah = код функции, al = код символа "пробел"
int 10h закрашивание нужного пространства
Outsym: lodsb al = код очередного символа, si = si + 1
mov ah, OEh код функции BIOS
int lOh вывод очередного символа
loop Outsym управление циклом
ret возврат из подпрограммы

В примере 5.8 используется тот факт, что для функции 09 количество повторов указывается в регистре сх, а при ее выполнении позиция курсора не изменяется. При выполнении функции 09 в видеопамять записывается код символа "пробел" вместе с указанным в регистре ы атрибутом. Затем в цикле, имеющем метку Outsym, на то же место выводится текст, который будет окрашен в соответствии с атрибутом, уже записанным в видеопамять.

Позиционирование текста

Для расположения текста в нужном месте экрана можно использовать описанную в предыдущем разделе функцию прерывания int 10h, имеющую код 02. В примере 5.9 приведен фрагмент программы, при выполнении которого курсор будет перемещен в 42-й столбец 12-й строки.

Пример 5.9. Позиционирование курсора с помощью функции BIOS 02.

хог bh, bh; номер страницы О
BJOV dh, 12; номер строки 12
mov dl, 42; номер столбца 42
mov ah, 2; код функции BIOS
int 10h; позиционирование курсора

Если после выполнения команд примера 5.9 в текущую позицию вывести строку commun, описанную в начале раздела, то при работе в режиме VESA I09h она окажется расположенной в центре экрана.

Напомним, что функции, выполняющие вывод текста на экран, вычисляют адрес видеопамяти по тем значениям координат, которые хранятся в одном из слов области данных BIOS (см. Пример 5.3). Фактическое расположение курсора на экране будет соответствовать этим координатам, только если его перемещают функции BIOS.

Использование функции 13h

Эта функция предназначена для вывода строки текста с явным указанием координат ее начала на экране и возможностью раскрашивания текста. В процессе вывода в видеопамять записываются коды символов и атрибутов. Атрибут может быть общим для всех символов строки или индивидуальным для каждого символа. Во втором случае выводимая строка должна содержать не только коды символов, но и их атрибуты. После вывода текста функция может переместить курсор в текущую позицию или не изменять его исходную позицию.

Для реализации перечисленных возможностей перед вызовом функции 13h в регистре ai указывается код режима вывода, который изменяется от 0 до 3:

  • в режимах 0 и 1 код атрибута выбирается из регистра ы;
  • в режимах 2 и 3 коды атрибутов выбираются из выводимой строки;
  • в режимах 1 и 3 курсор перемещается после вывода текста;
  • в режимах 0 и 2 курсор остается на исходной позиции.

Кроме указания режима, перед обращением к BIOS должны быть заполнены следующие регистры:

  • es:bp – адрес начала строки в оперативной памяти;
  • сх – количество символов в строке;
  • bh – номер страницы, который используется при выводе;
  • dh, dl – номера строки и столбца.

При выполнении примера 5.10 строка commun, описанная в начале раздела, выводится в центр экрана. Символы строки будет расположены на синем фоне и окрашены в белый цвет. Курсор будет перемещен в позицию, расположенную после.выведенного текста.

Пример 5.10. Вывод текста с использованием функции BIOS 13h.

push es сохранение содержимого es
push ds помещаем содержимое ris в стек
pop es и выталкиваем его в регистр es
lea bp, commun bp = адрес строки в сегменте ds
mov ex, 48 указываем в сх размер строки
mov bx, IFh bh = 0, Ы = IFh
mov dh, 12 dh = номер исходной строки
mov dl, 42 dl = номер исходного столбца
mov ax, 1301h ah = код функции, al = режим вывода
int iOh BIOS выводит строку
pop es восстанавливаем содержимое es

Из текста примера 5.10 видно, что перед обращением к функции 13h приходится выполнять достаточно много вспомогательных действий. Поэтому при программировании конкретной задачи вам придется выбирать, что лучше – составить собственную подпрограмму или использовать описанную функцию. Автор предпочитает работать с собственными подпрограммами.

Замечание
Функции ОЕЬ и 13h анализируют установленный видеорежим, поэтому их можно использовать для вывода текста при работе во всех графических видеорежимах, соответствующих стандартам IBM (но не стандартам VESA)
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.