Реферат Курсовая Конспект
Обработка прерываний - раздел Информатика, Элементы Системного Программирования На Паскале. Ошибка! Закладка Не ...
|
Элементы системного программирования на Паскале. Ошибка! Закладка не определена.
Распределение памяти. 1
Специальные адреса памяти. 2
Переменная Absolute. 3
Массивы Mem... 3
Прерывания. 4
Обработка прерываний. 5
Использование прерываний в Паскале. 5
Контрольные вопросы.. 6
Лекция № 26
Основными элементами системного программирования являются регистры, сегменты и прерывания.
Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В Паскале имеется специальный тип Registers, который описывается следующим образом:
type Registers = record {Registers record used by Intr and MsDos}
Var
str:string[10];
len: byte absolute str; {len налагается на str, т.е. len будет содержать значение первого байта переменной str, содержащего текущую длину строки}
i:integer;
c:char;
Begin
c:='a';
str:='a';
writeln(str);
writeln('length of string =',len);
For i:=1 to 3 do
Begin
str:=str+succ(c);
writeln(str);
writeln('length of string =',len);
c:=succ(c);
end;
Readln
End.
Результат работы:
a
length of string = 1
ab
length of string = 2
abc
length of string = 3
abcd
length of string = 4
Для работы с абсолютными переменными в языке Паскаль имеется ряд стандартных подпрограмм:
Addr(Id) – возвращает адрес расположения первого байта переменной с идентификатором Id. Результат имеет длину два слова и содержит базовый адрес и величину смещения.
Ofs(Id) – возвращает величину смещения в сегменте первого байта указанной переменной, процедуры или функции, определяемой Id. Результат имеет целочисленное значение.
Seg(Id) – возвращает адрес сегмента, содержащего первый байт переменной с идентификатором Id. Результат имеет целочисленный тип.
CSeg– возвращает базовый адрес сегмента кода. Результат имеет целочисленный тип.
DSeg– возвращает базовый адрес сегмента данных. Результат имеет целочисленный тип.
Массивы 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(<имя_переменной>)]:=<значение>.
Контрольные вопросы
– Конец работы –
Используемые теги: обработка, прерываний0.053
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Обработка прерываний
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов