Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

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

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

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

 


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

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

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

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

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

При вызове:

AH=00h

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

Основные графические режимы VGA

Номер режима Разрешение Число цветов
11h 640x480  
12h 640x480  
13h 320x200  

 


Стандартные графические режимы SVGA могут быть 4-, 8-, 15-, 16-, 24- и 32-битными.

1) 4-битные режимы (16 цветов):

VGA

012h: 640x480 (64 Кб)

VESA VBE 1.0

102h: 800x600 (256 Кб)

104h: 1024x768 (192 Кб)

106h: 1280x1024 (768 Кб)

 

Каждый пиксель описывается одним битом, для вывода цветного изображения требуется программирование видеоадаптера на уровне портов ввода-вывода.

 

2) 8-битные режимы (256 цветов):

VGA

013h: 320x200 (64 Кб)

VBE 1.0

100h: 640x400 (256 Кб)

101h: 640x480 (320 Кб)

103h: 800x600 (512 Кб)

105h: 1024x768 (768 Кб)

107h: 1280x1024 (1,3 Мб)

VBE 2.0

120h: 1600x1200 (1,9 Мб)

 

Каждый пиксель описывается ровно одним байтом. Значение байта — нoмер цвета из палитры, значения цветов которой можно изменять, например вызывая подфункцию 09 видеофункции 4Fh.

 

3) 15-битные режимы (32 К цветов):

VBE 1.2

10Dh: 320x200 (128 Кб)

110h: 640x480 (768 Кб)

113h: 800x600 (1 Мб)

116h: 1024x768 (1,5 Мб)

119h: 1280x1024 (2,5 Мб)

VBE 2.0

121h: 1600x1200 (3,8 Мб)

 

Каждый пиксель описывается ровно одним словом (16 бит), в котором биты 0 – 4 содержат значение синей компоненты цвета, биты 5 – 9 — зеленой, а биты 10 – 14 — красной. Бит 15 не используется.

 

4) 16-битные режимы (64 К цветов):

VBE 1.2

10Eh: 320x200 (128 Кб)

111h: 640x480 (768 Кб)

114h: 800x600 (1 Мб)

117h: 1024x768 (1,5 Мб)

11Ah: 1280x1024 (2,5 Мб)

VBE 2.0

121h: 1600x1200 (3,8 Мб)

 

Так же как и в 15-битных режимах, каждый пиксель описывается ровно одним словом. Обычно биты 0 – 4 (5 бит) содержат значение синей компоненты, биты 5 – 10 (6 бит) — зеленой, а биты 11 – 15 (5 бит) — красной.

 

5) 24-битные и 32-битные режимы (16 М цветов):

VBE 1.2

10Fh: 320x200 (192 Кб)

112h: 640x480 (1 Мб)

115h: 800x600 (1,4 Мб)

118h: 1024x768 (2,3 Мб)

11Bh: 1280x1024 (3,7 Мб)

VBE 2.0

122h: 1600x1200 (7,7 Мб)

 

 


Основные функции BIOS при работе с графикой прерывания 10h

H - Установить характеристики курсора.

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

На входе: AH = 01h - изменение размеров курсора;

CH = верхняя граница курсора:

D3-D0 верхняя граница курсора

D5-D4 00b - обычный курсор

B - невидимый курсор

B - мигающий курсор

B - быстро мигающий курсор

D7-D6 не используются;

CL = нижняя граница курсора (0-31).

На выходе: Не используются.

H - Установить положение курсора.

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

 

На входе: AH = 02h - установка позиции курсора;

BH = номер страницы видеопамяти;

DH = номер строки (0-24);

DL = номер столбца (0-79).

На выходе: Не используются.

 

Mov ah,2; запрос на установку курсора

Mov dh,8; номер строки - 8

Mov dl,12; номер столбца - 12

Mov bh,0; номер страницы

Int 10H


H - Получить положение курсора.

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

На входе: AH = 03h - определение размеров и координат

Курсора

BH = номер страницы видеопамяти.

На выходе: CH = верхняя граница курсора;

CL = нижняя граница курсора;

DH = позиция текущей строки курсора;

DL = позиция текущего столбца курсора.

H - Получить положение светового пера.

Световое перо используется относительно редко, однако если оно есть, то функция 04h позволит вам работать с этим устройством.

H - Выбрать активную страницу дисплейной памяти.

Компьютер хранит, как правило, не один отображаемый образ экрана, а несколько. Для этого видеопамять (память для хранения видеоизображения, находится на плате видеоконтроллера) разбивается на страницы. Отображается только активная страница видеопамяти.

На входе: AH = 05h - выбор активной страницы

