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

Операнды

Операнды встроенного ассемблера представляют собой выраже-

ния, которые состоят из сочетания констант, регистров, идентифи-

каторов и операций. Хотя выражения встроенного ассемблера форми-

руются с использованием тех же основных принципов, что и

выражения Паскаля, имеется ряд важных отличий, которые необходимо

пояснить.

Во встроенном ассемблере предопределенный смысл имеют следу-

ющие зарезервированные слова:

AH CL FAR SEG

AL CS HIGH SHL

AND CX LOW SHR

AX DH MOD SI

BH DI NEAR SP

BL DL NOT SS

BP DS OFFSET ST

BX DWORD OR TBYTE

BYTE DX PTR TYPE

CH ES WQORD WORD

XOR

Зарезервированные слова всегда имеют больший приоритет, чем

определенные пользователем идентификаторы. Например, во фрагменте

программы:

var

ch: Char;

...

asm

mov ch,1

end;

1 будет загружаться в регистр CH, а не в переменную CH. Для дос-

тупа к определенному пользователем имени нужно использовать ам-

персанд - операцию переопределения идентификатора (&).

asm

mov &ch,1

end;

Мы настоятельно рекомендуем не использовать определенные

пользователем идентификаторы с теми же именами, что и зарезерви-

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

имен может легко приводить к очень трудноуловимым ошибкам.

Выражения

Встроенный ассемблер вычисляет все выражения, как 32-разряд-

ные значения-указатели. Он не поддерживает значения с плавающей

точкой и строковые значения, за исключением строковых констант.

Выражения встроенного ассемблера строятся из элементов выра-

жений и операций, а каждая операция имеет соответствующий класс

выражения и тип выражения. Эти принципы поясняются в следующих

разделах.

Различия между выражениями Паскаля и ассемблера

Большинство важных различий между выражениями Паскаля и вы-

ражениями встроенного ассемблера состоит в том, что выражения

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

нию-константе, другими словами, к значению, которое можно вычис-

лить на этапе компиляции. Например, с учетом описаний:

const

X = 10;

Y = 20;

var

Z: Integer;

следующий оператор является во встроенном ассемблере допустимым:

asm

mov Z,X+Y

end;

Поскольку X и Y - это константы, выражение X + Y представля-

ет собой просто удобный способ записи константы 30, и полученная

в результате инструкция помещает непосредственное значение 30 в

переменную Z размером в слово. Но если вы опишете X и Y, как пе-

ременные:

var

X, Y: Integer;

то встроенный ассемблер не сможет на этапе компиляции вычислить

значение X + Y. Корректной конструкцией встроенного ассемблера в

этом случае будет:

asm

mov ax,X

add ax,Y

mov Z,ax

end;

Другим важным отличием выражений Паскаля и встроенного Ас-

семблера является способ интерпретации переменных. В выражении

Паскаля ссылка не переменную интерпретируется, как содержимое пе-

ременной, но в выражении встроенного ассемблера ссылка на пере-

менную означает адрес переменной. Например, в Паскале выражение X

+ 4, где X - переменная, означает содержимое X, плюс 4, а во

встроенном ассемблере это означает содержимое в слове по адресу

на 4 байта выше, чем адрес X. Поэтому, хотя допустима запись:

asm

mov ax,X+4

end;

этот код не загружает значения X, плюс 4 в AX, а загружает значе-

ние слова, записанного через 4 байта после X. Корректной записью

сложения 4 с содержимым X будет:

asm

MOV AX,X

ADD AX,4

end;

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