| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
PUSH foo
MOV foo,1
Если при вызове данной макрокоманды вы присваиваете foo
текстовую строку AX, то фактическим включаемым в модуль текст бу-
дет:
PUSH foo
MOV AX,1
Правила, которые Турбо Ассемблер использует для распознава-
ния формальных аргументов, достаточно сложны. Рассмотрим, напри-
мер, следующие строки тела макрокоманды, где формальный аргумент
foo не распознается:
symfoo:
DB 'It is foo time'
В общем случае Турбо Ассемблер не будет распознавать фор-
мальный аргумент (без специального указания) в следующих ситуаци-
ях:
- когда он является частью другого идентификатора;
- когда он находится внутри кавычек (' или ");
- в режиме Ideal, когда он указывается после двоеточия не
внутри кавычек.
Использование в макрокомандах символа &
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Символ & в теле макрокоманды имеет специальное значение. В
общем случае & отделяет имя формального аргумента от окружающего
текста, благодаря чему Турбо Ассемблер может распознавать его при
подстановке. Если, например, имеется следующее тело макрокоманды:
sym&foo:
DB 'It is &foo time'
и если вы при вызове данной макрокоманды присвоите foo текстовую
строку party, то фактическим включаемым в модуль текст будет сле-
дующее:
symparty:
DB 'It is party time'
В качестве другого примера можно привести следующий:
Турбо Ассемблер 3.0/tasm/#2-2 = 31 =
foo&sym:
DB 'We are in O&foo&o'
Если вы при вызове данной макрокоманды присвоите foo тексто-
вую строку hi, то фактическим включаемым в модуль текст будет
следующее:
hisym:
DB 'We are in Ohio'
Приведем правила для символа &:
- вне заключенных в кавычки строк символ & используется как
разделитель;
- внутри заключенной в кавычки строки и после двоеточия, ко-
торое не находится в заключенной в кавычки строке в режиме
Ideal, символ & должен предшествовать формальному аргумен-
ту (чтобы этот аргумент мог распознаваться);
- при расширении макрокоманды Турбо Ассемблер удаляет один
символ & из группы таких символов.
Последний пункт дает возможность помещать внутри макрокоманд
макроопределения, требующие символа &. Турбо Ассемблер будет уда-
лять только один символ & из группы.
Включение комментариев в тело макрокоманды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В особенно сложных макрокомандах иногда желательно поместить
в теле макрокоманды комментарии, которые не должны включаться при
ее расширении. Это также уменьшает объем необходимой Турбо Ас-
семблеру для обработки макрокоманд памяти. Для этого используйте
комментарий с предшествующей двойной точкой запятой (в начале
строки). Например, следующее тело макрокоманды:
;; Это макрокоманда с комментарием
DB 'макрокоманда с комментарием'
приведет к включению при ее вызове только следующего текста:
DB 'макрокоманда с комментарием'
Примечание: Комментарии с одиночной точкой с запятой
при вызове макрокоманды всегда включаются в макрорасшире-
ние.
Локальные формальные аргументы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В начале тела макрокоманды вы всегда можете включить одну
Турбо Ассемблер 3.0/tasm/#2-2 = 32 =
или более директив LOCAL. Директива LOCAL описывает специальные
формальные аргументы, которым при каждом расширении макрокоманды
будет присваиваться уникальное символьное имя.
Синтаксис директивы LOCAL в теле макрокоманды выглядит сле-
дующим образом:
LOCAL формальный_аргумент_1 [,формальный_аргумент_2]...
Если имя "формальный_аргумент", указанное в директиве LOCAL,
не содержит префикс локального идентификатора, то присваиваемое
ему уникальное имя идентификатора будет иметь вид ??xxxx, где
xxxx представляет шестнадцатиричное число. В противном случае
уникальное символьное имя будет иметь вид <локальный_пре-
фикс>xxxx.
Примечание: Подробности о разрешении локальных иденти-
фикаторов и задании локального префикса можно узнать в Гла-
ве 11.
Вы можете использовать формальные аргументы LOCAL для зада-
ния в теле макрокоманды меток, например:
LOCAL @agn, @zero
XOR dx,dx
MOV cx,exp
MOV ax,1
JCXZ @zero
MOV bx,factor
@agn: MUL bx
LOOP @agn
@zero:
Турбо Ассемблер 3.0/tasm/#2-2 = 33 =
Директива EXITM
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директиву EXITM можно использовать в теле макрокоманды для
принудительного завершения ассемблирования включаемого тела мак-
рокоманды. Она имеет следующий синтаксис:
EXITM
Когда Турбо Ассемблер обнаруживает директиву EXITM в теле
макрокоманды, которая включена в исходный код модуля, ассемблиро-
вание расширенного тела макрокоманды немедленно прекращается.
Вместо этого Турбо Ассемблер будет продолжать ассемблирование мо-
дуля после конца макрокоманды.
Для завершения макрокоманды при определенных условиях вы мо-
жете использовать оператор EXITM с директивой условного ассембли-
рования.
Примечание: Директивы условного ассемблирования под-
робнее рассматриваются в Главе 15.
Директива GOTO и макроидентификаторы перехода
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Использование директивы GOTO и макроидентификаторов перехода
позволяют вам управлять последовательностью расширения строк мак-
рокоманды. Вы можете поместить цель перехода в любом месте тела
макрокоманды. Она занимает всю строку макрокоманды и имеет следу-
ющий синтаксис:
:идентификатор_перехода
При расширении макрокоманды все макроидентификаторы перехода
отбрасываются.
Директива GOTO сообщает Турбо Ассемблеру, что нужно перейти
на заданную точку исходного кода, а именно - на "идентифика-
тор_перехода". Это позволяет вам поместить GOTO в блоке условного
ассемблирования. Например:
IF foo
GOTO tag1
ENDIF
DISPLAY "foo имеет значение false!"
:tag
; возобновление макрокоманды...
; работает одинаково, независимо от того,
; равно foo false или true
Примечание: Будьте аккуратны и не создавайте при ис-
пользовании директивы GOTO бесконечных циклов. Бесконечные
циклы могут привести к тому, что Турбо Ассемблер исчерпает
Турбо Ассемблер 3.0/tasm/#2-2 = 34 =
|
adfun.ru
|
|
|
|