Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 44. Сдвиг текстового экрана горизонтально


     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            ;чистим окно

 
« Предыдущая статья   Следующая статья »