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