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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|