
- •Оглавление
- •1.Введение
- •2. Методические рекомендации
- •2.1. Предмет рассмотрения
- •2.2. Прямое программирование видеобуфера в текстовом режиме
- •2.3. Справочные данные по функциям bios
- •2.3.1. Прерывание int 10h. Видеофункции bios
- •2.3.2. Рекомендации по использованию видеосервиса bios
- •2.3.3. Прерывание int 16h
- •2.3.4. Задержка программных операций
- •Int 15h, функция 86h
- •3. Практическая часть
- •4. Список литературы
2.3.2. Рекомендации по использованию видеосервиса bios
1. Программы, выполняемые в операционной среде DOS, используют по умолчанию текстовый режим 3, страницу 0.
2. Программы более широкого назначения должны запрашивать текущий видеорежим и страницу (функция 0Fh, int 10h) с последующим их применением в используемых функциях BIOS.
.......
Mov ah,0Fh ;Запрос текущего режима
Int 10h
Mov v_mode, al ;Сохраним режим
Mov current_page, bh ;Сохраним строку
3. Если программа выводит изображение на разные страницы, то последовательность действий с каждой страницей может быть следующей (предполагается режим по умолчанию с "0" – страницей):
установка страницы функцией 05h;
установка позиции курсора функцией 02h;
построчное форматирование текста BIOS или DOS.
В дальнейшем может быть организован циклический просмотр содержания страниц путём их переключения функцией 05h, int 10h. При выходе из программы обязательно восстанавливаем искомую "0"-страницу. Сделать это, к примеру, можно так.
..........
continue:
..........
;Анализ буфера клавиатуры функцией DOS 06h int 21h с целью её завершения нажатием ;произвольной клавиши
mov ah,06h ;Функция ввода без ожидания
mov dl,0FFh ;Ввод
int 21h
jnz out_program ;zf=0, есть символ, на выход
jmp continue ;zf=1, символа нет, продолжим работу
out_program: ;Восстановим страницу функцией 05h, int 10h
..........
exit: mov ax,4C00h ;Вызов функции завершения программы
int 21h
End start
Страницы видеобуфера могут быть последовательно отформатированы и способом непосредственного программирования памяти. Выбор страниц при этом осуществляется соответствующей инициализацией сегментного регистра ES (см. п. 2.2). Просмотр содержимого страниц также может быть выполнен путём их последовательного переключения с помощью функции 05h, int 10h.
4. Структура демонстрационной программы, исследующей функцию "мерцание – яркость фона" (функция 10h, подфункция 03h, int 10h).
;Очистка экрана
..........
;Инициализация 2-х локальных окон, каждое со своим атрибутом и текстом. При задании
;атрибутов цвета старший (7-ой по номеру) бит выбран равным "1".
.........
continue: ;Включим мерцание
mov ah,10h
mov al,03h
mov bl,1 ;Мерцание
int 21h ;
;Введём задержку на 3 сек
.........
;Включим повышенную яркость
.........
;Введём задержку на 3 сек
.........
;Анализ буфера клавиатуры функцией DOS 06h int 21h с целью её завершения нажатием
;произвольной клавиши
.........
jnz out_program ;zf=0, есть символ, на выход
jmp continue ;zf=1, символа нет, продолжим работу
out_program: ;Восстановим мерцание (по умолчанию)
..........
exit: mov ax,4C00h ;Вызов функции завершения программы
.........
5. Если в программе организован бесконечный цикл вывода данных на экран функциями BIOS (09h, 0Ah, 0Eh, 13h), то его нельзя будет аварийно прервать с помощью нажатия клавиш Ctrl+C (т.е. выйти из программы, как это можно сделать при использовании соответствующих функций DOS). Чтобы можно было это сделать, включите в тело цикла функцию 0Bh прерывания Int 21h.