Предыдущий раздел ДАМПИРОВАНИЕ   ПАМЯТИ Следующий раздел

12.3. Очистка экрана

Прежде, чем вывести на экран сектор, наша программа должна позаботиться об очистке экрана. Для выполнения этой операции мы обратимся за помощью к системной программе, называемой  BIOS.

Операционная система, например DOS, использует подпрограммы BIOS для выполнения своих операций обмена с внешними устройствами. Разработчик прикладной программы может применять подпрограммы BIOS точно так же, как и подпрограммы DOS, т.е. с помощью команд int. Подпрограммы BIOS   применяются в двух случаях:

1) соответствующая функция DOS отсутствует;

2)  требуется повысить скорость выполнения функции.

Для очистки экрана будем использовать функцию BIOS – "Прокрутка экрана вверх". Она вызывается оператором “int l0h” (функция 6). Данная функция требует задания следующих входных параметров:

(AL) – число строк, которые должны быть стерты внизу окна. Обычная прокрутка стирает одну строку.  Нуль означает, что нужно стереть все окно;

(CH,CL) – строка и столбец левого верхнего угла окна;

(DH,DL) – строка и столбец правого нижнего угла окна;

(ВН) – атрибуты (например цвет), используемые для этих строк.

Таким образом, функция номер 6 десятого прерывания требует довольно много входной информации, даже если все сводится только к очищению экрана. Отметим, что она обладает мощными способностями: может очистить любую прямоугольную часть экрана – окно (“Window”). Текст процедуры  Clear_screen, выполняющей очистку экрана:

 

;                   Очистка экрана

;                   --------------------

;

Clear_screen:

push  ax

              push  bx

              push  cx

              push  dx

              xor    al, al                             ; Очистить все окно

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

              mov   dh, 24                           ; Нижняя строка экрана -24

              mov   dl, 79                            ; Правая граница в 79 столбце

              mov   bh, 7                             ; Применить нормальные атрибуты

              mov   ah, 6                             ; Очистить

              int     10h                               ;    окно

              pop    dx 

              pop   cx

              pop  bx

              pop   ax

              ret

 

З а п и ш и т е  процедуру  Clear_screen в файл Cursor.asm  и протестируйте ее. Затем скорректируйте файл Disp_sec.asm, записав в начале процедуры Disp_sector оператор вызова процедуры очистки экрана.

Запустив программу  Disp_sec.com, можно убедиться, что экран очищается на весьма короткое время. Это обусловлено тем, что после завершения Disp_sec.com  управление возвращается в DOS, которая восстанавливает на экране свою информацию. Для избежания этого в конце процедуры Disp_sector поместите оператор, выполняющий ввод символа с клавиатуры. Наличие такого оператора позволит наблюдать на экране неискаженное изображение сектора до тех пор, пока не будет нажата любая клавиша. Впоследствии у нас отпадет потребность в подобном "торможении" нашей программы.

 


Предыдущий раздел В начало Следующий раздел