Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_8-11_Massivy-struktury.doc
Скачиваний:
11
Добавлен:
21.12.2018
Размер:
1.47 Mб
Скачать

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

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

При вызове:

AH=0Dh

ВН=страница

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

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

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

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

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

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

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

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

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

Для машин класса 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, посвященной файловой системе.

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]