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


     4.2.2 Относительное позиционирование курсора


   Иногда бывает полезным сдвинуть курсор относительно его преды-
дущей  позиции:  на строку вверх, на три столбца  вправо, и  т.д.
Достаточно просто использовать  для этой цели уже описанное абсо-
лютное позиционирование курсора.  Но для удобства MS DOS  предос-
тавляет некоторые возможности относительного перемещения курсора.

   Средний уровень.


   Функции   относительного   перемещения   курсора   выполняются
Esc-последовательностями.  Это строки, которые выводятся на экран
с помощью функции 9 прерывания 21H. В приложении Д даны основы их
использования.   Такие последовательности интерпретируются MS DOS
как команды  перемещения  курсора,  а  не  вывод символов строки.
Строка начинается с символа Esc (ASCII 27), затем идет символ  [,
а символ $ отмечает конец  строки.   Сама строка состоит из числа
позиций,  на которое надо сдвинуться, и кода направления.   Чтобы
сдвинуться на 3 позиции:

         вверх           3A
         вниз            3B
         вправо          3C
         влево           3D

Числа записываются как коды ASCII. Не преобразуйте, например, 33C
(33 пробела вправо) в 33,'C'; должно быть '33C'.  В нижеприведен-
ном примере цифры  1-8  помещаются  через  определенные интервалы
поперек экрана, как метки столбцов данных.  Промежутки между циф-
рами  генерируются  Esc-последовательностями,   которые  сдвигают
курсор вправо после вывода каждой цифры.

;---в сегменте данных
CURSOR_RIGHT   DB   27,'[9C$'

;---установка начальной позиции курсора
   MOV  BH,0             ;ноиер страницы
   MOV  DH,1             ;строка
   MOV  DL,5             ;столбец
   MOV  AH,2             ;функция установки курсора
   INT  10H              ;установка курсора
;---вывод цифр
   LEA  BX,CURSOR_RIGHT  ;BX будет обмениваться с DX
   MOV  CX,8             ;число цифр для вывода
   MOV  DL,'0'           ;начинаем с 0
NEXT_NUMBER:   MOV  AH,2 ;функция DOS для вывода символа
   INT  21H              ;выводим символ
   INC  DL               ;переходим к следующему коду ASCII
   XCHG DX,BX            ;помещаем указатель на строку в DX
   MOV  AH,9             ;функция вывода строки
   INT  21H              ;сдвигаем курсор на 9 позиций вправо
   XCHG DX,BX            ;возвращаем в DX код ASCII
   LOOP NEXT_NUMBER      ;переходим к следующей цифре

   Имеется также пара Esc-последовательностей, которые  управляют
переносом курсора на  следующую  строку  при  достижении им конца
текущей  строки.   Когда устанавливается отсутствие переноса,  то
лишние символы при  выводе   отбрасываются.  Строка,  запрещающая
перенос  - Esc [=7h (или как данные, 27,'[=7h').  Для возврата  к
режиму автоматического переноса на  следующую строку используется
строка Esc [=7l (27,'[=7l').

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