Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

Int 10h ; вызов прерывания bios

Функция 0Ch исполняется очень медленно, особенно при рисовании множества точек. Настоящие графические программы (такие как игры) записывают непосредственно в видеопамять, после того, как они рассчитали цвет и расположение точки.

Пример программы

Эта программа переключается в графический режим, рисует длинную линию, используя функцию 0Сh, затем ожидает нажатия клавиши и возвращается в прежний режим.

.model small

.stack 100h

.386

Mode_6 = 6 ; 640 X 200, 2 colors

Mode_13 = 0Dh ; 320 X 200, 16 colors

Mode_14 = 0Eh ; 640 X 200, 16 colors

Mode_15 = 0Fh ; 640 X 350, 2 colors

Mode_16 = 10h ; 640 X 350, 16 colors

Mode_17 = 11h ; 640 X 480, 2 colors

Mode_18 = 12h ; 640 X 480, 16 colors

Mode_19 = 13h ; 320 X 200, 256 colors

Mode_6A = 6Ah ; 800 X 600, 16 colors

.data

saveMode db ; Сохранить текущий видео режим

currentX dw 100 ; координата X

currentY dw 100 ; координата Y

color db 1 ; номер цвета

; В 2 цветном режиме 1 = белый, в 16 цветном 1 = синий

.code

start:

mov ax,@data

mov ds,ax

; Получить текущий видеорежим

mov ah,0Fh

int 10h

mov saveMode,al

; Переключиться в графический режим

mov ah,0 ; установка видеорежима

mov al,Mode_17 ; номер режима

int 10h

; Рисование прямой линии

LineLength = 100

mov dx,currentY

mov cx,LineLength ; счетчик цикла

L1:

push cx

mov ah,0Ch ; рисование точки

mov al,color ; цвет точки

mov bh,0 ; видео страница

mov cx,currentX

int 10h

inc currentX

;inc color ; используйте для разноцветной линии

pop cx

loop L1

; Ожидаем нажатия клавиши

mov ah,0

int 16h

; Возврат в прежний видеорежим

mov ah,0 ; установить видео режим

mov al,saveMode ; сохраненный видео режим

int 10h

; Выход из программы

mov ax,4C00h

int 21h

end start

Обзор прерываний BIOS

Получение информации об оборудовании

INT 11h - Получить список оборудования.

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

С помощью прерывания INT 11h, получают в регистре AX состав аппаратного обеспечения машины. Каждый бит в слове конфигурации отвечает за соответствующее устройство.

Значения битов в регистре AX:

Биты Значение

0 1 - система содержит НМД;

0 - система не содержит НМД.

1 1 - установлен арифметический сопроцессор;

0 - арифметический сопроцессор не установлен.

2-3 Объем основной памяти, установленной на материнской плате:

Биты: 3 2

0 1 - 16К;

1 0 - 32К;

1 1 - 64К и более.

4-5 Тип дисплейного контроллера и его режим:

Биты: 5 4

0 0 - не используется или EGA;

0 1 - CGA, EGA, VGA в режиме 40x25;

1 0 - CGA, EGA, VGA в режиме 80x25;

1 1 - монохромный контроллер.

6-7 Количество установленных НГМД:

Биты: 7 6

0 0 - установлен 1 НГМД;

0 1 - установлено 2 НГМД;

1 0 - установлено 3 НГМД;

1 1 - установлено 4 НГМД.

8 1 - используется контроллер прямого доступа к памяти;

0 - контроллер прямого доступа к памяти не используется.

9-11 Количество установленных портов последовательной передачи данных RS232S:

000 - нет портов;

001 - используется один порт;

.............

111 - используется 7 портов.

12 1 - используется игровой адаптер (джойстик);

0 - игровой адаптер не используется.

13 1 - установлен последовательный принтер (только для PC Jr).

14-15 Количество установленных принтеров:

00 - нет принтеров;

01 - используется 1 принтер;

10 - используется 2 принтера;

11 - используется 3 принтера.

INT 12h - Получить размер основной памяти.

Прерывание INT 12h возвращает в регистре AX количество имеющихся блоков памяти размером в один килобайт.

Если компьютер оборудован расширенной памятью (адресное пространство этой памяти находится выше границы в 1 мегабайт), то размер этой памяти в килобайтах можно узнать, вызвав прерывание INT 15h со значением регистра AX, равным 8800h.

Возвращает в регистре AX размер памяти в килобайтах.

Работа с дисплейным адаптером.

При вызове прерывания INT 10h регистр AH должен содержать номер функции, которую требуется выполнить. Остальные регистры при вызове прерывания содержат операнды. Приведем краткий обзор функций прерывания INT 10h.

00h - Задание видеорежима.

В процессе инициализации BIOS задает начальный режим адаптера исходя из его типа. Если нужен другой режим, отличный от исходного, то необходимо использовать функцию 00h.

При этом необходимо учитывать, что дисплейные адаптеры могут поддерживать не все режимы.

При вызове:

AH=00h

АL=видеорежим: