Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Сдвиг текстового экрана горизонтально
ОГЛАВЛЕНИЕ
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 ;чистим окно