Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программирование EGA и VGA

3. BIOS экранного ввода/вывода

Описываемый ниже набор функций BIOS (номера 8 - fh) работает непосредственно с экранными изображениями, то есть осуществляет запись или чтение содержимого экранной памяти или схемы управления цветом. Исключение составляет функция fh, которая возвращает текущий видеорежим. Как и функции 0 - 7, функции видеообмена поддерживаются всеми IBM-адаптерами. Рассматриваемые процедуры обмена с видеопамятью достаточно медленные, поэтому большинство программистов стараются свести к минимуму их использование в конечном продукте. Однако некоторые из процедур успешно используются в прикладных программах.

Например, процедура записи символа работает во всех режимах. Эта возможность особенно полезна для вывода текста в графических режимах в тех случаях, когда не требуется сложная обработка текста (такая как различение размера букв или выравнивание пикселей). Процедуры вывода символа в графическом режиме сложны для написания и, возможно, данная задача не стоит затрачиваемых усилий.


Вызов функции 8: Чтение атрибута/символа в текущей позиции курсора.

Комментарии

Функция может быть использована для чтения символа с любой страницы. Возвращаемая информация содержит символ, расположенный в текущей позиции курсора указанной страницы (см. функцию 2 для установки текущей позиции курсора). Атрибут представляет собой однобайтовое значение, описывающее символ и фон в соответствии со следующим форматом:

При работе с цветными мониторами три бита цвета фона и символа позволяют получить восемь различных цветов. При использовании монохромных мониторов могут быть установлены следующие значения битов, описывающих цвет фона: все 0 - черный, все 1 - альтернативный цвет. Биты, описывающие цвет символа, могут принимать значения: 000 - черный, 001 для подчеркивания, 111 - для обычного символа. Байт атрибута имеет смысл только в алфавитно-цифровых (текстовых) режимах. См. функции 10h и 11h для получения дополнительных сведений о кодах атрибутов и символов.

Исходные данные

Регистры (устанавливаются до вызова функции):

  • AH: устанавливается 8
  • BH: номер страницы (см. функцию 5)

Выходные данные

Регистры (опрашиваются после вызова функции):

  • AL: ASCII-код символа в текущей позиции курсора
  • AH: код атрибута (для текстового режима)

Приводимая ниже программа возвращает символ ASCII (и значение байта атрибута), расположенного на строке 5 столбца 15. Можно попробовать выполнить эту программу после работы одного из двух следующих примеров (вызов функции 9 или 0ah). Если используются оба примера, их выполнение рекомендуется провести в следующем порядке: функции 0ah, 8, 9 и 8. Это позволит продемонстрировать изменение байта атрибута.

Пример на языке ассемблера:

        data    segment public
                msg     db 'Row 5, Column 15 contains ASCII'
                        db 'character'
                char    db 3 dup (?)
                        db ', and attribute value '
                attr    db 3 dup (?)
                m_len   equ $-msg ;формирование константы от текущей
                                  ;метки до начала сообщения
        data    ends
        code    segment public
                assume  CS:code
        main    proc    far
        start:  push    DS
                sub     AX,AX
                push    AX
                mov     AX,data
                mov     DS,AX
                assume  DS:data
                mov     AX,data
                mov     ES,AX
                assume  ES:data
                mov     BH,0    ;страница 0
                mov     DH,5    ;строка 5
                mov     DL,15   ;столбец 15
                mov     AH,2    ;функция 2 - установка позиции курсора
                int     10h     ;обращение к видео-BIOS
                mov     BH,0    ;страница 0
                mov     AH,8    ;функция 8 - чтение символа и атрибута
                int     10h     ;обращение к видео-BIOS
                mov     BL,AH   ;временная запись атрибута в BL
                mov     DI,offset char
                call    bin2asc
                mov     AL,BL   ;получение атрибута
                mov     DI,offset attr
                call    bin2asc
                 mov     DH,20   ;строка 20
                mov     DL,0    ;столбец 0
                mov     BH,0    ;страница 0
                mov     BP,offset msg ;ES:BP указатель на строку
                mov     BL,0fh  ;белый высокой яркости
                mov     CX,m_len ;длина строки
                mov     AL,1    ;курсор перемещается
                                ;только строка символов
                                ;атрибут в BL
                mov     AH,13h  ;функция 13h - запись строки
                int     10h     ;вызов видео-BIOS
                ret
        main    endp
        bin2asc proc    near
          COMMENT*Эта подпрограмма перевода двоичных чисел в формат
                ASCII написана специально для рассматриваемой в приме-
                ре программы и позволяет работать только с числами,
                меньшими 256. AL:8-битовое переводимое значение,DI:
                смещение в DS, получающее 2-байтовое значение ASCII
               *
                xor     AH,AH     ;0 в AH
                mov     DL,100
                div     DL        ;перевод в десятичные сотни
                add     AL,30h    ;перевод сотен в ASCII
                mov     [DI],AL
                mov     AL,AH
                xor     AH,AH     ;0 в AH
                mov     DL,10
                div     DL        ;перевод в десятичные цифры
                add     AL,3030h  ;увеличение на 30h для получения
                                  ;ASCII-кода
                mov     [DI+1],AL ;запись десятков
                mov     [DI+2],AH ;запись единиц
                ret
                mov     DH,21     ;строка 21
                mov     DL,0      ;столбец 0
                mov     AH,2      ;функция 2 - установка поз. курсора
                int     10h       ;вызов видео-BIOS
        bin2asc endp
        code    ends
        end     start

