Страница 44 из 47
4.5.2 Сдвиг текстового экрана горизонтально. Горизонтальный сдвиг иногда требуется в специальных программах обработки текста, таких как текстовые редакторы. Операционная система не имеет для этого специальных средств. По этой причине данная задача немного сложнее чем вертикальный сдвиг - но несу- щественно. Рассмотрим случай, когда Вы хотите, чтобы экран сдви- гался влево на 5 позиций. При этом левые 5 столбцов исчезнут, весь остальной текст сдвигается влево, а самые правые 5 столбцов должны быть очищены. Поскольку видеобуфер представляет из себя одну длинную строку, то если каждый символ буфера сдвинуть на 10 байтов вниз, то суммарный эффект будет состоять в том, что самые левые 5 символов каждой строки будут передвинуты в последние 5 позиций предыдущей строки. Таким образом, весь экран будет сдви- нут влево на 5 позиций, передвигая 5 ненужных столбцов в правую часть экрана. Все что после остается - это очистить правые 5 столбцов. Это легко делается с помощью процедуры вертикального сдвига [4.5.1], которая может выполняться для любой части экрана и которая очищает указанную область если указать сдвиг на 0 строк. Рисунок 4-6 иллюстрирует этот метод.
Низкий уровень. В этом примере осуществляется сдвиг на 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 ;чистим окно
|