видеопамяти;

AL = номер страницы видеопамяти, которая

Станет активной.

На выходе: Не используются.

 

06h, 07h - Прокрутка (скроллинг) окна вверх/вниз.

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


H, 09h - Прочитать/записать символ и атрибут.

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

Атрибуты символов: мерцание, цвет фона, интенсивность, цвет символов.

На входе: AH = 08h - чтение символа и его атрибутов;

BH = номер страницы видеопамяти.

На выходе: AL = ASCII-код символа;

AH = байт атрибутов символа.

Пример: считать символ и его атрибут из текущей позиции курсора на странице page:

...

Mov ah,8; читаем символ и его атрибуты

Mov bh,page; выбираем страницу видеопамяти page

Int 10h; считываем символ и его атрибут

Mov char,al; сохраняем полученный ASCII-код символа

Mov attr,ah; и его атрибут

...

На входе: AH = 09h - запись символа с атрибутом;

AL = ASCII-код записываемого символа;

BH = номер страницы видеопамяти;

BL = атрибут (для текстового режма) или

цвет (для графического режима);

CX = число записываемых символов.

На выходе: Не используются.


Ah - Записать символ.

Запись символа в видеопамять без задания для него индивидуального значения атрибута. Используется текущий атрибут. Можно задавать кратность записи.

Записывает символ ASCII кода в текущую позицию курсора. После вывода курсор следует сместить к следующей позиции функцией 02h.

На входе: AH = 10h - запись символа без атрибута;

AL = ASCII-код записываемого символа;

BH = номер страницы видеопамяти;

BL = цвет (для графического режима);

CX = число записываемых символов.

На выходе: Не используются.

 

Mov AH, 0ah

mov AL, ‘a’; выводимый символ (или его порядковый

; номер в таблице)

Mov BH, 0;установка видеостраницы

Mov CX, 1;коэффициент повторения

Int 10h


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

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

Стандартные цветовые палитры в режимах 4,5,6.

Номер цвета Палитра 0 Палитра 1
  цвет фона цвет фона
  зеленый синий
  красный малиновый
  коричневый белый

Функция 0Bh имеет следующий формат вызова:

На входе: AH = 0Bh - установка цветовой палитры;

BH = 0, тогда

BL = цвет фона и рамки (для графического

режима) или цвет рамки (для текстового

режима)

BH = 1, тогда

BL = номер палитры (0 или 1).

На выходе: Не используются.

 


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

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

При вызове:

AH=0Ch

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

ВН=страница

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

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

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

При вызове:

AH=0Dh

ВН=страница

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

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

При возврате: АL=номер цвета пиксела.

Пример: определим номер цвета пиксела, имеющего координаты x_pos и y_pos:

Mov ah,0Dh

mov cx,x_pos

mov dx,y_pos

Int 10h

; сохраняем полученную величину

mov color_number,al


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

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

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

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

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

На входе: AH = 0Fh - определение текущего режима

Видеоадаптера.

На выходе: AH = число символов в строке;

AL = номер текущего режима;

BH = номер активной страницы видеопамяти.

 


___________________________________________________

Пример 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

_________________________________________________

 


Пример: Написать программу вывода на экран монитора четырех смежных квадратов в шахматном порядке: два синих два желтых.

 

masm

model small

.stack 100h

.data

.code

start:;точка входа

mov ax,@data

mov ds,ax

mov ax,0002h;установка видеорежима с номером в AL

int 10h;прерывание BIOS

mov ax,0600h;прокрутка вверх (AL=0 - заполняет экран

;пробелами)

mov bh,01100000b;устанавливает цвет фона(желтый) и

;символа

mov cx,0000h;координаты верхнего левого угла

;(строка, столбец)

mov dx,0306h;координаты нижнего правого угла

int 10h

mov bh,00010000b;синий

mov cx,0007h

mov dx,030Dh

int 10h

 

mov cx,0400h

mov dx,0706h

int 10h

 

mov bh,01100000b;желтый

mov cx,0407h

mov dx,070Dh

int 10h

 

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

int 21h

end start


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

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

Вход:

AH=00H – читать (ожидать) следующую нажатую клавишу

Выход: AL = ASCII символ (если AL=0, AH содержит

Расширенный код ASCII)

AH = сканкод или расширенный код ASCII

Вход:

AH=01H проверить готовность символа (и показать его, если

Так)

Выход: ZF = 1 если символ не готов.

ZF = 0 если символ готов.

AX = как для подфункции 00H (но символ здесь не

Удаляется из очереди).

Вход:

AH=02H читать состояние shift-клавиш. определить, какие



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 415; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.19.115 (0.008 с.)