|
Для обобщения задачи сопровождения этих счетчиков мы
создали следующие макросы: testsym, zerosym, incsym и decsym.
Этим макросам передаются аргументы, которые они используют для
создания счетчиков. Аргументы представляют собой идентификаторы
типа (?if_) и текущие уровни вложенности.
Приемы кодирования и некоторые предупреждения
Когда необходимо создать действительную команду перехода и
метку перехода, мы будем использовать макросы mkjmp, mkjmp2,
mklbl и mklbl1. |
сетевой экран |
|
|
Действительные метки состоят из идентификатора
типа и номеров. Единственный способ получить числовое значение
символа заключается в применении оператора процента (%), который
действителен только при использовании с аргументом вызова макро.
Мы хотим вычислить символ, определяемый двумя элементами информа-
ции из счетчика, так:
mkjmp2 p1,p2,%&p3&p2
Однако Руководство по MASM сообщает нам, что оператор ампер-
санда (&) не может быть использован в вызове макро. |
norton |
|
{img3} |
резервное копирование баз данных |
|
Таким обра-
зом, мы должны создать временную переменную и использовать ее.
??tmp = &p3&p2
mkjmp2 p1,p2,%??tmp
Все это влечет за собой следующее. Первая форма, содержащая
амперсанды в вызове макро, должна работать. |
Архиваторы |
|
|
офисные программы, ad aware, антивирус панда, kaspersky, avast home, .
asplinux
|
|
. |
[ jmp 1_9: |
ELSE-----------[ L_8: (c) код false |
[ . |
. |
. |
ENDIF------------- L_9: (a) конец false-
ENDIF---------------- L_6:
Рис.1-2. Структура управления IF и соответствующая ей
интерпретация на языке ассемблера
- 1-40 -
Для сравнения эти уникальные составные метки, сгенерированные
нашими структурированными макросами, показаны в Листинге 1-15.
Первые две цифры числа являются уровнем вложенности, значение ко-
торого начинается с 10 с тем, чтобы для уровня вложенности всегда
были зарезервированы две цифры. Это предотвращает совпадение
уровня 1 счетчика 11 (1-11) с уровнем 11 счетчика 1 (11-1).
Краткий текст программы в точности соответствует тому, что
представлено на Рис. 1-2. При детальном рассмотрении мы увидим,
что расширенные макро на языке ассемблера создают те же структу-
ры, что представлены на Рис.1-2.
Так как метки состоят из трех частей, каждый тип макро струк-
турного управления должен поддерживать набор счетчиков. Этот на-
бор включает в себя символ счетчика для указания текущего уровня
вложенности.
|
|
|