Директива CATSTR
Директива CATSTR определяет новую текстовую макрокоманду путем конкатенации строк. Она имеет следующий синтаксис:
имя CATSTR строка[,строка].
Директива CATSTR выполняет конкатенацию слева-направо. Турбо Ассемблер создает новую текстовую макрокоманду с именем "имя".
Директива SUBSTR
Директива SUBSTR определяет новую текстовую макрокоманду, которая является подстрокой строки. Она имеет следующий синтаксис:
имя SUBSTR строка,выражение_позиции[,выражение_размера]
Новая текстовая макрокоманда с именем "имя" состоит из части строки , начинающейся с символа в позиции "выражение_позиции" и длины "выражение_длины". Если вы не указываете "выражение_размера", новая текстовая макрокоманда содержит остаток строки, начиная с символа в "выражении_позиции". Турбо Ассемблер рассматривает первый символ строки как позицию 1.
Директива INSTR
Директива INSTR возвращает позицию одной строки внутри другой. Она имеет следующий синтаксис:
имя INSTR [выражение_начала,]строка_1,строка_2
Турбо Ассемблер присваивает "имя" числовому значению, которое соответствует первой позиции первого вхождения "строки_2" в "строку_1". Первый символ "строки_1" имеет позицию 1. Если "строка_2" в "строке_1" не содержится, то Турбо Ассемблер возвращает значение 0. Если вы укажете "выражение_начала", то поиск начинается с символа, задаваемого этим выражением. Первый символ строки находится в позиции 1.
Директива SIZESTR
Директива SIZESTR возвращает длину текстовой макрокоманды (число символов в строке). Она имеет синтаксис:
имя SIZESTR строка
где "имя" устанавливается в числовое значение, равное длине указанной строки. Нулевая строка <> имеет длину 0.
Примеры макрокоманд работы с текстом
Следующие примеры показывают, как работают эти операции:
VERSION T300 | | | | ABC ABC2 ABC ABC3 ABCLEN ABC3LEN COMMA1 COMMA2 ABC4 ABC5 ABC6 ABC7 ABC8 | EQU EQU EQU CATSTR SIZESTR SIZESTR INSTR INSTR SUBSTR SUBSTR EQU EQU EQU | <abc> ABC <det> ABC2,<,>,A BC,<,>,ABC2 ABC ABC3 ABC3,<,> COMMA1+1,ABC3,<,> ABC3,5 ABC3,5,3 3+2+1 %3+2+1 %COMMA1 | ABC = "abc" ABC2 = "ABC" ABC = "det" (переопределяется) ABC3 = "ABC,DEF,ABC" ABCLEN = 3 ABC3LEN = 11 COMMA1 = 4 COMMA2 = 8 ABC4 = "def,ABC" ABC5 = "def" ABC6 = 6 (числовое присваивание) ABC7 = "6" (текстовая макрокоманда) ABC8 = "4" |
Макрокоманды, состоящие из нескольких строк
Макрокоманды, состояние из нескольких строк, позволяют вам определить в их теле инструкции, директивы или другие макрокоманды, которые будут включаться в исходный код при вызове макрокоманды. Вы можете указать аргументы макрокоманды, которые Турбо Ассемблер будет подставлять в тело макрокоманды при ее включении в модуле.
Существует насколько типов макрокоманд, состоящих из нескольких строк. Одна версия подставляет каждый элемент строки (один за другим), который является аргументом макрокоманды. Другая версия повторяет определенное число раз тело макрокоманды. Наконец, в одном месте вы можете определить еще одну версию, которая будет много раз вызываться. Все эти версии имеют общее определение тела макрокоманды.
Тело макрокоманды, состоящей из нескольких строк
Независимо от содержимого тела макрокоманды, средство обработки макрокоманд Турбо Ассемблера интерпретирует макрокоманду, состоящую из нескольких строк, как просто несколько строк текста. Турбо Ассемблер позволяет вам заменить идентификаторы в теле макрокоманды текстом, заданным при вызове макрокоманды. Это средство называется подстановкой аргументов. Идентификаторы в теле макрокоманды, которые должны быть заменены, называются формальными (фиктивными) аргументами. Предположим, например, что идентификатор foo - это формальный аргумент в следующем теле макрокоманды:
PUSH foo MOV foo,1
Если при вызове данной макрокоманды вы присваиваете foo текстовую строку AX, то фактическим включаемым в модуль текст будет:
PUSH foo MOV AX,1
Правила, которые Турбо Ассемблер использует для распознавания формальных аргументов, достаточно сложны. Рассмотрим, например, следующие строки тела макрокоманды, где формальный аргумент foo не распознается:
symfoo: DB "It is foo time"
В общем случае Турбо Ассемблер не будет распознавать формальный аргумент (без специального указания) в следующих ситуациях:
когда он является частью другого идентификатора;
когда он находится внутри кавычек (" или ");
в режиме Ideal, когда он указывается после двоеточия не внутри кавычек.
1 2 3 4 5 6
8 8 8
| |