1
Лабораторная работа по курсу "Организация ЭВМ и систем"
Программирование видеопамяти
Цель работы: изучить режимы адресации операндов; познакомиться с прямым программированием видеопамяти.
Видеопамять компьютера делится на текстовую и графическую. Текстовая видеопамять включает 8 видеостраниц и занимает в адресном пространстве компьютера 32 Кбайт, начиная с адреса B8000h (для цветных мониторов). Каждая страница занимает 4 Кбайт. При включении компьютера активной становится видеостраница 0. Смена видеостраниц осуществляется вызовом функции 05h прерывания 10h BIOS.
На рис. 1 показана организация текстовой видеопамяти. Любой код, записываемый в видеопамять, сразу же отображается на экране в виде цветного символа на одном из знакомест. Каждый символ занимает в видеопамяти поле из 2 байт. Младшие (четные) байты всех полей отводятся под коды ASCII отображаемых символов, старшие (нечетные) байты - под их атрибуты (рис. 1, а).
Адрес: B800h:00 |
B800h:01 |
B800h:02 |
B800h:03 |
Номер |
7 |
6 5 4 |
3 2 |
1 0 |
||||||||||||||
|
|
|
|
|
|
бита: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Символ |
Атрибут |
|
Символ |
Атрибут |
|
B |
|
|
back |
|
|
|
|
H |
|
|
|
text |
|
|
|
|
Знакоместо 0 |
Знакоместо 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
(а) |
|
|
|
|
|
|
|
|
|
|
(б) |
|
|
|
|
|
|
|||
|
Рис. 1. Текстовая видеопамять: а) логическая организация; б) формат байта атрибутов |
|
|
|
|
|
|
Цвет символа и фона в байте атрибутов задается группами из трех разрядов: для фона и для символа (обозначены как back и text на рис. 1, б). Каждый из разрядов связан с одним из трех основных цветов: красным, зеленым, синим. Смешение основных цветов дает 8 различных комбинаций (цветов). Третий разряд байта атрибутов (обозначен буквой H) управляет интенсивностью цвета. Этот бит относится только к цвету символа и с тремя другими разрядами
обеспечивает 16 цветов для символа: |
|
|
|
0h |
Черный |
8h |
Серый |
1h |
Синий |
9h |
Голубой |
2h |
Зеленый |
0Ah |
Салатовый |
3h |
Бирюзовый |
0Bh |
Светло-бирюзовый |
4h |
Красный |
0Ch |
Розовый |
5h |
Фиолетовый |
0Dh |
Светло-фиолетовый |
6h |
Коричневый |
0Eh |
Желтый |
7h |
Белый |
0Fh |
Ярко-белый |
Самый старший разряд (обозначен буквой B) управляет мерцанием символа. Если в нем установлена единица, то символ будет мигать с частотой около 2 Гц.
Двухбайтовые коды символов записываются в видеопамять в том порядке, в каком они должны появляться на экране: первые 80 2-байтовых полей соответствуют первой строке экра-
на, вторые 80 полей - второй строке и т.д. При формировании изображений непосредственно
в видеопамяти все управляющие коды ASCII теряют свои управляющие функции и отображаются в виде соответствующих им символов. Переход на следующую строку экрана определяется размещением символов в позициях видеопамяти, соответствующих этой строке.
Для того чтобы из программы получить доступ к видеопамяти, надо занести в один из сегментных регистров данных сегментный адрес 8B00h. После этого, задавая те или иные сме-
2
щения, можно выполнять запись в любые места видеопамяти. Пример. Прямая запись в видеопамять. Фрагмент программы
mov |
AX,0B800h |
; (1)Сегментный адрес видеопамяти |
mov |
ES,AX |
; (2)Загрузить его в ES |
mov |
BX,0 |
; (3)Смещение к началу экрана |
mov |
SI,80*2*12+40*2 |
; (4)Смещение к центру экрана |
mov |
DI,80*2*25-2 |
; (5)Смещение к началу последней строки |
mov |
word ptr ES:[BX],3130h |
; (6)Вывод ноля |
mov |
word ptr ES:[SI],0F01h |
; (7)Вывод рожицы |
mov |
word ptr ES:[DI],0E40Fh |
; (8)Вывод звездочки |
mov |
AH,01h |
; (9)Приостановить программу |
int |
21h |
; (10) для наблюдения результата |
1.Порядок выполнения работы
1.Напишите программу number.asm: выведите в середину 12-ой строки номер своего компьютера желтыми буквами на красном фоне, установив бит мерцания.
2.При помощи отладчика определите и запишите в отчет, какому цвету фона и символа соответствует байт атрибутов по умолчанию, устанавливаемый при загрузке компьютера.
3.Выполните Пример. Какие режимы адресации использованы в программе? Запишите их в отчет с указанием номеров строк.
4.Выпишите код команды 6 и расшифруйте его в отчете. Замените регистр ES на DS. Как изменился код команды?
5.Замените в команде 6 сегмент ES на FS или GS. Поясните причину появления сообщения об ошибке. Как ее исправить?
6.Модифицируйте код Примера так, чтобы использовать другие режимы адресации.
7.*Напишите программу, которая при нажатии клавиши (в цикле) меняет байт атрибутов для строки выводимого текста.
2.Требования к отчету
1.При подготовке к лабораторной работе (дома) запишите в конспект: формат байта атрибутов, коды цветов в 16-цветной палитре, законченный текст программы number.asm для своего варианта с комментариями. Законченная программа включает правильный вход в программу и выход из программы в ОС (например, по образцу лабораторной работы №2).
2.При выполнении работы занесите в отчет результаты выполнения экспериментов и ответы на вопросы из пп. 2-6 "Порядка выполнения".
3.Студент должен знать ответы на следующие вопросы:
Вопросы
1.Какие режимы адресации операндов существуют в процессоре Pentium?
2.В чем разница между режимами адресации для 16-ти и 32-разрядных процессоров Intel?
3.Можно ли в реальном режиме использовать 32-разрядные регистры а) для хранения операндов; б) для адресации операндов?
4.Можно ли и почему в Примере использовать вместо регистра ES регистр DS?
5.Можно ли в Примере не задавать в директиве assume сегментный регистр для сегмента данных? Почему?
Источники информации
1. Рудаков П.И., Финогенов К.Г. Язык ассемблера: уроки программирования. - М.: ДИАЛОГ-
МИФИ, 2001. (Статьи 10, 24)
---------------------------------------------------------------------------------------------------
© Лабораторная работа подготовлена Л.В. Илюшечкиной.
* Необязательное задание. Оценивается дополнительными пунктами при условии, что студент полностью выполнил остальные задания.