Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
33_Metodicheskie_ukazania_po_laboratornym_rabot...doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
706.56 Кб
Скачать

Сдвиг экрана и страницы.

Сдвиг экрана и разбиение на страницы - это два способа переноса блока информации из памяти на экран. При сдвиге одна из границ экрана сдвигается внутрь, стирая информацию на противоположной стороне. Затем освободившаяся область заполняется из памяти. Повторение этого действия строка за строкой создает иллюзию сдвига экрана.

С другой стороны, разбиение на страницы основано на одновременном хранении нескольких экранов информации в видеобуфере и переключении вывода с одной страницы на другую. Использование дисплейных страниц невозможно на монохромном адаптере, поскольку его памяти хватает только для одного символьного экрана. Другие видеосистемы в большинстве экранных режимов могут работать с несколькими страницами. Использование страниц дисплея особенно полезно при построении сложных картин "за кулисами"; после того как эта работа завершена, новый экран выводится моментально.

Вертикальный сдвиг текстового экрана.

Когда текстовый экран сдвигается вверх, то строки со 2-й по 25-ю переписываются на строки с 1-й по 24-ю, а следующая строка данных выводится в 25-й строке. При этом верхняя строка, поверх которой осуществляется вывод теряется, хотя она продолжает существовать в памяти. Сдвиг вниз устроен аналогично.

Функция 6 прерывания 10H сдвигает любую часть экрана вверх, а функция 7 - вниз. В обоих случаях AL содержит число строк сдвига, а когда AL = 0, то весь экран чистится, а не сдвигается. CH:CL содержат строку и столбец левого верхнего угла, а DH:DL - содержат координаты правого нижнего угла. Появляющиеся из-за сдвига строки чистые и они выводятся с кодом атрибутов из BH.

;---сдвиг вверх на одну строку

MOV AH,6 ;номер функции сдвига вверх

MOV AL,1 ;число строк сдвига

MOV CH,0 ;строка левого верхнего угла

MOV CL,0 ;столбец левого верхнего угла

MOV DH,24 ;строка правого нижнего угла

MOV DL,79 ;столбец правого нижнего угла

MOV BH,7 ;атрибуты очищаемой строки

INT 10H ;делаем сдвиг

Сдвиг текстового экрана горизонтально.

Горизонтальный сдвиг иногда требуется в специальных программах обработки текста, таких как текстовые редакторы. Операционная система не имеет для этого специальных средств. По этой причине данная задача немного сложнее чем вертикальный сдвиг - но несущественно. Рассмотрим случай, когда Вы хотите, чтобы экран сдвигался влево на 5 позиций. При этом левые 5 столбцов исчезнут, весь остальной текст сдвигается влево, а самые правые 5 столбцов должны быть очищены. Поскольку видеобуфер представляет из себя одну длинную строку, то если каждый символ буфера сдвинуть на 10 байтов вниз, то суммарный эффект будет состоять в том, что самые левые 5 символов каждой строки будут передвинуты в последние 5 позиций предыдущей строки. Таким образом, весь экран будет сдвинут влево на 5 позиций, передвигая 5 ненужных столбцов в правую часть экрана. Все что после остается - это очистить правые 5 столбцов. Это легко делается с помощью процедуры вертикального сдвига, которая может выполняться для любой части экрана и которая очищает указанную область если указать сдвиг на 0 строк.

В этом примере осуществляется сдвиг на 5 позиций влево. Легко изменить его для сдвига вправо или для другого значения позиций сдвига. При использовании прямого отображения в память этот метод дает практически моментальный сдвиг экрана.

;---сдвигаем все вниз на 10 байтов

MOV AX,0B000H ;указываем на буфер монохромного

MOV ES,AX ;дисплея

MOV DS,AX ;

MOV SI,10 ;сдвигаем из SI ...

MOV DI,0 ;... в DI

MOV CX,1995 ;сдвигаем все кроме последних 5 байт

REP MOVSW ;осуществляем сдвиг

;---очищаем правый край

MOV AH,6 ;функция вертикального сдвига

MOV AL,0 ;сдвиг на 0 строк чистит окно

MOV CH,0 ;строка левого верхнего угла

MOV CL,75 ;столбец левого верхнего угла

MOV DH,24 ;строка правого нижнего угла

MOV DL,79 ;столбец правого нижнего угла

MOV BH,7 ;атрибут для очищаемых позиций

INT 10H ;чистим окно

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]