Описание сложного адресного подтипа
Некоторые директивы позволяют вам описывать сложные адресные подтипы. Эти выражения типов аналогичны тем, которые используются в языке Си, поскольку они представляют несколько уровней косвенности указателя. Например, сложное выражение типа:
PTR WORD
представляет указатель на слово. (Размер указателя зависит от размера модели сегментации, которую вы выбираете с помощью директивы MODEL.)
Сводный синтаксис сложных адресных подтипов приведен в таблице:
Сложные адресные подтипыСинтаксис | Значение |
---|
простой_адресный_подтип | Подтип заданного адреса. | [раст]PTR[сложный_адресный_подтип] | Указатель на заданный сложный адресный подтип, размер которого определяется текущей директивой MODEL или заданным расстоянием (если они присутствуют). |
Необязательный параметр расстояния вы можете описать следующим путем:
Синтаксис расстоянияСинтаксис | Значение |
---|
NEAR | Используется ближний указатель, который может быть 16 или 32-разрядным, в зависимости от текущей модели. | FAR | Используется дальний указатель, который может быть 32 или 48-разрядным, в зависимости от текущей модели. | SMALL NEAR | Используется 16-разрядный указатель (только для процессоров 80386 и 80486). | LARGE NEAR | Используется 32-разрядный указатель (только для процессоров 80386 и 80486). | SMALL FAR | Используется 32-разрядный дальний указатель (только для процессоров 80386 и 80486). | LARGE FAR | Используется 48-разрядный дальний указатель (только для процессоров 80386 и 80486). |
Тип указываемого объекта в комплексных ссылочных типах не является строго обязательным. Турбо Ассемблеру нужно знать только размер типа. Таким образом, в сложных ссылочных типах (но не в простых типах) допускаются опережающие ссылки.
Выражения
Использование выражений позволяет вам получать модульный код, поскольку вы можете символически представлять в программе значения. Турбо Ассемблер выполняет все повторные вычисления, необходимые при изменениях (и не требует этого от вас).
В присваиваниях Турбо Ассемблер использует стандартное инфиксное обозначение. Выражения могут содержать операнды и унарные или бинарные операции. Унарная операция помещается перед одиночным операндом; бинарные операции помещаются между двумя операндами. Примеры простых операций показаны в следующей таблице.
Простые выраженияВыражение | Что получается при вычислении |
---|
5 | константа 5 | -5 | константа -5 | 4+3 | константа 7 | 4*3 | константа 12 | 4*3+2*1 | константа 14 | 4*(3+2)*1 | константа 21 |
В этом приложении содержится полная грамматика в форме Бэкуса-Наура, используемая при синтаксическом анализе выражений в режимах MASM и Ideal. Эта грамматика последовательно описывает синтаксис выражений Турбо Ассемблера, а также старшинство операций.
Точность в выражениях
Турбо Ассемблер в режиме Ideal всегда использует 32-разрядную арифметику. В режиме MASM Турбо Ассемблер использует 16- или 32-разрядную арифметику, в зависимости от выбора процессора 80386. Таким образом, некоторые выражения, в зависимости от того, какой процессор выбирается, могут давать разные результаты. Например, при вычислении:
(1000h * 1000h) / 1000h
получается 1000h при выборе процессора 80386 или 0 при выборе процессоров 8086, 80186 или 80286.
Константы в выражениях
В качестве операндов в выражениях вы можете использовать константы, например:
mov ax,5 ; "5" - это операнд-константа
Идентификаторы в выражениях
Когда вы используете в выражении идентификатор, возвращаемое значение зависит от типа идентификатора. Вы можете использовать идентификатор сам по себе или в сочетании с определенными унарными операциями, которые созданы для выделения другой информации из величины, представляемой идентификатором.
1 2 3 4 5 6 7
8 8 8
| |