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

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

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

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

...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

mov AH, 0ah

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

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

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

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

int 10h

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

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

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

Номер цвета

Палитра 0

Палитра 1

0

цвет фона

цвет фона

1

зеленый

синий

2

красный

малиновый

3

коричневый

белый

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

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

BH = 0, тогда

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

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

режима)

BH = 1, тогда

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

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

0Ch, 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

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

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

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

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

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

На входе: 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-клавиш. определить, какие

shift-клавиши нажаты в данный момент, находится

ли клавиатура в состоянии NumLock, и т.п.

Выход: AL = статус клавиатуры

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

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

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

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

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

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