Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Bh - Выбрать цветовую палитру.




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

Ch, 0Dh - Записать/прочитать графическую точку.

Можно высветить точку заданного цвета в заданном месте экрана для выбранной дисплейной страницы или прочитать значение цвета любой точки на экране соответственно.

При вызове:

AH = 0Ch

АL =цвет (номер цветового регистра)

ВН =страница

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

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

INT 10h, функция 0Dh. Чтение пиксела.

Читает из видеобуфера цвет пиксела в заданной графической позиции.

При вызове:

AH = 0Dh

ВН =страница

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

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

При возврате: АL =цвет (номер цветового регистра)

Eh - Запись символа на экран в стиле TTY.

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

Fh - Прочитать текущий видеорежим.

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

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

H - Запись строки.

Для машин класса AT и выше при наличии дисплейных адаптеров EGA или VGA эта функция позволяет вывести на экран произвольную строку символов заданной длины, с заданным атрибутом и в заданном месте экрана. Можно также задать номер дисплейной страницы.

Если вы не можете использовать эту функцию (Ваш компьютер - XT или дисплейный адаптер - CGA), единственный способ вывести на экран строку символов с помощью прерывания INT 10h - вызывать в цикле функции 09h, 0Ah или 0Eh для вывода строки по одному символу.

______________________________________________________________________________

Пример 2. Программа выводит на экран синусоиду в режиме 13h.

; Рисуем синусоиду в графическом режиме 13h

; также рисуем координатные оси

; синус определяем как sin(z)=((2*tan(z))/(1+tan(z)*tan(z)))

masm

model small

.stack 100h

.data

B Dd 0

Y dd?

X dw?

B1 dd 0

D1 dd 2.0

MASSHTAB dd 10.0

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

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

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

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

step dd 0.1

.code

start:

mov ax,@data

mov ds,ax

 

; Получить и сохраняем текущий видео режим

mov ah,0Fh

int 10h

mov saveMode,al

 

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

mov ah,0h

mov al,13h

int 10h

 

finit

FLD B1

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

 

L1:

FPTAN

FLD ST(1)

FLD ST(0)

FMUL

FADD

FLD ST(0)

FLD ST(2)

FLD D1

FMUL

FLD ST(1)

FDIV

FLD MASSHTAB

FMUL

FLD ST(0)

FRNDINT

fist Y

mov ax,word ptr[Y]

mov bx,100

sub bx,ax

mov dx,bx; в dx записываем точку Y

push cx

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

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

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

mov cx,currentX; в cx записываем точку X

int 10h

inc currentX

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

pop cx

finit

fld B

FLD step

fadd

fst B

loop L1

 

;Рисуем координатную ось OX

mov cx,320

L2:

mov dx,100; в dx записываем точку Y

push cx

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

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

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

mov cx,currentX; в cx записываем точку X

int 10h

inc currentX

pop cx

loop L2

;--------------------------------------------------------

;Рисуем координатную ось OY

mov cx,200

L3:

push cx

mov cx,100; в cx записываем точку X

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

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

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

mov dx,currentY; в dx записываем точку Y

int 10h

inc currentY

pop cx

loop L3

;--------------------------------------------------------

 

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

mov ah,0

int 16h

 

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

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

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

int 10h

 

exit:;выход

mov ax,4c00h;стандартное завершение программы

int 21h

end start

______________________________________________________________________________

 

Обслуживание клавиатуры.

Обработчик прерывания INT 16h выполняет несколько функций, связанных с обслуживанием клавиатуры.

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

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

Обслуживание дисковой подсистемы.

Прерывание INT 13h предназначено для обслуживания жестких и флоппи-дисков. Многочисленные функции прерывания INT 13h выполняют все операции по вводу/выводу на диски. Мы сделаем обзор только самых важных функций, остальные будут рассмотрены в книге 3, посвященной файловой системе.

H - Сброс дисковой системы.

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

H - Получить состояние дисковой системы.

Эта функция позволяет проверить результат выполнения предыдущей операции. Если операция завершилась аварийно, при помощи этой функции можно определить код ошибки.

H/03h - Чтение/запись секторов.

Выполняется чтение секторов в оперативную память компьютера или запись информации из памяти в сектора диска.

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

H - Проверка секторов.

Функция проверяет сектора на правильность циклической контрольной суммы, CRC (Cyclic Redundancy Check); записи содержимого секторов в память не происходит.

Вывод на принтер (параллельный порт).

BIOS содержит простейшую поддержку принтера - три функции прерывания INT 17h. Это функция 01h - инициализация принтера, 02h - опрос состояния принтера и 00h - вывод символа на принтер.

Поскольку к персональному компьютеру можно подключить несколько последовательных портов, при обращении к принтеру следует указывать номер порта.

Обслуживание последовательного порта связи

Функции прерывания INT 14h обслуживают порт последовательной передачи данных RS232. С помощью этих функций можно задавать формат и скорость передачи данных, определять состояние портов и, конечно, выполнять побайтную передачу данных.

Работа с системными часами.

Функции прерывания INT 1Ah обслуживают часы, имеющиеся в каждом компьютере. С их помощью вы можете установить время и дату, опросить текущее состояние часов. Вы можете работать с часами реального времени, которые имеются на машинах класса не ниже AT.

Для AT можно установить на заданное время "будильник" - в нужный момент будет вызвано прерывание "будильника" с номером 4Ah. Обработчик прерывания INT 4Ah может подать звуковой сигнал или вывести на экран предупреждающее сообщение.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...