Изучение системы прерываний, работающих с параметрами системы и таймером

Страницы работы

6 страниц (Word-файл)

Содержание работы

Министерство образования РФ

Хабаровский государственный технический университет

Заочный факультет ускоренного обучения

Кафедра «Вычислительная техника»

ЛАБОРАТОРНАЯ РАБОТА № 5

По дисциплине «Организация ЭВМ и систем»

Изучение системы прерываний,

 работающих с параметрами системы и таймером.

Работу выполнил: студент Войтенок А.А.

Шифр № 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

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
51 Kb
Скачали:
0