Иллюстрированный самоучитель по Turbo Pascal

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

В Турбо Паскале имеется пять предварительно объявленных массивов: 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 нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы не употребляются без индексных выражений.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.