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

Ваш аккаунт

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

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

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

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

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

Комментарии

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

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

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

  • AH: устанавливается ah
  • AL: ASCII-код символа
  • BH: номер страницы (см. функцию 5)
  • CX: количество записываемых символов

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

        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,0ah    ;вызов функции 0ah
                                  ;следует обратить внимание,
                                  ;что байт атрибута (BL)
                                  ;не задействован
                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

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


Вызов функции 0Bh: установка цветовой палитры.

Комментарии

Рассматриваемая функция предусмотрена для работы в совместимых режимах. См. функцию 10h для установки палитры в новых режимах.

Регистр BH определяет доступ либо к цвету фона (0), либо к набору цветов палитры в графическом режиме с разрешением 320х200 (1). Допустимо любое значение от 0 до 127, хотя достаточно указать 0 или 1 (четные числа рассматриваются как 0, нечетные - как 1).

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

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

  • AH: устанавливается bh
  • BH: идентификатор цветовой палитры
  • BL: для BH=0 в графическом режиме - цвет фона (0 - 15); в текстовом режиме - цвет рамки (0 - 31). Следует отметить, что цвет фона в текстовом режиме является атрибутом символа (см. вызов функции 8). При BH=1 значение 0 означает выбор зеленого, красного и коричневого цветов, а 1 - голубого, пурпурного и белого. Эти цвета имеют номера 1, 2 и 3. Цвет фона - 0.

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

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

        data    segment public
                clr     db 3    ;установка начального цвета 3
        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     AH,0      ;функция 0 - установка режима
                mov     AL,5      ;выбор режима 5
                int     10h       ;вызов видео-BIOS
                mov     BH,1      ;выбор графической палитры цветов
                mov     BL,1      ;голубой, пурпурный, белый
                mov     AH,0bh    ;установка палитры
                int     10h       ;вызов видео-BIOS
                mov     BH,0      ;определение цвета фона
                mov     BL,0      ;черный
                mov     AH,0bh    ;установка палитры
                int     10h       ;вызов видео-BIOS
                mov     CX,319    ;определение столбца
        lp:     mov     AH,0ch    :функция ch - вывод точки
                mov     AL,clr    ;установка цвета
                dec     AX        ;уменьшение на 1 номера цвета
                mov     clr,AL    ;сохранение нового значения цвета
                jnz     skip      ;на skip, если номер цвета не 0
                mov     clr,3     ;повторить установку цвета 3
        skip:   mov     BH,0      ;страница 0
                mov     DX,10     ;строка 10
                int     10h       ;вызов видео-BIOS
                loop    lp        ;декремент CX - следующий столбец
                mov     CX,4      ;множитель задержки
                                  ;(для увеличения времени)
        ps1:    push    CX
                mov     CX,0ffffh ;длительность паузы
        ps2:    loop    ps2       ;пустой цикл для задержки
                pop     CX
                loop    ps1       ;цикл через множитель
                mov     BH,1      ;выбор графической палитры
                mov     BL,0      ;зеленый, красный, коричневый
                mov     AH,0bh    ;установка палитры
                int     10h       ;вызов видео-BIOS
                mov     DH,10     ;строка 10
                mov     DL,0      ;столбец 0
                mov     BH,0      ;страница 0
                mov     AH,2      ;функция 2 - установка курсора
                int     10h       ;вызов видео-BIOS
                ret
        main    endp
        code    ends
        end     start

Вызов функции 0Ch: запись точки.

Комментарии

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

Если в регистре AL установлен бит 7, то новый пиксель накладывается на текущее содержимое экрана с использованием операции "Исключающее ИЛИ".

Регистр BH (номер страницы) CGA не поддерживается, поскольку в CGA не предусмотрена работа с графическими страницами. Для EGA и VGA в регистре должно быть установлено соответствующее значение.

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

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

  • AH: устанавливается ch
  • AL: номер цвета
  • BH: номер страницы (см. функцию 5)
  • CX: номер столбца пикселя (0 - 319 или 0 - 639)
  • DX: номер строки пикселя (0 - 199, 0 - 349 или 0 - 479)

Применение функции описывается в примере для функции 0 (Установка режима). Кроме того, в Приложении содержатся тексты похожих программ, в которых осуществляется непосредственная запись пикселей в память. Пример, приведенный для функции dh (Чтение точки), также содержит обращение к рассматриваемой функции. Для выполнения программы, содержащей функцию считывания точки, следует предварительно выполнить программу установки режима.


Вызов функции 0Dh: считывание точки

Комментарии

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

Регистр BH (номер страницы) CGA не поддерживается.

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

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

  • AH: устанавливается dh
  • BH: номер страницы (см. функцию 5)
  • CX: номер столбца пикселя (0 - 319 или 0 - 639)
  • DX: номер строки пикселя (0 - 199, 0 - 349 или 0 - 479)

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

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

  • AL: значение цвета точки

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

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

        data    segment public
                clr     db 16    ;установка начального цвета 16
                msg     db 'The mode must be set to high '
                        db 'resolution.'
                m_end   label byte
        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     AH,0fh   ;функция 0fh текущий режим
                int     10h      ;вызов видео-BIOS
                cmp     AL,0eh   ;номер режима меньше 0eh?
                jl      bad_mode
                cmp     AL,13h   ;режим низкого разрешения 256 цв.?
                je      bad_mode
                mov     CX,639   ;столбец
        lp:     mov     AH,0dh   ;функция dh - считывание точки
                mov     BH,0     ;страница 0
                mov     DX,10    ;строка 10
                int     10h      ;вызов видео-BIOS
                mov     AH,0ch   ;функция ch - запись точки
                mov     DX,20    ;строка 20
                int     10h      ;вызов видео-BIOS
                loop    lp       ;декремент CX - следующий столбец
                ret
         bad_mode:
                mov     AX,data
                mov     ES,AX
                assume  ES:data
                mov     AH,3     ;функция 2 - чтение позиции курсора
                mov     BH,0     ;страница 0
                int     10h      ;вызов видео-BIOS
                    ;позиция курсора помещается в регистр DX
                mov     DL,0     ;столбец 0
                mov     AX,1300h ;запись строки (символьные данные)
                mov     BH,0     ;страница 0
                mov     BL,3     ;цвет 3
                mov     BP,offset msg       ;ES:BP указатель на текст
                mov     CX,offset m_end-msg ;длина текста
                int     10h      ;вызов видео-BIOS
                ret
        main    endp
        code    ends
        end     start

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

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

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