Главная Случайная страница



Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника







Блоки повторений





Блок повторения представляет собой специфическую форму макроопределения с несколько ограниченными возможностями макроязыка. По сути блок повторения представляет собой макрообъект, объединяющий в себе макроопределение и макровызов. Макроопределения как шаблона, по которому производится генерация макрорасширения, здесь не требуется, в результате чего сужаются возможности варьирования генерируемым текстом. С другой стороны, использование блоков повторения по сравнению с макроопределениями является синтаксически и логически более простой задачей. Обработка блока повторения заключается в многократном дублировании тела блока с незначительными изменениями текста.

В языке Ассемблера имеются блоки повторения 3-х типов:

u REPT-блок;

u IRP-блок;

u IRPC-блок.

REPT-блок имеет следующий формат:

REPT выражение

...

предложения

...

ENDM

Блок предложений, заключенный между ключевыми словами REPT и ENDM, повторяется столько раз, каково текущее значение указанного выражения. Выражение должно иметь значение в виде 16-битового числа без знака и не может содержать внешних или неопределенных символов. Тело блока может включать в себя любые предложения языка.

IRP-блок имеет следующий формат:

IPR формальный-параметр,<параметр,...>

...

предложения

...

ENDM

Блок предложений, стоящий между ключевыми словами IRP и ENDM, будет повторен для каждого параметра в списке, заключенном в скобках <>.

Формальный-параметр относится только к данному блоку и последовательно принимает значения из списка. В качестве параметров в списке могут быть заданы определенные символы, строки, числа или символьные константы. Может быть задано любое число параметров, которые, если их несколько, должны разделяться запятыми. Тело блока может включать в себя любые предложения языка Ассемблера.Формальный-параметр в теле блока может быть использован произвольное число раз.

Когда MASM распознает директиву IRP, он создает копию предложений блока для каждого параметра в списке. При копировании предложений осуществляется замена текущим параметром всех вхождений формального параметра блока. Если в списке будет обнаружен пустой параметр (<>), формальный параметр получит значение пустой строки. Если список параметров пуст, блок игнорируется.



Пример:

alloc MACRO x

IRP y,<x>

DB y

ENDM

ENDM

В результате обработки макровызова

alloc <0,1,2,3>

будет сгенерировано макрорасширение

IRP y,<0,1,2,3>

DB y

ENDM

IRPC-блок имеет следующий формат:

IRPC формальный-параметр,строка

...

предложения

...

ENDM

Блок предложений, заключенный между ключевыми словами IRPC и ENDM, будет повторен для каждого символа указанной строки. При этом каждое вхождение формального параметра в блоке замещается текущим символом строки.

Строка представляет собой любую комбинацию букв, цифр и других символов. Если строка содержит пробелы, запятые или другие ограничители, она должна быть заключена в одинарные скобки <>.

Тело блока может включать в себя любые предложения языка Ассемблера. Формальный параметр в теле блока может быть использован произвольное число раз.

Когда MASM распознает директиву IRPC, он создает копию предложений блока для каждого символа в строке. При копировании предложений осуществляется замена текущим символом строки всех вхождений формального параметра блока.

 

 








Date: 2015-05-22; view: 382; Нарушение авторских прав



mydocx.ru - 2015-2021 year. (0.016 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию