Два регистра - регистр старшего байта позиции курсора (Cursor Location Register - CLR_h, high byte) (индекс 0Eh) и регистр младшего байта позиции курсора (Cursor Location Register - CLR_l, low byte) (индекс 0Fh) определяют положение курсора на экране (рис. 4.5). Регистры доступны как для записи, так и для чтения.
PICTURE._FIG_37.PCX;6";4.308";PCX
Рисунок 4.5 Отображение курсора на экране
Программа CURSLOC, приведенная в листинге 4.6 переводит видеоадаптер в текстовый режим, устанавливает курсор в позицию 5 строки 10. Затем программа считывает значения регистров позиции курсора (на момент запуска программы) и отображает их на экране монитора. Вы должны получить значение 0325h (80 * 10 + 5 = 805 = 0325h).
Листинг 4.6. Файл CURSLOC.C
// Чтение регистра положения курсора
#include <stdio.h>
#include "sysp.h"
#include "sysgraph.h"
// Описания функций
void main(void);
// Функции WriteReg и ReadReg определены в файле
// DESIGN.C. Смотри листинг 4.5
void WriteReg(unsigned reg, unsigned char data);
unsigned char ReadReg(unsigned reg);
// Главная функция
void main(void) {
int crt_port;
unsigned char h_pos, l_pos;
BIOS_VAR _far *bios_var_ptr;
_asm {
// Устанавливаем режим 3
mov ah,0
mov al,3
int 10h
// Выбираем страницу видеоапамяти 0
mov ah,5
mov al,0
int 10h
// Устанавливаем курсор в положение (20,10)
mov ah,2
mov dh,10 //
mov dl,5 // строка 10, позиция 5:
// CLR = 80 * 10 + 5 = 805 = 325h
xor bh,bh
int 10h
}