Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 26_Системное программирование. Прерывани...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
109.06 Кб
Скачать

Массивы Mem

В Турбо Паскале имеется пять предварительно объявленных массивов: MEM, MEMW, MEML, PORT и PORTW. Первые три обеспечивают доступ к любому участку оперативной памяти по абсолютному адресу, два других - доступ к портам ввода-вывода.

Компонентами массива MEM являются данные типа BYTE, массива MEMW - типа WORD, массива MEML - типа LONGINT. Обращение к элементам этих массивов, т.е. их индексация, имеет специальный вид: каждый индекс представляет собой абсолютный адрес и состоит из двух выражений типа WORD; первое дает сегментную часть адреса, второе - смещение; выражения разделяются двоеточием. Например:

Меm[$0000:$1000] := 0; 

DataMem := MemWfSeg(p):0fs(p)]; 

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

Как следует из технического описания операционной системы MS-DOS, в памяти по адресу $F000:$FFFE располагается байт-указатель типа компьютера. Следующая программа прочтет этот байт и выведет на экран тип вашего ПК.

Пример 

begin

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

case Mem [$FOOO:$FFFE] of

$FF : WriteLn ('PC');

$FE : WriteLn('XT');

$FD : WriteLn('PCjr');

$FC : WriteLn('AT');

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

End;

readln 

end.

Компонентами массива PORT являются байты (тип BYTE), а массива PORTW - слова (тип WORD). Индексами этих массивов должно быть выражение типа BYTE, указывающее номер нужного порта. Присвоение значения элементу массива PORT или PORTW приведет к записи в порт, упоминание элемента в выражении - к чтению из порта. Компоненты массивов PORT и PORTW нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы не употребляются без индексных выражений.

Пример.

Var z:byte;

Begin

Z:=mem[0000:0001]; {чтение ячейки памяти}

Writeln(z); {вывод считанного значения}

Mem[0000:0001]:=5; {изменение значения ячейки памяти}

Writeln(Mem[0000:0001]) {вывод нового значения}

End.

Когда в память требуется занести или считать по указанному адресу слово (два байта) или двойное слово (четыре байта) используются массивы MemW и MemL соответственно.

Отметим, что для указания базового сегмента и смещения в некоторых случаях удобно использовать стандартные функции Seg и Ofs:

Mem[Seg(<имя_переменной>):Ofs(<имя_переменной>)]:=<значение>.

Прерывания

Операционная система осуществляет управление с помощью прерываний. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий, например ввод-вывод данных или обработка ошибок, с последующим возобновлением выполнения прерванной программы.

Прерывания могут быть внешними и внутренними. Внешние прерывания вызываются внешними по отношению к МП событиями и являются непланируемыми прерываниями. Внутренние прерывания возникают внутри МП во время вычислительного процесса. К их возбуждению приводит 1 из 2-х причин:

  • ненормальное внутреннее состояние МП, возникшее при выполнении некоторой команды программы. Такие события принято называть исключительными ситуациями, и относятся они к не планируемым;

  • обработка машинной команды вызова прерываний. Этот тип прерываний называется программным. Это планируемое прерывание, т. к. с его помощью программист обращается в нужное для него время за обслуживанием своих запросов либо к ОС, либо BIOS, либо к собственным программам обработки прерываний.

Под системой прерываний понимают совокупность программных и аппаратных средств, реализующих механизм прерываний. К аппаратным средствам системы прерываний относятся выводы МП, микросхема программируемого контроллера прерываний, внешние устройства. К программным средствам системы прерываний реального режима относятся:

  1. Таблица векторов – содержит в определённом формате, который зависит от режима работы МП, указатели на процедуры обработки соответствующих прерываний.

  2. Соответствующие флаги в регистре флагов flags/eflags:

If - флаг прерываний – предназначен для запрещения аппаратных прерываний по входу intr, если if=1, то МП обрабатывает прерывания, если if=0, МП игнорирует сигналы на входе intr.

Tf - флаг трассировки – переводит МП в режим покомандной работы.

  1. машинные команды МП вызова прерываний.