Как известно, память для переменных, объявленных в разделе Var, выделяется при старте блока, в котором содержится данный раздел, в порядке объявления имен переменных. Местоположение блока в пространстве оперативной памяти ЭВМ определяет операционная система. В то же время Турбо Паскаль предоставляет возможность программисту так описать переменные, чтобы им были назначены заранее заданные адреса. Такие переменные называются абсолютными; их описание после имени типа должно содержать так называемое абсолютное предложение.
Синтаксис абсолютного предложения:
Структура абсолютного предложения имеет два альтернативных варианта.
В первом варианте производится задание абсолютного адреса в форме, принятой в операционной системе MS DOS (адрес сегмента и смещение - см.раздел "Адресация операндов").
Пример 1.
Type ScreenChar = record
Symbol : char;
Attrib : byte;
end;
ScreenAr = array[1..25,1..80] of ScreenChar;
Vary : real absolute $A100:$0000;
Screen : ScreenAr absolute $B800:$0000;
Здесь переменным y и Screen назначаются конкретные адреса оперативной памяти. В частности, значение $B800:$0000 определяет фиксированный адрес видеопамяти.
Примечание. В конструкции record .. end объединяются переменные различного типа (см.раздел "Записи").
Во втором варианте для абсолютной переменной назначается адрес другой, ранее объявленной переменной.
Пример 2 (аналогично примеру 2 раздела "Приведение типов переменных").
TypeByteAr = array[1..2] of byte;
Var W : word;
Br : ByteAr absolute W;
Begin
Br[1]:=10; Br[2]:=20;
Writeln(W,' ',Br[1],' ',Br[2]);
W:=2500;
Writeln(W,' ',Br[1],' ',Br[2]);
В результате работы программы будет отпечатано:
5130 10 20
2500 196 9
Переменные W и Br адресуют одно и то же поле памяти. Другими словами, одно и то же поле памяти размером два байта имеет два имени: имя W и имя Br. Если в программе используется имя W, то это поле можно обрабатывать как переменную типа word, для имени Br допустимые операции определяются именем типа ByteAr.
При совмещении переменных с помощью директивы absolute не рекомендуется в разделе Var использовать описание типа вместо имени типа. Нарушение этого правила не анализируется компилятором, но может привести к неправильной работе программы, вплоть до ее "зависания", особенно при использовании сопроцессора.