Министерство образования РФ
Хабаровский государственный технический университет
Заочный факультет ускоренного обучения
Кафедра «Вычислительная техника»
По дисциплине «Организация ЭВМ и систем»
Изучение системы прерываний,
работающих с параметрами системы и таймером.
Работу выполнил: студент Войтенок А.А.
Шифр № 4кПОв 0013796
Проверил: доцент к.т.н. Шоберг А.Г.
г. Хабаровск
2002 г.
Цель работы: изучить систему прерываний, позволяющих определять параметры системы. Освоить работу с такими прерываниями и программирование таймера.
В работе изучены следующие прерывания:
Назначение |
Номер прерыва-ния, функции |
Входные параметры |
Выходные параметры |
Запрос списка присоединённого оборудования |
11h |
AX- соответствует присоединённому оборудованию |
|
Запрос размера физической памяти |
12h |
AX= размер памяти в Кб |
|
Обслуживание таймера |
1Ah |
||
03h- Установка текущего времени RTC |
CH=часы CL=минуты DH=секунды DL=0- календарное время, 1- летнее время |
||
06h – Установка времени побудки |
CH=часы CL=минуты DH=секунды |
CF=1 если часы реального времени неисправны |
|
07h – Сброс будильника |
Определены параметры системы:
Размер физической памяти |
640 К |
Начальный видео режим |
40х25 c с поддержкой цвета |
Последовательный принтер |
Установлен |
Количество RS232 |
2 |
Количество дисководов ГМД |
1 |
Количество принтеров |
3 |
Контрольные вопросы.
1. Программные прерывания в микропроцессоре реализованы с помощью команды INT. Команда имеет один 8 битовый непосредственный операнд, равный номеру вектора прерывания, к которому происходит обращение. Действие команды INT n подобно дальнему вызову CALL, где адрес перехода находится по адресу 4*n. Отличие от команды CALL в том, что до занесения в стек адреса возврата в него помещается регистр флагов FLAGS или EFLAGS.
2. При определении параметров системы по прерыванию 11h устанавливается: количество дискетных дисководов, последовательных портов, принтеров, начальный видео-режим, наличие сопроцессора.
3. Распределение памяти в системе осуществляется блоками, которые сопровождаются заголовками MCB. Для управления памятью используются прерывания DOS 48h(назначить блок памяти), 49h(освободить блок памяти),
4Ah(изменить размер назначенного блока памяти).
4. Типы прерываний:
-внутренние прерывания процессора( 0, 1, 4);
-аппаратные, маскируемые и немаскируемые;
-программные.
Для встраивания собственного обработчика прерывания необходимо заменить вектор прерывания.
5.Часы RTC- часы с питанием от батареи, долговременное хранение даты и времени. Точность установки- до секунд. Интервальный таймер – счётчик интервалов времени, частота срабатывания 18,21 Гц. Интервальный таймер позволяет точнее измерять временные интервалы, его содержимое сбрасывается при выключении компьютера, переполняется через 24 часа после перезагрузки системы. День недели не устанавливается, есть возможность установить дату прерыванием BIOS INT 1Ah(функция 05h) и прерыванием DOS 21h (функция 2Bh) . Узнать день недели можно используя прерывание DOS 21h (функция 2Ah).
Текст программы:
data segment para public 'data'
M_INFO db 0dh,0ah,0dh,0ah,'Information 1 $'
M_TIME db 0dh,0ah, 'Set time 2 $'
M_STAND db 0dh,0ah, 'Set waker 3 $'
M_RESET_WAKE db 0dh,0ah, 'Reset waker 4 $'
M_QUIT db 0dh,0ah, 'Quit Esc $'
NL db 0dh,0ah,'$'
SEP db ':$'
SPC db ' $'
TEMP_WORD dw 0
TEMP_BYTE db 0
INPUT_STRING db 256 dup(0)
T_HEADER db 0dh,0ah,' SYSTEM INFORMATION $'
T_MEMORY db 0dh,0ah,'Physical memory size $'
T_DISK_OK db 0dh,0ah,'Disk drives present$'
T_SPR_OK db 0dh,0ah,'FPUr present$'
T_VIDEO db 0dh,0ah,'Initial video mode $'
T_DISKETTS db 0dh,0ah,'Disketts count $'
T_RS232 db 0dh,0ah,'RS232 count $'
T_GAME db 0dh,0ah,'GAME port present$'
T_SERIAL db 0dh,0ah,'Serial printer$'
T_PRINTERS db 0dh,0ah,'Printers count $'
T_4025 db '40x25 + color $'
T_8025 db '80x25 + color $'
T_8025BW db '80x25 black/white $'
T_NOT_USED db 'Not used $'
T_CLOCK db 0dh,0ah,'Clock $'
T_MINUTES db 0dh,0ah,'Minutes $'
T_SECONDS db 0dh,0ah,'Seconds $'
T_ERROR db 0dh,0ah,'Wakeup setting error $'
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_INFO
outtitle M_TIME
outtitle M_STAND
outtitle M_RESET_WAKE
outtitle M_QUIT
mov ah,00h
int 16h
cmp ah,01h
jne L1
jmp exit
L1: cmp ah,02h ; info
je info
jmp L2
info:
int 12h
mov TEMP_WORD,ax
outnumber T_MEMORY,TEMP_WORD,INPUT_STRING,2
int 11h
mov bx,ax
test ax,0001h
jne spr
outtitle T_DISK_OK
spr:
test ax,0002h
jne game
outtitle T_SPR_OK
game: test ax,1000h
jne serial
outtitle T_GAME
serial: test ax,2000h
jne video
outtitle T_SERIAL
video: outtitle T_VIDEO
and ax,0030h
shr ax,4
test ax,0001h
jne m8025
outtitle T_4025
jmp disketts
m8025: test ax,0002h
jne m8025bw
outtitle T_8025
jmp disketts
m8025bw: test ax,0003h
jne bw
outtitle T_8025BW
jmp disketts
bw: outtitle T_NOT_USED
mov ax,bx
disketts:
and ax,00C0h
shr ax,6
inc ax
add ax,30h
outtitle T_DISKETTS
mov dl,al
mov ah,02h
int 21h
mov ax,bx
and ax,0E00h
shr ax,9
add ax,30h
outtitle T_RS232
mov dl,al
mov ah,02h
int 21h
mov ax,bx
and ax,0C000h
shr ax,14
add ax,30h
outtitle T_PRINTERS
mov dl,al
mov ah,02h
int 21h
jmp circle
L2: cmp ah,03h
je set_time
jmp L3
set_time:
outtitle T_CLOCK
push offset INPUT_STRING
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
mov ch,TEMP_BYTE
outtitle T_MINUTES
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
mov cl,TEMP_BYTE
outtitle T_SECONDS
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
pop ax
mov dh,TEMP_BYTE
xor dl,dl
mov ah,03h
int 1Ah
jmp circle
L3:
cmp ah,04h
je set_wake
jmp L4
set_wake:
outtitle T_CLOCK
push offset INPUT_STRING
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
mov ch,TEMP_BYTE
outtitle T_MINUTES
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
mov cl,TEMP_BYTE
outtitle T_SECONDS
CALL asciiz_input
push offset TEMP_BYTE
CALL asciiz_to_BCD
pop ax
pop ax
mov dh,TEMP_BYTE
xor dl,dl
mov ah,06h
int 1Ah
jnc cnt
outtitle T_ERROR
cnt: jmp circle
L4:
cmp ah,05h
je reset_wake
jmp circle
reset_wake:
mov ah,07h
int 1Ah
jmp circle
exit:
mov ax,4c00h
int 21h
main endp
code ends
end main
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.