Здавалка
Главная | Обратная связь

Теоретические указания



INT 10h, функция 00h. Установка видеорежима.

при вызове: AH= 00h

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

03h- текстовый, 10h- графический

INT 10h, функция 05h. Установка видеостраницы.

при вызове: AH= 05h

AL= страница

INT 10h, функция 0Сh. Запись пиксела.

при вызове: AH= 0Сh

AL= цвет

ВН= страница

СХ= графический столбец

DX= графическая строка

INT 10h, функция 0Fh. Получение видеорежима.

при вызове: AH= 0Fh

при возврате: AН= число символьных столбцов на экране

AL= видеорежим

ВН= активная видеостраница

INT 10h, функция 10h, подфункция 00h. Настройка цветового регистра.

при вызове: AH= 1000h

ВН= значение цвета в коде кзсКЗС

BL= номер цветового регистра (0…15)

INT 10h, функция 10h, подфункция 01h. Установка цвета края экрана.

при вызове: AH= 1001h

ВХ= значение цвета в коде кзсКЗС

INT 10h, функция 10h, подфункция 02h. Настройка цветовой палитры и установка цвета края экрана.

при вызове: AH= 1002h

ЕS:DХ= адрес 17-байтовой таблицы цветов

Каждый цветовой регистр содержит 6 значащих разрядов, которые определяют интенсивность красного, зеленого и синего цветов, дающих при смешивании требуемый цвет. Разряды 0, 1 и 2 закреплены за цветами красный, зеленый и синий с интенсивностью 2/3 максимальной, разряды 3, 4 и 5 – за теми же цветами с интенсивностью 1/3:

Номера разрядов 5 4 3 2 1 0

Веса цветов 34 16 8 4 2 1

Цвет к з с К З С

Например: 9 (с+С) – ярко – синий, 63 – ярко – белый, 7 – белый.

 

Задания

1. Установить графический режим и вывести в середину экрана цветной прямоугольник.

2. Установить графический режим и цвет фона. Вывести на экран текстовые строки с помощью различных функций.

3. Установить графический режим и вывести в середину экрана цветной прямоугольник. По нажатию клавиши производить смену цвета прямоугольника.

4. Нарисовать несколько перекрывающихся прямоугольных областей различных цветов.

 

Вопросы для самоконтроля

1. Назовите функцию, с помощью которой осуществляется установка видеорежима.

2. Назовите функцию, с помощью которой можно настроить цветовой регистр.

3. Назовите функцию, с помощью которой можно установить цвет края экрана.

4. Назовите функцию, с помощью которой можно настроить цветовую палитру и установить цвет края экрана.

5. Назовите подфункцию, с помощью которой можно настроить цветовую палитру и установить цвет края экрана.

Тема №13 Задачи на программирование контроллера прерываний

Цель занятия:Познакомиться с системными средствами распределения памяти, организацией дочерних процессов, научиться программировать, используя функции DOS (прерывание 21h), уметь работать с памятью.

 

Задания

1. Запретить прерывания от таймера. Выполнив программу, проанализировать результат с помощью команды DOS TIME или часов программы NC.

2. Разрешить прерывания от таймера.

3. Изучить процедуру чтения регистра обслуживаемых запросов контроллера прерываний IRS и влияние на его состояние сигнала EOI. Для этого написать программу обработчика аппаратных прерываний от таймера. В обработчике предусмотреть чтение состояния регистра обслуживаемых запросов до и после сигнала EOI. Поскольку программа использует минимум данных и почти не работает со стеком, она выполнена без сегментов данных и стека.

Text segment ‘code’

Assume cs:text, ds:text

Main proc

;настроим сегментный регистр DS на сегмент команд, чтобы можно было пользоваться

;обозначениями полей данных без префикса замены сегмента

push cs

push ds

;сохраним вектор 08h

mov ax,35h ;функция чтения вектора прерывания

mov al,08h ;номер читаемого вектора

int 21h

mov word ptr old_08h,bx ;сохраним системный вектор в

mov word ptr old_08h+2,es ;двухсловной ячейке old_08h

;заполним вектор 08h

mov ah,25h ;функция заполнения вектора

mov al,08h ;номер заполняемого вектора

mov dx,offset new_08h ;смещение нашего обработчика

int 21h

;остановим программу до нажатия клавиши

mov ah,01h ;функция ввода символа с клавиатуры

int 21h

;перед завершением программы восстановим содержимое

;вектора 08h

lds dx,old_08h ;DS:DX = системный вектор 08h

mov ax,25h ;функция заполнения вектора

mov al,08h ;номер заполняемого вектора

int 21h

;завершим программу обычным образом

old_08h dd 0 ;двухсловная ячейка для системного вектора

main endp

;обработчик прерываний 08h

new_08h proc

push ax ;сохраним используемые в обработчике

push es ;регистры

mov ax,0b800h ;настроим ES

mov es,ax ;на адрес видеобуфера

mov al,08h ;пошлем в контроллер прерываний команду

out 20h,al ;0Bh – завершение чтения регистра ISR

jmp $+2 ;небольшая задержка

in al,20h ;прочитаем регистр ISR

add al,’0’ ;преобразуем в символьную форму

mov ah,1eh ;произвольный атрибут символа

mov es:1680,ax ;выведем на экран

mov al,20h ;пошлем в ведущий контроллер

out 20h,al ;команду EOI

jmp $+2 ;небольшая

jmp $+2 ;задержка

in al,20h ;снова прочитаем регистр обслуживаемых запросов

add al,’0’ ;преобразуем в символьную форму

mov ah,4eh ;атрибут для наглядности другой

mov es:1690,ax ;выведем на экран в другое место

pop es ;восстановим сохраненные регистры

pop ax

iret ;возврат в прерванную программу

new_08h endp

text ends

end main

 

Вопросы для самоконтроля

1. Назовите функцию, которая осуществляет чтение вектора прерываний.

2. Назовите функцию, которая указывает на номер заполняемого вектора.

3. Назовите функцию, которая сохраняет используемые в обработчике регистры.

4. Назовите функцию, которая посылает в контроллер прерываний команду для завершения чтения регистра.

5. Назовите процедуру возврата в прерванную программу.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.