Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IPU_Praktika_2009.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
4 Мб
Скачать
☆

Организация видеопамяти

В текстовом режиме в видеопамяти может храниться до 4 видеостраниц или экранов с номерами от 0 до 3. Переключение видеостраниц (т.е. вывод их содержимого на экран) осуществляется средствами BIOS. Боль­шинство программ, в то числе и DOS, работают с 0 видеострани­цей. В каждой видеостранице помещается равно один экран в 25 строк по 80 символов в каждой, причем каждый символ отобража­ется двумя байтами - байтом с кодом символа и байтом с атрибу­том символа.

Порядок размещения этих кодов показан на рис. 2.3. Обозначим: адрес первой ячейки - SEGM:0000H, где SEGM-двухбайтовое значение сегмента видеопамяти; С0 и А0 -соответственно код символа в строке 0 и атрибут символа в строке 0 и т.д. Для формирования текстового изображения на экране из видеопамяти последовательно считывается информация, начиная с адреса SEGM:0000H. Считывание осуществляется непрерывно и циклически. Этот процесс называется сканированием памяти. По коду символа из знакогенератора выбирается соответствующая матрица для формирования изображения символа на экране. Первый символ (символ с номером С0 в строке 0) появляется в левом верхнем углу экрана с атрибутом А0. Следующие 2 байта видеопамяти изображают следующий символ справа от него и т. д. Значение смещения (SM) ячейки видеопамяти для любого символа, размещаемого в произвольной позиции (NS-строка, NK-колонка) на экране определяется по формуле:

SM = 2 * (NS * 80 + NK) .

Видеостраница 0

Строка 0

SEGM:0000

C0

A0

C1

A1

. . . . . . . . . . . . . . .

C79

A79

Строка1

C0

A0

C1

A1

. . . . . . . . . . . . . .

C79

A79

. . . . . . . .

. . . . . . . .

Строка 24

C0

A0

C1

A1

С79

A79

Рис.2.3. Размещение информации в видеопамяти в текстовом режиме

Для видеосистем ПК разработан ряд стандартных видеорежимов. При работе в оболочке Far manadger видеосистема по умолчанию устанавливается в текстовый цветной режим № 3 с количеством цветов равным 16 и количеством знакомест 80 х 25. Это режим работы видеоадаптера CGA, для которого видеопамять имеет емкость 16 Кбайт и начинается с адреса В800:0000.

Обычно в программах, работающих напрямую с видеопамятью, регистр DS либо ES микропроцессора загружается значением сегмента видеопамяти, а остальная часть программы работает со смещениями в видеопамяти.

Задание на лабораторную работу

В этой лабораторной работе необходимо написать программу, которая бы прямым доступом в видеопамять реализовала бы эффект "бегущей буквы" по экрану, например, движение буквы по верхней строке экрана.

Алгоритм этой программы может быть, к примеру, следующий:

1. Инициализация ES, DI, CX.

2. Заполнение 0 страницы видеопамяти одинаковыми символами (например, кодом буквы "А" - 128 (80h) и одинаковыми атрибута­ми, причем такими, что бы цвет символа в них совпадал бы с цветом фона, т.е. символ был невидимым. Это легче всего сде­лать с помощью команды STOSW (см. приложение 2.1). Коды некоторых символов приведены в приложении 2.2.

3. У символа на строке 0 и колонке 0 меняем атрибут на лю­бой видимый, делаем задержку, после нее изменяем атрибут у следующего символа в строке и возвращаем старое значение атрибута пре­дыдущему символу, т.е. гасим его. Эти действия продолжаем до 79 колонки 0-й строки.

4. Выход из программы.

Таким образом, просто "зажигая" и "гася" записанные в ви­деопамять байты символов, мы получаем эффект бегущей по экрану буквы.

Ваpианты заданий на лабоpатоpную pаботу :

Ваpиант 1. Движение символа по периметру экрана, начиная с позиции (0,0) слева напpаво.

Ваpиант 2. Движение символа по периметру экрана, начиная с позиции (0,0) сверху вниз.

Ваpиант 3. Движение символа по периметру экрана, начиная с позиции (24,79) справо налево.

Ваpиант 4. Движение символа по периметру экрана, начиная с позиции (24,0) слева напpаво.

Ваpиант 5. Движение символа по периметру прямоугольника с позициями вершин (0,40), (24,40), (24,79), (0,79).

Ваpиант 6. Движение символа по периметру прямоугольника с позициями вершин (10,0), (24,0), (24,50), (10,50).

Ваpиант 7. Движение символа по периметру прямоугольника с позициями вершин (0,30), (15,30), (15,79), (0,79).

Ваpиант 8. Движение символа по периметру прямоугольника с позициями вершин (0,0), (0,40), (20,40), (20,0).

Во время отладки программы необходимо поэкспериментировать с цветом символа и цветом фона.

Приложение 2.1

Некоторые команды языка Ассемблера

Команда STOSB - запомнить байт и STOSW - запомнить слово.

Команды пересылают байт (STOSB) или слово (STOSW) из ре­гистров AL (STOSB) или AX (STOSW) в память по адресу в ES:DI. После пересылки содержимое DI либо увеличивается (при DF=0, ус­тановка по команде CLD) на 1 (STOSB) или на 2 (STOSW), либо уменьшается (при DF=1, STD ) на 1 или 2.

Перед командой STOSB может стоять префикс повторения REP.

Приложение 2.2

Таблица кодов символов ASCII

Коды символов в таблице представлены в шестнадцатиричном коде. В таблице приведены только коды некоторых символов цифр, букв в диапазоне кодов 30Н - 6FН.

Код Символ Код Символ Код Cимвол Код Символ

30 0 40 @ 50 P 60

31 1 41 A 51 Q 61 a

32 2 42 B 52 R 62 b

33 3 43 C 53 S 63 c

34 4 44 D 54 T 64 d

35 5 45 E 55 U 65 e

36 6 46 F 56 V 66 f

37 7 47 G 57 W 67 g

38 8 48 H 58 X 68 h

39 9 49 I 59 Y 69 i

3А : 4A J 5A Z 6A j

3B ; 4B K 5B [ 6B k

3C < 4C L 5C \ 6C l

3D = 4D M 5D ] 6D m

3E > 4E N 5E ^ 6E n

3F ? 4F O 5F _ 6F o

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]