Предыдущий раздел | ДАМПИРОВАНИЕ ПАМЯТИ | Следующий раздел |
Прежде, чем вывести на экран сектор, наша программа должна позаботиться об очистке экрана. Для выполнения этой операции мы обратимся за помощью к системной программе, называемой 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
З а п и ш и т е процедуру Clear_screen в файл Cursor.asm и протестируйте ее. Затем скорректируйте файл Disp_sec.asm, записав в начале процедуры Disp_sector оператор вызова процедуры очистки экрана.
Запустив программу Disp_sec.com, можно убедиться, что экран очищается на весьма короткое время. Это обусловлено тем, что после завершения Disp_sec.com управление возвращается в DOS, которая восстанавливает на экране свою информацию. Для избежания этого в конце процедуры Disp_sector поместите оператор, выполняющий ввод символа с клавиатуры. Наличие такого оператора позволит наблюдать на экране неискаженное изображение сектора до тех пор, пока не будет нажата любая клавиша. Впоследствии у нас отпадет потребность в подобном "торможении" нашей программы.
Предыдущий раздел | В начало | Следующий раздел |