6.2. Текстовый режим

Текстовый режим установлен по умолчанию. В текстовом режиме содержимое экрана отображается в памяти ЭВМ, начиная с адреса B8000h. Каждой позиции на экране соответствует два байта в памяти, как это показано на рисунке 6.2. Первый из них, младший байт, содержит код символа. Во втором записаны атрибуты позиции.

Атрибуты позиции содержат цвет символа, отображенного в данной позиции, и цвет фона в этой позиции. Атрибуты состоят из разрядов:

bl

r

g

b

I

R

G

B

где IRGB – код цвета символа, описанный в предыдущем параграфе, а rgb – код цвета фона. Бит bl, установленный в 1, означает мигание символа, записанного в этой позиции (не во всех текстовых режимах). Позиции (x, y) на экране соответствует два байта по адресу B8000h + 160y +2x.

Очистка экрана и прокрутка экрана вверх. При попытке вывести текст в строке ниже последней происходит продвижение всех строк вверх. Это продвижение называется прокруткой или скроллингом экрана. Прокрутку экрана вверх можно выполнить с помощью команд.

mov   ax,0601h  ;функция 6

mov   bh,07     ;атрибуты новой строки

mov   cx,0      ;левый верхний угол

mov   dh,24     ;координаты правого

mov   dl,79     ;нижнего угла

int   10h

Число строк, на которое выполняется прокрутка, устанавливается в регистре AL. В данном случае оно равно1. В общем случае можно выполнить прокрутку произвольного окна. Входные данные для функции прокрутки следующие:

AH           — 06h – прокрутка вверх,

AL            — число строк для прокрутки,

BH           — атрибут для очищаемых строк,

(CH, CL)  — координаты (y, x) левого верхнего угла окна,

(DH, DL)  — координаты (y, x) правого нижнего угла окна.

С помощью функции прокрутки можно очищать экран. Для этого его надо прокрутить вверх на число строк на экране, установив al = 0:

mov   ax,0600h

mov   bh,07     ;белые символы на черном фоне

mov   cx,0      ;левый верхний угол (0, 0)

mov   dh,24     ;координаты правого

mov   dl,79     ;нижнего угла

int   10h

Пример. С клавиатуры вводятся символы. Напишем программу, отображающую эти символы в средней строке экрана с миганием. Выход из программы – ввод символа Ctrl/C. Символы будем вводить с помощью функции ввода с клавиатуры без отображения на экран. Выводить на экран символы будем с помощью записи в видеопамять, предварительно записав в байты атрибутов признак «вывод символа с миганием».

< 1 > title     usymb.exe

< 2 > code     segment

< 3 > assume    cs:code

< 4 > main:

< 5 > call      clrscr     ;очистка экрана

< 6 > mov       ax,0B800h  ;установить es

< 7 > mov       es,ax      ;на видеопамять

< 8 > mov       di,12*160  ;смещение начала средней линии

< 9 > next:

< 10 > call      kbinne     ;ввод символа без эха

< 11 > mov       es:[di],al ;вывод символа

< 12 > add       di,2

< 13 > jmp       next

< 14 > ;подпрограммы————

< 15 > clrscr   proc

< 16 > mov       ax,0600h   ;очистка экрана

mov   bh,10000111b      ;атрибут

< 1 >

< 2 > mov       cx,0

< 3 > mov       dh,24

< 4 > mov       dl,79

< 5 > int       10h

< 6 > ret

< 7 > clrscr   endp

< 8 >

< 9 > kbinne   proc

< 10 > mov       ah,8       ;ввод символа без

< 11 > int       21h        ;эхо — отображения

< 12 > ret

< 13 > kbinne   endp

< 14 > code     ends

< 15 > end       main