Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Типы выражений

Каждое выражение встроенного ассемблера имеет соответствую-

щий тип, или, если говорить точнее, размер, поскольку встроенный

Ассемблер рассматривает тип выражения просто как его размер в па-

мяти. Например, тип (размер) переменной Integer равен 2, так как

она занимает два байта.

Там, где это возможно, встроенный ассемблер выполняет про-

верку типов, поэтому в инструкциях:

var

QuitFlag: Boolean;

OutBufPtr: Word;

.

.

.

asm

mov al,QuitFlag

mov bx,OutBufPtr

end;

встроенный ассемблер проверяет, что размер QuitFlag равен 1

(байт), а размер OutBufPtr - двум (слово). Если проверка типа об-

наруживает несоответствие, возникает ошибка. Например, следующее

недопустимо:

asm

mov dl,OutBufPtr

end;

так как DL - это байтовый регистр, а OutBufPtr - слово. Тип ссыл-

ки на память можно изменить с помощью назначения типа. Корректным

способом записи предыдущих инструкций будет следующий:

asm

mov dl,BYTE PTR OutBufPtr

mov dl,Byte(OutBufPtr)

mov dl,OutBufPtr.Byte

end;

Все эти инструкции ссылаются на первый (менее значащий) байт

переменной OutBufPtr.

В некоторых случаях ссылка на память является нетипизирован-

ной, то есть не имеет соответствующего типа. Приведем пример с

непосредственным значением, заключенным в квадратные скобки:

asm

mov al,[100H]

mov bx,[100H]

end;

Встроенный ассемблер допускает обе этих функции, поскольку

выражение [100H] не имеет соответствующего типа, оно просто озна-

чает "содержимое по адресу 100H в сегменте данных", а тип можно

определить из первого операнда (байт для AL, слово для BX). В том

случае, когда тип нельзя определить из другого операнда, встроен-

ный ассемблер требует явного назначения типа:

asm

mov BYTE PTR [100H]

mov WORD PTR [100H]

end;

В Таблице 24.4 приведены предопределенные идентификаторы ти-

па, которые предусмотрены во встроенном ассемблере дополнительно

к типам, описанным в Паскале:

Предопределенные идентификаторы типа Таблица 24.4

---------------------T---------------------------------

¦ Идентификатор ¦ Тип ¦

+--------------------+---------------------------------+

¦ BYTE ¦ 1 ¦

¦ WORD ¦ 2 ¦

¦ DWORD ¦ 4 ¦

¦ QWORD ¦ 8 ¦

¦ TBYTE ¦ 10 ¦

¦ NEAR ¦ 0FFFEH ¦

¦ FAR ¦ 0FFFFH ¦

L--------------------+----------------------------------

Заметим в частности, что NEAR и FAR - это псевдотипы, кото-

рые используются с идентификаторами процедур и функций для указа-

ния их модели вызова. Вы можете использовать назначения типа NEAR

и FAR аналогично другим идентификаторам. Например, если FarProc -

процедура с дальним типом вызова (FAR):

procedure FarProc; far;

и если вы записываете код встроенного ассемблера в том же модуле,

где находится FarProc, то вы можете использовать для ее вызова

более эффективную инструкцию NEAR:

asm

push cs

call NEAR PTR FarProc

end

Соседние файлы в предмете Программирование на Pascal