Глава 4. Вывод на терминал.

Раздел 2. Управление курсором.

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

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

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

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

 
         вверх           3A 
         вниз            3B 
         вправо          3C 
         влево           3D 
Числа записываются как коды ASCII. Hе преобразуйте, например, 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-последовательностей, которые управляют переносом курсора на следующую строку при достижении им конца текущей строки. Kогда устанавливается отсутствие переноса, то лишние символы при выводе отбрасываются. Строка, запрещающая перенос - Esc [=7h (или как данные, 27,'[=7h'). Для возврата к режиму автоматического переноса на следующую строку используется строка Esc [=7l (27,'[=7l').


<~-4.2.1 Установка курсора в абсолютную позицию.
Содержание
4.2.3 Включение и выключение курсора.-~>

Сайт управляется системой uCoz