Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка прерываний.doc
Скачиваний:
48
Добавлен:
17.02.2017
Размер:
94.21 Кб
Скачать

Практическая часть

  1. Ввести программу.

  2. Запустить на выполнение.

  3. Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.

  4. Ответить на контрольные вопросы

  5. Оформить отчет

Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.

Program gettime;

Uses dos, crt;

Var

Regs: registers;

Begin

ClrScr;

regs.AH := $2C;

intr ($21, regs);

write (‘Системные часы показывают ’);

with regs do

begin

write (CH, ‘ час. ’ );

write (CL, ‘ мин. ’ );

write (DH, ‘. ’);

If DL < 10 then

Write(0);

Writeln(DL, ‘ сек. ’);

End;

Writeln(‘нажмите <Enter>’) ;

Readln;

End.

Задача 2 Так, прерывание с номером 18 ($12) возвращает в регистре AX объем оперативной памяти ПЭВМ. Пример программы выводящей на экран сообщение об этом объеме:

Program IntrDem;

Uses DOS;

Var

r: registers;

Begin

Intr($12, r);

writeln('Объем памяти = ', r.АХ, ' Кбайт')

Readln;

END.

Program MsDosDemo;

Uses DOS;

Var

R: registers;

Begin

r.AH: = $30;

MsDos(r);

write1n ('Версия операционной системы: г.АL, '.', г.АН)

END.

Задача 4. С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение.

Процедура GETINTVECT. Возвращает вектор прерывания с указанным номером; формат обращения GETINTVECT(< N >, < вектор >> Здесь < N > - выражение типа ВYТЕ, содержащее номер прерывания; < вектор > -переменная типа РOINTER, в которой возвращается адрес точки входа в процедуру обработки прерывания.

Uses DOS;

var

i: byte;

p: pointer;

Begin

for i:= 0 to 255 do

Begin

GetIntVec(i, p);

if (Seg(p^) <> 0) or (Ofs(p^) <> 0) then

write1n('N = ', i:3, 'Seg = ', Seg(p^):5, 'Ofs =', Ofs(p^):5);

End;

End.

Прямое обращение к памяти и портам ввода-вывода

  В Турбо-Паскале имеется пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW. Первые три обеспечивают доступ к любому участку оперативной памяти по абсолютному адресу, два другие - доступ к портам ввода-вывода.   Компонентами массива МЕМ являются данные типа ВYТЕ, массива МЕМW - типа WORD, массива МЕМL - типа LONGINT. Обращение к элементам этих массивов, т.е. их индексация, имеет специальный вид: каждый индекс представляет собой абсолютный адрес и состоит из двух выражений типа WORD; первое дает сегментную часть адреса, второе - смещение; выражения разделяются двоеточием:

Mem[$0000:$1000]:= 0;

DataMem:= MemW[Seg(p):Ofs(p)];

MemLong:= MemL[64:i*SizeOf(rea1)];

Задача 5. Как следует из технического описания операционной системы МS DOS, в ПЗУ BIOS по адресу $F000:$FFFE зашит байт-идентификатор типа компьютера. Таким образом можно определить тип компьютера, на котором запускается программа:

Program DMA_Demo;

Begin

Write('Тип компьютера: ');

Case Mem[$F000:$FFFE] of

$FF: writeln('PC');

$FE: writeln('XT');

$FD: writeln('PCjr');

$FC: write1n('AT');

$F9: writeIn('совместимый c PC');

End

End.

  Компонентами массива РОRТ являются байты, а массива РОRТW - слова. Индексами этих массивов должно быть выражение типа ВYТЕ, указывающее номер нужного порта. Присвоение значения элементу массива РОRТ или РОRТW приведет к записи в порт, упоминание элемента в выражении - к чтению из порта. Компоненты массивов РОRТ и РОRТW нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы нельзя употреблять без индексных выражений.

Контрольные вопросы

  1. Что представляют собой прерывания?

  2. Какие номера прерываний зарезервированы за BIOS. MS-DOS?

  3. Какие процедуры есть в Паскале для прямого обращения к функциям MS-DOS и BIOS?

  4. Особенность регистров общего назначения

  5. Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS

  6. С помощью каких процедур можно прочитать любой вектор?

  7. Охарактеризовать пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW.

Литература

  1. Попов,И.И. Операционные системы, среды и оболочки: Учебное пособие[Тескт]/И.И.Попов, Т.Л.Партыка - М.:ФОРУМ: ИНФРА-М,2009 -400с

  2. Олифер, В.Г. Сетевые операционные системы / В.Г. Олифер, А.А. Олифер – Спб.: Питер, 2006- 545с.

  3. Спицына,О.И. Операционные системы и среды: лекционные материалы[Текст]/О.И.Спицына –Старый Оскол:ООО ТНТ, 2004-80с.