Переменные можно описать так, что они будут располагаться по
определенному адресу в памяти, и в этом случае они называются аб-
солютными переменными. Описание таких переменных должно содержать
после типа оператор absolute:
описание ┌────────┐ ┌─────────┐ ┌───┐ ┌─────────┐
абсолютной ───>│absolute├─┬─>│целое без├─>│ : ├─>│целое без├─┬─>
переменной └────────┘ │ │ знака │ └───┘ │ знака │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────────┐ │
└──────>│идентификатор├────────────┘
│ переменной │
└─────────────┘
Отметим, что список идентификаторов в описании переменной
при указании оператора absolute может содержать только один иден-
тификатор.
Первая часть оператора absolute содержит сегмент и смещение,
то есть адрес, по которому переменная должна быть размещена.
CrtMode : byte absolute $0040:$0049;
Первая константа обозначает базу сегмента, а вторая опреде-
ляет смещение внутри этого сегмента. Обе константы не должны вы-
ходить за пределы диапазона от $0000 до $FFFF (от 0 до 65535).
В программах защищенного режима DOS и в Windows первую форму
оператор absolute нужно использовать очень аккуратно, если вообще
стоит это делать. Во время выполнения прикладной программы
Windows или DOS защищенного режима она может не иметь полномочий
доступа к областям памяти вне вашей программы. Попытка доступа к
этим областям памяти может привести к сбою программы.
Вторая форма оператора absolute используется для описания
переменной, которая помещается "поверх" другой переменной, то
есть по тому же самому адресу, что и другая переменная.
var
Str: string[32];
StrLen: byte absolute Str;
Это описание указывает, что переменная StrLen должна разме-
щаться с того же адреса, что и переменная Str, а поскольку первый
байт строковой переменной содержит динамическую длину строки, то
StrLen будет содержать длину Str.
Эту вторую форму оператора absolute можно без опасения ис-
пользовать при программировании в Windows или в защищенном режиме
DOS. Память, к которой вы обращаетесь, находится в области прог-
раммы.