Глава 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 Создание специальных символов.-~>