Вызов функции 9: Запись атрибута/символа в текущую позицию курсора.

Комментарии

Функция может быть использована для записи символа (или копий символа) на любую страницу. Символы записываются начиная с текущей позиции курсора, которая определяется с помощью обращения к функции 2. Атрибут представляет собой однобайтовое значение, описывающее символ и фон в соответствии со следующим форматом:

При работе с цветными мониторами три бита цвета фона и символа позволяют получить восемь различных цветов. При использовании монохромных мониторов могут быть установлены следующие значения битов, описывающих цвет фона: все 0 - черный, все 1 - альтернативный цвет. Биты, описывающие цвет символа, могут принимать значения: 000 - черный, 001 для подчеркивания, 111 - для обычного символа.

В графических режимах байт атрибута используется для установки цвета символа. Установка бита 7 приводит к тому, что символ накладывается на текущее содержимое экрана по принципу "Исключающее ИЛИ". См. вызов функций 10h и 11h для получения дополнительных сведений о кодах атрибутов и символов.

В алфавитно-цифровых режимах вывод большего количества копий символа, чем может поместиться на строке, приведет к переносу символов на следующую строку. В графическом режиме все выводимые копии должны помещаться на одной строке. После завершения обращения к функции позиция курсора не изменяется (даже при выводе большого количества копий символа). Позиционирование символа должно выполняться средствами программы.

Вывод управляющих символов выполняется так же, как и вывод отображаемых символов. Поэтому управляющие символы "Забой", "Возврат каретки", "Перевод строки" и т.д. должны выполняться путем позиционирования курсора.

Исходные данные

Регистры (устанавливаются до вызова функции):

  • AH: устанавливается 9
  • AL: ASCII-код символа
  • BH: номер страницы (см. функцию 5). В режиме 13h [регистр BH используется для задания цвета фона]
  • BL: атрибут символа
  • CX: количество отображаемых символов

Приведенная ниже программа выполняет посимвольную печать сообщения, изменяя атрибут (цвет) каждого символа. Следует обратить внимание на действие управляющих кодов 7, 10 и 13. Сравните результат действия функций ah, eh и 13h.

Пример на языке ассемблера:

        data    segment public
                msg     db 'This line demonstrates printing'
                        db 'ASCII 7 (',7,'), 10(',10,') and'
                        db '13(',13,').'
                m_len   equ $-msg ;формирование константы от текущей
                                  ;метки до начала сообщения
                                  ;(длина сообщения)
        data    ends
        code    segment public
                assume  CS:code
        main    proc    far
        start:  push    DS
                sub     AX,AX
                push    AX
                mov     AX,data
                mov     DS,AX
                assume  DS:data
                mov     DH,05     ;строка 5( для вызова функции 2)
                mov     DL,0      ;столбец 0 (для вызова функции 2)
                mov     CX,m_len  ;число итераций
                mov     BP,offset msg ;указатель на сообщение
                mov     BL,1      ;инициализация BL в 1
                                  ;начало с цвета 1
        lp1:    inc     DX        ;следующий столбец
                mov     AH,2      ;функция 2 - установка курсора
                int     10h       ;вызов видео-BIOS
                push    CX        ;сохранение счетчика итераций
                mov     CX,1      ;запись одного символа
                mov     BH,0      ;страница 0
                mov     AL,msg[BP];получение ASCII-кода
                mov     AH,9      ;вызов функции 9
                int     10h       ;вызов видео-BIOS
                inc     BP        ;указатель на следующий символ
                inc     BX        ;следующий цвет
                                  ;(номер увеличивается на 1)
                cmp     BL,15     ;если 15
                jbe     skp       ;пропустить до skp
                mov     BL,1      ;если 15, установить цвет 1
        skp:    pop     CX        ;восстановление счетчика итераций
                loop    lp1
                mov     DH,21     ;строка 21
                mov     DL,0      ;столбец 0
                mov     AH,2      ;функция 2 - установка курсора
                int     10h       ;вызов видео-BIOS
                ret
        main    endp
        code    ends
        end     start

[ Назад ] [ Оглавление ] [ Далее ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог