Синтаксис ассемблерных команд
Операнды
Операндами встроенного ассемблера могут быть выражения, состоящие из комбинации регистров, констант, имен и символов операций.
Регистры
Во встроенном ассемблере используется мнемоника регистров, указанная в п. 12.1.1, а также имя ST для ссылки на регистры арифметического сопроцессора.
Константы
Ассемблер поддерживает строковые и числовые константы.
Строковые константы заключаются в апострофы или кавычки. Если константа объявлена с помощью кавычек, внутри нее символ апостроф рассматривается наравне с другими символами, т.е. не считается ограничителем константы, точно так же внутри константы, обрамленной апострофами, не считается ограничителем символ кавычки. Если внутри константы необходимо указать ограничивающий ее символ, он удваивается. Примеры:
'Строковая константа' "Это – тоже строковая константа" 'Символ '' не считается ограничителем' 'внутри строки, обрамленной кавычками "…"'
Числовые константы могут быть только целыми и их значение не может превосходить емкости двойного слова, т.е. должно быть внутри диапазона:
-2 147 483 648 … +4 294 967 295.
По умолчанию при записи числовых констант используется десятичная нотация, но ассемблер поддерживает также двоичные, восьмеричные и шестнадцатеричные константы. Двоичная константа составляется как комбинация единиц и нулей, заканчивающаяся символом В (от Binary – двоичный); при записи восьмеричной константы используются символы 0…7, а в ее конце ставится символ О (Octal – восьмеричный); шестнадцатеричная константа записывается по правилам Турбо Паскаля (начинается с символа #) либо по правилам Турбо Ассемблера: начинается с цифры, в конце ставится символ H (от Hexadecimal – шестнадцатеричный).
Имена
Локальные метки – это единственные имена, которые разрешается определять внутри ассемблерного оператора. Имена остальных объектов программы – констант, переменных, подпрограмм – должны определяться только с помощью средств Турбо Паскаля.
Область определения имен подчиняется тем же правилам, что и в Турбо Паскале – имена должны быть "видны" в том месте, где они используются, и они локализуются в пределах блока, в котором описаны.
Во встроенном ассемблере могут использоваться три предопределенных имени:
- @@Code – текущий сегмент кода
- @Data – начальный сегмент данных
- @Result – ссылка внутри функции на ее результат
Имена @Code и @Data могут использоваться только в сочетании с директивой SEG для ссылки на нужный сегмент. Например:
asm mov ax, SEG ©Data mov ds,ax end;
Имя @Result используется для присвоения результата функции. Например:
Function Min(X,Y: Integer): Integer; {Эта функция сравнивает два целых числа и возвращает наименьшее из них) begin asm mov ax,X {Помещаем Х в АХ} cmp ax,Y {X<Y?} jl @ {Да – на выход} mov ax,Y {Нет – помещаем Y в АХ} @: mov ©Result,ax {АХ содержит результат} end end;