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



Идентификаторы


Встроенный ассемблер позволяет в выражениях ассемблера полу- чить доступ ко всем идентификаторам Паскаля, включая метки, конс- танты, типы, переменные, процедуры и функции. Кроме того, во встроенном ассемблере реализованы следующие специальные идентифи- каторы:

@Code @Data @Result

Идентификаторы @Code и @Data представляют текущие сегменты кода и данных соответственно. Их следует использовать только в сочетании с операцией SEG:

asm mov ax,SEG @Data mov ds,ax end;

Идентификатор @Result в операторной части функции переменную - результат функции. Например, в функции:

function Sum(X, Y: Integer): Integer; begin Sum := X + Y; end;

в операторе, присваивающем результат функции переменной Sum, мож- но было бы при записи на встроенном ассемблере использовать пере- менную @Result:

function Sum(X, Y: Integer): Integer; begin asm mov ax,X add ax,Y mov @Result,ax end; end;

В выражениях встроенного ассемблера нельзя использовать сле- дующие идентификаторы:

- стандартные процедуры и функции (например, WriteLn, Chr);

- специальные массивы Mem, MemW, MemL, Port, PortW;

- строки, значения с плавающей точкой и константы множест- венного типа;

- метки, которые не описаны в текущем блоке;

- идентификатор @Result вне функции.

В Таблице 24.3 приведены значение, класс и тип различного вида идентификаторов, которые можно использовать в выражениях встроенного ассемблера (классы и типы выражений описываются в следующем разделе):

Значения, классы и типы идентификаторов Таблица 24.3 -------------T--------------------T----------------T------------ ¦Идентификат.¦ Значение ¦ Класс ¦ Тип ¦ +------------+--------------------+----------------+------------+ ¦ Метка ¦ Адрес метки ¦ Память ¦ SHORT ¦ ¦ Константа ¦ Значение константы ¦ Непосредствен- ¦ 0 ¦ ¦ ¦ ¦ ный ¦ ¦ ¦ Тип ¦ 0 ¦ Память ¦ Размер типа¦ ¦ Поле ¦ Смещение поля ¦ Память ¦ Размер типа¦ ¦ Переменная ¦ Адрес переменной ¦ Память ¦ Размер типа¦ ¦ Процедура ¦ Адрес процедуры ¦ Память ¦ NEAR / FAR¦ ¦ Функция ¦ Адрес функции ¦ Память ¦ NEAR / FAR¦ ¦ Модуль ¦ 0 ¦ Непосредствен- ¦ 0 ¦ ¦ ¦ ¦ ный ¦ ¦ ¦ @Code ¦ Адрес сегмента кода¦ Память ¦ 0FFF0H ¦ ¦ @Data ¦ Адрес сегмента ¦ Память ¦ 0FFF0H ¦ ¦ ¦ данных ¦ ¦ ¦ ¦ @Result ¦ Смещение перемен- ¦ Память ¦ Размер типа¦ ¦ ¦ ной результата ¦ ¦ ¦ L------------+--------------------+----------------+-------------




- Начало -  - Назад -  - Вперед -