Иллюстрированный самоучитель по Турбо Паскалю
Прямое обращение к памяти и портам ввода - вывода
В Турбо Паскале имеется пять предварительно объявленных массивов: 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 располагается байт-указатель типа компьютера. Следующая
программа (пример 11.5) прочтет этот байт и выведет на экран тип Вашего ПК.
Пример 11.5
begin
Write (' Тип компьютера: ') ;
case Mem [$FOOO:$FFFE] of
$FF : WriteLn ('PC');
$FE : WriteLn('XT');
$FD : WriteLn('PCjr');
$FC : WriteLn('AT');
$F9 : WriteLn('совместимый с PC')
end
end.
Компонентами массива PORT являются байты (тип BYTE), а массива PORTW - слова
(тип WORD). Индексами этих массивов должно быть выражение типа BYTE, указывающее
номер нужного порта. Присвоение значения элементу массива PORT или PORTW
приведет к записи в порт, упоминание элемента в выражении - к чтению из порта.
Компоненты массивов PORT и PORTW нельзя передавать в качестве параметров
процедурам или функциям. Эти идентификаторы не употребляются без индексных
выражений.