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

Раздел 3. Вывод символов на экран.

4.3.3 Чтение символа и его атрибутов в данной позиции.

Обычно программа получает данные из своих переменных и помещает их в видеобуфер для вывода на экран. В некотором смысле программа "знает" что на экране. Hо встречаются ситуации, в которых сам видеобуфер используется как рабочая область (например, в графиченских программах вырезки и вставки) и текущее содержимое экрана не записано в памяти программы. В этих случаях бывает необходимо прочитать с экрана, виесто того чтобы вывести на него. Функция BIOS позволяет прочитать символ и его атрибуты в определенной позиции экрана; другой метод состоит в обращении метода прямого отображения в память дисплея {4.3.1}. Чтобы прочитать символ и атрибуты в строке 0 и столбце 39 (1,40 в Бейсике) в режиме 80 символов в строке надо сложить (0*160) плюс (39*2) и взять результат в качестве смешения в видеобуфере. В случае когда нужны смещения для различных страниц см. {4.5.3}. Имейте ввиду, что обращение метода прямого отображения в память не будет работать в случае вывода символов в графическом режиме.

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

Функция 8 прерывания 10H возвращает символ и его атрибуты для текущей позиции курсора. В BH должен содержаться номер текущей страницы дисплея (отсчитываемый от 0 и всегда равный 0 для монохромного дисплея). Kод символа возвращается в AL, а байт атрибутов в AH. Эта функция настолько мощная, что способна даже читать символы в графическом режиме, сообщая цвет палетты в AH. Она работает даже для символов определяемых пользователем {4.3.4}. В примере определяется символ и атрибуты в позиции 0,39 для страницы 2 графического адаптора:
;---установка позиции курсора
MOV AH,2 ;функция установки курсора
MOV DH,0 ;номер строки
MOV DL,39 ;номер столбца
MOV BH,0 ;номер страницы
INT 10H ;позиционируем курсор
;---чтение символа и атрибутов
MOV AH,8 ;функция чтения символа/атрибутов
MOV BH,2 ;номер страницы
INT 10H ;в AH:AL теперь атрибуты и символ

Hизкий уровень.

Hадо вычислить смещение и проделать операцию обратную прямой записи в память. При необходимости надо добавить смещение для данной страницы. В примере получаем символ и атрибуты в позиции 7,39 страницы 2 графического адаптора:
;---чтение символа и атрибутов позиции 7,39 страницы 2
MOV AX,0B800H ;адрес видеобуфера
MOV ES,AX ;ES указывает на первый байт буфера
MOV DI,1000H ;смещение до начала страницы
MOV AL,80 ;умножаем номер строки на 160
MOV BL,7 ;номер строки
MUL BL ;теперь в AX (строка-1)*160
MOV AX,39 ;номер столбца
ADD BX,AX ;номер позиции в видеобуфере
SHL BX,1 ;умножаем его на два
MOV AX,ES:[BX][DI] ;теперь AH:AL содержат атрибуты/символ


<~-4.3.2 Вывод строки символов на экран.
Содержание
4.3.4 Создание специальных символов.-~>

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