Глава 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 Включение и выключение курсора.-~>