Министерство образования РФ
Хабаровский государственный технический университет
Заочный факультет ускоренного обучения
Кафедра «Вычислительная техника»
По дисциплине «Организация ЭВМ и систем»
Исследование прерываний, работающих с видеосистемой
в персональном компьютере
Работу выполнил: студент Войтенок А.А.
Шифр № 4кПОв 0013796
Проверил: доцент к.т.н. Шоберг А.Г.
г. Хабаровск
2002 г.
Цель работы: изучить принципы управления видеорежимами в персональном компьютере и получить навыки работы с экраном, используя систему прерываний BIOS.
В работе изучены следующие функции прерывания BIOS 10h:
Назначение |
Функция |
Входные параметры |
Выходные параметры |
Установка видеорежима |
00h |
AL= видеорежим |
|
Установка размера курсора |
01h |
CH=верхняя линия сканирования CL=нижняя линия сканирования линии задаются в диапазоне 0-13 |
|
Установка позиции курсора |
02h |
BH=номер страницы DH=строка DL=столбец |
|
Прокрутка экрана вверх |
06 |
AL=количество прокручиваемых строк СH,CL= координаты верхнего левого угла прокручиваемого участка DH,DL=координаты правого нижнего угла |
|
Прокрутка экрана вниз |
07 |
AL=количество прокручиваемых строк СH,CL= координаты верхнего левого угла прокручиваемого участка DH,DL=координаты правого нижнего угла |
|
Вывод символа в текущую позицию экрана |
0Ah |
AL=символ BH=номер страницы BL=цвет в графическом режиме CX=число символов |
|
Получение текущего видеорежима |
0Fh |
AL=текущий видеорежим, AH=число символов в строке BH=номер страницы |
Контрольные вопросы.
2. а) Установка курсора, начинающегося на 5 линии сканирования и заканчивающийся на 12 линии:
mov ah,01h
mov ch,5
mov cl,12
int 10h
б) Прокрутка экрана(25x80) на 10 строк:
mov ah,06
mov al,10
mov bh,07
mov cx,0000
mov dx,184Fh
int 10h
3. Максимальное количество цветов в палитре как для фона, так и для текста равно 16 в текстовом режиме.
4. Сиреневый на ярко-голубом 9Dh
Коричневый на жёлтом E6h
Красный на сером с мерцанием - не существует, красный на чёрном с мерцанием 84h
Текст программы.
data segment para public 'data'
INPUT_STRING db 128 dup(0)
BUFFER db 64 dup(0)
M_MODE db 0dh,0ah,0dh,0ah,'Current video mode 1 $'
M_SET db 0dh,0ah, 'Set new mode 2 $'
M_CURSOR db 0dh,0ah, 'Cursor shape 3 $'
M_POSITION db 0dh,0ah, 'Cursor position 4 $'
M_CLEAR db 0dh,0ah, 'Screen clear 5 $'
M_SCROLL_UP db 0dh,0ah, 'Scroll UP 6 $'
M_SCROLL_DOWN db 0dh,0ah, 'Scroll DOWN 7 $'
M_PUT_CHAR db 0dh,0ah, 'Put char 8 $'
M_QUIT db 0dh,0ah, 'Quit Esc $'
T_MODE db 0dh,0ah,'Video mode : $'
T_TOP db 0dh,0ah,'Top line : $'
T_BOTTOM db 0dh,0ah,'Bottom line : $'
T_XPOSITION db 0dh,0ah,'Column : $'
T_YPOSITION db 0dh,0ah,'String : $'
T_CHAR_IN_STRING db 0dh,0ah,'Char in string : $'
T_PAGE db 0dh,0ah,'Page number : $'
TEMP_BYTE db 0
NL db 0dh,0ah,'$'
DECIM db 10
data ends
stk segment stack
db 256 dup(0)
stk ends
code segment para public 'code'
main proc
assume cs:code,ds:data,ss:stk,es:data
mov ax,data
mov ds,ax
circle:
outtitle M_MODE
outtitle M_SET
outtitle M_CURSOR
outtitle M_POSITION
outtitle M_CLEAR
outtitle M_SCROLL_UP
outtitle M_SCROLL_DOWN
outtitle M_PUT_CHAR
outtitle M_QUIT
mov ah,00h
int 16h
cmp ah,01h
jne L1
jmp exit
L1: cmp ah,02h ; определение видео режима
je L11
jmp L2
L11:
mov ah,0Fh
int 10h
mov TEMP_BYTE,al
outnumber T_MODE,TEMP_BYTE,BUFFER,1
mov TEMP_BYTE,ah
outnumber T_CHAR_IN_STRING,TEMP_BYTE,BUFFER,1
mov TEMP_BYTE,bh
outnumber T_PAGE,TEMP_BYTE,BUFFER,1
jmp circle
L2: cmp ah,03h ; установка видео-режима
jne L3
outtitle T_MODE
push offset INPUT_STRING
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_byte
pop ax
pop ax
mov ah,00h
mov al,TEMP_BYTE
int 10h
jmp circle
L3:
cmp ah,04h ; замена формы курсора
jne L4
outtitle T_TOP
push offset INPUT_STRING
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_byte
pop bx
mov ch,TEMP_BYTE
outtitle T_BOTTOM
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_byte
pop bx
pop bx
mov cl,TEMP_BYTE
mov ah,01
int 10h
jmp circle
L4:
cmp ah,05h ; позиционирование курсора
jne L5
outtitle T_XPOSITION
push offset INPUT_STRING
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_byte
pop bx
mov dl,TEMP_BYTE
outtitle T_YPOSITION
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_byte
pop bx
pop bx
mov dh,TEMP_BYTE
mov bh,0
mov ah,02
int 10h
mov ah,07h
int 21h
jmp circle
L5: cmp ah,06h ;очистка экрана
jne L6
mov ax,0600h
mov bh,07
mov cx,0000
mov dx,184Fh
int 10h
mov ah,07h
int 21h
jmp circle
L6 :
cmp ah,07h ;прокрутка вверх
jne L7
mov ax,0601h
mov bh,07
mov cx,0000
mov dx,184Fh
int 10h
mov ah,07h
int 21h
jmp circle
L7 :
cmp ah,08h ;прокрутка вниз
jne L8
mov ax,0701h
mov bh,07
mov cx,0000
mov dx,184Fh
int 10h
mov ah,07h
int 21h
jmp circle
L8 :
cmp ah,09h
je L81
jmp circle
L81:
mov ah,07h
int 21h
mov ah,0Ah
mov bh,0
mov cx,3
int 10h
mov ah,07h
int 21h
jmp circle
exit:
mov ax,4c00h
int 21h
main endp
code ends
end main
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.