Использование turbo pascal с языком ассемблера. Встроенный ассемблер, страница 8

asm

inc   BYTE PTR [100H]

imul  WORD PTR [100H]

end;

Таблица 22.2 суммирует предопределенные типы символов, которые встроенный Ассемблер предоставляет в дополнение к типа Паскаля.

Таблица 22.2 Предопределенные типы символов.

-------------------------------Символ           Тип

-------------------------------BYTE             1

WORD             2

DWORD            4

QWORD            8

TBYTE            10

NEAR             0FFFEH

FAR              0FFFFH

-------------------------------Заметим, что  псевдотипы  NEAR и FAR используются для указания модели вызова процедур и функций. Вы можете использовать NEAR и FAR

в приведении типов точно так же, как другие символы. Например, если

FarProc - FAR процедура

procedure FarProc; far;

и, если Вы пишете ассемблерный код в  том  же  модуле,  что  и

FarProc, Вы можете использовать более эффективный NEAR вызов:

asm

push   cs

call   NEAR PTR FarProc

end;

Операторы выражений.

Встроенный Ассемблер предоставляет операторы,  разделенные  на

12 классов   по   приоритетам.   Таблица  22.3  приводит  операторы встроенного Ассемблера в порядке уменьшения их приоритета.

Таблица 22.3. Операторы выражений встроенного Ассемблера.

------------------------------------------------------------------Оператор                   Комментарий

------------------------------------------------------------------&                         Оператор перекрытия идентификатора

()                        Селектор элемента структуры

[]

.

HIGH LOW

+ -                       Унарные операторы

:                         Оператор перекрытия сегмента

OFFSET SEG TYPE PTR *

/ MOD SHL SHR

+ -                       Бинарные операторы

NOT AND OR XOR            Побитовые операторы

------------------------------------------------------------------Примечание: Приоритет   операторов   встроенного    Ассемблера отличается от Паскаля.  Например, в ассемблерном выражении оператор

AND имеет меньший приоритет,  чем операторы +  и  -,  а  в  Паскале наоборот.

&

Перекрытие идентификатора.  Идентификатор,  следующий   за   &

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

(...)

Подвыражение. Выражения внутри () вычисляются до интерпретации как элемент  выражения.  Другое  выражение   может   предшествовать выражению внутри  ();  результат  в  этом  случае становится суммой значений двух выражений с типом первого выражения.

[...]

Ссылка на память. Выражение внутри [] полностью вычисляется до интерпретации, как один  элемент  выражения.  Выражение  внутри  []

может быть комбинировано с регистрами BX,  BP,  SI,  DI,  используя оператор +  для  указания  индексации.   Другое   выражение   может предшествовать выражению в []; результат становится суммой значений двух выражений с типом первого выражения.  Результат всегда  ссылка на память.

"."

Селектор элемента структуры.  Результат - сумма  выражения  до точки и  выражения  после  точки  с  типом  выражения  после точки.

Символы, лежащие  в  сфере  действия,  определяемой  выражением  до точки, могут использоваться в выражении после точки.

HIGH

Возвращает старшие 8 бит выражения типа слово,  следующего  за оператором. Выражение   должно   быть  абсолютным  непосредственным значением.

LOW

Возвращает младшие  8 бит выражения типа слово,  следующего за оператором.  Выражение  должно  быть  абсолютным   непосредственным значением.

"+"

Унарный плюс.  Возвращает  выражение,  следующее  за  +,  без изменений.   Выражение   должно  быть  абсолютным  непосредственным значением.

"-"

Унарный минус.   Возвращает   выражение,  следующее  за  -,  с отрицательным значением.   Выражение   должно    быть    абсолютным непосредственным значением.

":"

Перекрытие сегмента. Указывает Ассемблеру, что выражение после