Руководство по языку B.Pascal 7

       

Абсолютные переменные


Переменные можно описать так, что они будут располагаться по определенному адресу в памяти, и в этом случае они называются аб- солютными переменными. Описание таких переменных должно содержать после типа оператор absolute:

описание --------- ---------- ---- ---------- абсолютной --->¦absolute+-T->¦целое без+->¦ : +->¦целое без+-T-> переменной L--------- ¦ ¦ знака ¦ L---- ¦ знака ¦ ¦ ¦ L---------- L---------- ¦ ¦ -------------- ¦ L------>¦идентификатор+------------- ¦ переменной ¦ L--------------

Отметим, что список идентификаторов в описании переменной при указании оператора 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. Память, к которой вы обращаетесь, находится в области прог- раммы.


В защищенном режиме вы не можете задавать абсолютный адрес переменной. Любой исходных код, где сегмент и смещение задаются в операторе absolute, нужно переписать. Например, вам может потре- боваться построить указатель, используя переменные SegXXXX.



Содержание раздела