Главная » Ассемблер, Железо » Особенности работы в текстовом режиме

0

При включении IBM-совместимого компьютера видеоконтроллер обычно начинает работу с текстового 16-цветного режима с разрешением 80×25 символов (код режима 03h). В этом режиме для работы с видеопамятью выделено окно размером 32 Кбайт в первом мегабайте адресного пространства процессора (начальный линейный адрес окна B8000h).

Для вывода информации в видеопамять обычно используется дополнительный сегментный регистр данных ES, в который перед началом

S-231

Текстовый режим до сих пор широко применяется, так как для решения многих задач он является вполне достаточным, отличается простотой, надежностью и невысокими требованиями к аппаратуре компьютера. Основные операции в текстовом режиме: вывод символов, управление курсором и загрузка шрифта. Видеопамять в текстовом режиме с точки зрения процессора организована следующим образом: на каждый символ приходится по два байта информации, причем первый байт хранит ASCII-код символа, а второй — цвет символа и цвет фона знакоместа этого символа, как показано на рис. 4.3.

Рис. 4.3. Отображение видеопамяти на экран в текстовом 16-цветном режиме с разрешением 80×25 символов

записи в видеопамять нужно занести число, равное абсолютному начальному адресу буфера, поделенному на 16.

Чтобы вывести символ в заданное знакоместо, нужно помножить номер строки знакоместа на 160 (длину строки в байтах) и прибавить номер столбца знакоместа, после чего записать результат в индексный регистр. Далее в соответствующий байт заносится с помощью косвенной адресации (относительно сегмента ES и избранного индексного регистра) ASCII-код символа. При необходимости значение индексного регистра инкрементируется, и в следующий байт записывается код цвета символа и фона. Формат кодирования цвета символа показан на рис. 4.4.

•      биты 0-3 — цвет символа;

•      биты 4-6 — цвет фона;

•      бит 7 — мерцание (0 — обычный текст, 1 — мигающий текст).

Рис. 4.4. Формат байта описания цвета символа и фона в текстовом режиме

Расшифровка цветовых кодов дана в табл. 4.9 (для фона возможна установка только «темных» цветов с кодами от 0 до 7).

Таблица 4.9. Расшифровка цветовых кодов для текстового режима

Код

Цвет

Код

Цвет

0

Черный

8

Серый

1

Синий

9

Голубой

2

Зеленый

10

Салатный

3

Бирюзовый

11

Светло-бирюзовый

4

Красный

12

Розовый

5

Фиолетовый

13

Светло-фиолетовый

6

Коричневый

14

Желтый

7

Светло-серый

15

Белый

Приведем пример кода программы, в котором осуществляется вывод символа # в 15-й позиции третьей строки экрана, желтым цветом по синему фону.

Загрузить в ES адрес текстовой видеопамяти

mov AX,0B800h

mov ES.AX ;Умножить номер строки на длину строки в байтах

mov AL,160

mov АН.З mul АН ;Прибавить к произведению номер колонки

add АХ,15 ;Переписать полученное смещение ;в индексный регистр

mov ВХ.АХ ;3аписать код символа в видеопамять

mov byte ptr ES:[BX],’#’ ;3аписать код цвета в следующий байт

inc ВХ

mov byte ptr ES:[BX].01Eh

Кроме вывода символов, в текстовом режиме часто применяются еще два вида операций — перемещение курсора и переключение видеостраниц. Управление курсором осуществляется при помощи регистров видеоконтроллера или функций BIOS. Установить размер прямоугольника текстового курсора можно при помощи регистров начальной и конечной линий курсора или при помощи функции Olh прерывания Int 10h. Перемещение курсора по тексту производится путем записи значения смещения курсора относительно начала видеопамяти в регистры старшего и младшего байта адреса курсора. Позиционировать курсор можно и с помощью функции 02h прерывания Int 10h, но координаты курсора при вызове прерывания задаются в виде номера строки и колонки относительно начала видеостраницы. Если необходимо удалить курсор с экрана, то это можно сделать несколькими способами, наиболее универсальным из которых является перемещение курсора за нижнюю границу экрана (на 25-ю строку).

Переключение видеостраниц осуществляется путем записи смещения левого верхнего угла видеостраницы относительно начала видеопамяти в регистры старшего и младшего байт начального адреса. Эту операцию можно также выполнить при помощи функции 05h прерывания Int 10h. Видеоконтроллер в текстовом режиме обеспечивает 8 видеостраниц, но используется обычно только основная (нулевая) страница. Между тем, дополнительные страницы позволяют выдавать сообщения оператору, не разрушая текст на основной странице. Их можно применять для отображения окна подсказки, сообщений об ошибках, вспомогательных меню, а также для вывода дампа памяти и регистров процессора при отладке программ.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии