Глава 4. Вывод на терминал.

Раздел 1. Управление выводом на терминал.

4.1.5 Очистка части/всего экрана.

Очистка экрана состоит просто в записи пробела в каждую из позиций экрана (код ASCII - 32). Однако, если при выводе на экран были использованы ненормальные атрибуты, то должны быть также изменены и байты атрибутов. Операционная система обеспечивает простой способ очистки только части экрана.

Средний уровень.

Операционная система предоставляет несколько способов очистки экрана. Kакой из них Вы выберете зависит от того, какие средства требуются программе для достижения других целей. Первый метод это просто сброс режима дисплея, используя функцию 0 прерывания 10H {4.1.2}. Для символьного экрана каждая позиция заполняется пробелом (ASCII 32), а все атрибуты устанавливаются нормальными (ASCII 7). Обычно этот метод хорош только в начале программы, когда все равно надо устанавливать режим работы дисплея. Для цветного графического адаптора и PCjr реинициализация режима дисплея приводит к катавасии на экране. Этот эффект отсутствует у монохромного адаптора и EGA.
;---очистка экрана путем установки нового режима
MOV AH,0 ;номер функции установки режима дисплея
MOV AL,2 ;код режима 80*25 черно-белого
INT 10H ;очистка экрана

Второй метод состоит в использовании функций 6 и 7 прерывания 10H, которые сдвигают экран. Число строк, на которое надо сдвинуть экран помещается в AL и когда это число равно нулю экран очищается. Прерывание позволяет сдвигать только часть экрана, поэтому таким образом можно очистить отдельное окно на экране. Hадо поместить координаты левого верхнего угла окна в CX, а координаты правого нижнего угла в DX (номер строки в CH/DH, а номер столбца в CL/DL). Поместите атрибут, с которым должен чиститься экран в BH. Kоординаты отсчитываются от 0.
;---очистка окна между 3,4 и 13,15
MOV AH,6 ;используем процедуру сдвига
MOV AL,0 ;число строк сдвига делаем равным нулю
MOV BH,7 ;байт атрибутов для заполнения
MOV CH,3 ;строка для верхнего левого угла
MOV CL,4 ;столбец для левого верхнего угла
MOV DH,13 ;строка для нижнего левого угла
MOV DL,15 ;столбец для нижнего левого угла
INT 10H ;чистим окно

Третий метод заключается в использовании фукнции 9 прерывания 10H; которая выводит символ и атрибуты столько раз, сколько указано в CX. Значение 2000 чистит весь экран, если курсор был установлен в 0,0, используя метод показанный в {4.2.1}. AH должен содержать символ пробела, AL - байт атрибутов, а BH - номер страницы дисплея.
;---установка курсора в левый верхний угол экрана
MOV AH,2 ;функция установки курсора
MOV BH,0 ;номер страницы
MOV DX,0 ;координаты 0,0
INT 10H ;устанавливаем курсор
;---вывод символа пробела 2000 раз
MOV AH,9 ;номер функции
MOV CX,2000 ;число повторений вывода
MOV AL,' ' ;символ пробела в AL
MOV BL,7 ;атрибуты в BL
INT 10H ;очистка экрана

Hаконец, DOS обеспечивает очистку экрана с помощью специальных Esc-последовательностей, которые работают с драйвером ANSI.SYS. Основные сведения о нем приведены в приложении Д. Эти последовательности - это строки, начинающиеся с символа Esc, а завершающиеся ограничителем $. Такие строки выводятся функцией 9 прерывания 21H, при этом DS:DX должны указывать на первый символ строки. DOS интерпретирует строку не выводя ее на дисплей. Чтобы стереть весь экран строка должна быть [2J. Чтобы стереть конец строки, начиная от позиции курсора (включая эту позицию), строка [K.
;---в сегменте данных
CLEAR_LINE DB 27,'[K$'
;---очистка конца строки, начиная от позиции курсора
MOV AH,9 ;функция вывода строки
LEA DX,CLEAR_LINE ;DX должен указывать на начало строки
INT 21H ;стираем конец строки

Hизкий уровень.

Hа низком уровне надо просто поместить символы пробела и требуемый байт атрибутов в память дисплея, используя инструкцию STOSW. Вот пример для монохромного дисплея:
MOV AX,0B000H ;указываем на память дисплея
MOV ES,AX ;
MOV DI,0 ;DI указывает на начало буфера
MOV AL,32 ;символ пробела
MOV AH,7 ;нормальные атрибуты
MOV CX,2000 ;число повторений
REP STOSW ;посылаем AX в ES:DI 2000 раз


<~-4.1.4 Установка цвета границы экрана.
Содержание
4.1.6 Переключение между видеоадапторами.-~>

Сайт управляется системой uCoz