Свернуть активное окно экрана вверх (при работе в текстовом режиме) можно при помощи функции 06h. Окно задается координатми верхнего левого и нижнего правого углов. При свертке окна снизу появляются новые пустые строки (строки, заполненые пробелами), а верхние строки исчезают. Область экрана вне окна не изменяется.
На входе: AH = 06h - свертка окна вверх;
AL = число прокручиваемх линий, если оно равно нулю, то окно прокручивается целиком;
BH = атрибут, используемый для строк, возникающих снизу окна;
CH = номер строки верхнего левого угла окна;
CL = номер колонки верхнего левого угла окна;
DH = номер строки нижнего правого угла окна;
DL = номер колонки нижнего правого угла окна.
На выходе: Не используются.
Тот факт, что при свертке в нижней части окна возникают чистые строки, впоследствии заполняющие все окно, можно использовать для быстрой очистки экрана. Для этого достаточно задать размеры окна, равные размерам экрана и прокрутить его вверх на 25 или 0 строк. Приведем фрагмент программы на языке ассемблера, который можно использовать для очистки экрана дисплея:
push es ; сохраняем содержимое регистра es
xor ax,ax ; устанавливаем регистр es на нулевой mov es,ax ; сегмент памяти
mov ah,6 ; функция свертки экрана вверх mov al,0 ; очищаем все окно mov bh,7 ; устанавливаем нормальный атрибут xor cx,cx ; устанавливаем левый верхний угол окна в (0,0)
; Для определения размеров экрана испльзуется содержимое переменных ; видеофункций BIOS. Ячейка памяти, расположенная по адресу 0000:0484 ; содержит число, на единицу меньшее, чем количество строк на экране. ; По адресу 0000:044A находится переменная, определяющая число символов ; в строке. Более подробно переменные видеофункциий BIOS будут ; рассмотрены позже.
mov dh,es:[484h] ; определяем число строк в данном режиме mov dl,es:[44Ah] ; определяем число символов в строке dec dl
int 10h ; вызываем свертку экрана вверх
pop es ; восстанавливаем регистр es