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