Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

116

Возвращаемые значения:

Ничего не возвращается.

6.2.2. Прямая запись в видеопамять

Существует возможность выводить текст на экран без использования функций DOS и BIOS. Это достигается с помощью прямого обращения к видеопамяти компьютера.

Для текстовых режимов стандартно отводится область памяти, начинающаяся с абсолютного адреса 0B800h:0000h и заканчивающаяся 0B800h:0FFFFh. Любая информация, записанная в эту область, сразу пересылается в память видеоадаптера.

Под каждый символ отводится 2 байта: младший байт содержит ASCII-код отображаемого символа, старший байт — атрибут символа. Таким образом, каждый символ отстоит друг от друга на расстоянии 2 байта.

Атрибут состоит из двух частей: цвета фона символа и цвета самого символа. Коды атрибутов (цветов) приведены в табл. 6.1. Например, атрибут 034h означает, что цвет фона символа бирюзовый (3h), а цвет самого символа красный (4h).

Первые восемьдесят 2-байтовых полей соответствуют первой строке экрана, вторые 80 полей – второй строке и т. д. То есть переход на следующую строку экрана определяется не управляющими кодами возврата каретки и перевода строки, а размещением кодов символов в другом месте видеопамяти, в полях, соответствующих следующей строке. При прямой записи в видеопамять, в обход программ DOS и BIOS, все управляющие коды ASCII теряют свои управляющие функции и просто отображаются в виде соответствующих им символов.

В листинге 6.2 показана программа, которая выводит в центре экрана символ '+' прямым обращением к видеопамяти компьютера. Но таким способом неудобно выводить большие строки, поэтому в листинге 6.3 приведен другой вариант, который выводит разноцветное слово "Ivan" в верхнем левом углу с использованием инструкции rep movsb.

 

 

 

Таблица 6.1. Коды цветов

 

 

 

 

Код

Цвет

Код

Цвет

 

 

 

 

0h

Черный

8h

Серый

 

 

 

 

1h

Синий

9h

Голубой

 

 

 

 

2h

Зеленый

0Ah

Салатовый

 

 

 

 

3h

Бирюзовый

0Bh

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

 

 

 

 

4h

Красный

0Ch

Розовый

 

 

 

 

5h

Фиолетовый

0Dh

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

 

 

 

 

6h

Коричневый

0Eh

Желтый

 

 

 

 

7h

Белый

0Fh

Ярко-белый

 

 

 

 

Листинг 6.2. Вывод символа в центре экрана прямым обращением к видеопамяти

(outchar1.asm)

.model tiny

.code

org 100h

start:

mov

ax,0003h

; видеорежим 3 (очистка экрана)

int

10h

 

mov

ax,0B800h

; сегментный адрес видеопамяти

mov

es,ax