Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Блоки повторения
Иногда в некотором месте программы приходится выписывать несколько раз подряд один и тот же (или почти один и тот же) фрагмент, и хотелось бы, чтобы мы сами выписывали этот фрагмент только раз, а макрогенератор размножал его нужное число раз. Такая возможность предусмотрена в ЯА, и реализуется она с помощью блоков повторения (reрeat blocks). Блок повторения имеет следующую структуру: <заголовок> <тело> ENDM Здесь <тело> - любое число любых предложений (в частности,ими могут быть снова блоки повторения), а ENDM – директива, указывающая на конец тела и всего блока повторений. Встречая в исходном тексте программы такой блок, макрогенератор подставляет вместо него в окончательную программу несколько копий тела. При дублировании тело может выписываться без каких-либо изменений, а может копироваться и с модификациями. Как именно происходит дублирование, сколько копий создается – все это зависит от заголовка блока. Имеется три разновидности заголовка, в связи с чем различают три варианта блока повторения: REPT -блоки, IRP -блоки и IRPC -блоки. REPT-блоки Этот тип блоков повторения записывается следующим образом: REPT k <ТЕЛО> ENDM
Здесь k - константное выражение с неотрицательным значением. Это выражение должно быть таким, чтобы можно было вычислить его сразу (например, в нем не должно быть ссылок вперед). Вычислив значение k, макрогенератор создает k точных копий тела блока и подставляет их в окончательный текст программы. Например, по блоку rерт 3 SНR АХ,1 ENDM будет построен следующий фрагмент окончательной программы: SНR АХ,1 SНR АХ,1 SНR АХ,1 Другой пример (слева указан фрагмент исходной программы, построенный по нему фрагмент окончательной программы): N EQU 6 N EQU 6 REPT N-4 DB 0,1 DB 0,1 à DW? DW? DB 0,1 ENDM DW? Отметим, что в блоках повторения довольно часто используется директива присваивания (=). Например, описать 100-байтовый массив X, элементы которого имеют начальные значения от 0 до 99, можно так (справа указан текст окончательной программы, который фактически эквивалентен директиве X DB 0,1,2,3,...,99): X DB 0 X DB 0 K=0 K=0 REPT 99 K=K+1 K=K+1 à DB K 99 таких пар DB K K=K+1 ENDM DB K ... Date: 2015-10-21; view: 469; Нарушение авторских прав |