Материал: Уч_пос_АрхКомп_2017

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Sr_Mov ds,es

при макрорасширении будет заменен на

push ds

pop es

Пример некорректного задания параметра.

Time_Msg Macro XXX

TimXXX: db ‘сейчас ХХХ часов$’

ENDM

  • параметр макроопределения не может быть частью идентификатора;

  • параметр макроопределения непосредственно не может использоваться в строке, так как его трудно распознать.

Правильный вариант.

Time_Msg Macro XXX

Tim&XXX: db ‘сейчас &ХХХ& часов$’

ENDM

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

Пример 4.

Delay Macro count

local cycle

push cx

mov cx, count

cycle: loop cycle

pop cx

ENDM

В макросредствах широко применяются два вида директив (повторения и условные директивы).

Использование в макросах директив повторения.

REPT, IRP, IRPC – это встроенные макросы, следовательно должен быть концевик ENDM.

  1. REPT

REPT выражение

тело

ENDM

Выражение задает количество раз, которое должно повториться тело. Пример.

REPT 4

shl ax,1

ENDM

При макрорасширении макровызов будет заменен на четыре повторяющихся команды shl ax,1.

Пример 5.

Alloc Macro tlab, lenght

value=0

tlab EQU this byte

rept lenght

value=value+1

db value

ENDM

ENDM

Вызов:

Date Segment

Alloc tab1, 40

Date ENDS

  1. IRP

IRP фиктивный_аргумент, <список значений>

тело

ENDM

Каждый раз из списка подставляется новое значение вместо фиктивного аргумента.

Пример 6.

Savregad Macro

irp r, <ax, bx, dx>

push r

ENDM

ENDM

  1. IRPC

IRPC фиктивный_аргумент, строка

тело

ENDM

При расширении при каждом повторе тела будет подставляться очередной символ из строки.

Пример 7.

IRPC odd5, 13579

db odd5

ENDM

При макрорасширении получим команды db 1, db 3, db 5, db 7, db 9.

Пример 8.

IRPC char, hello

db char

ENDM

При макрорасширении получим команды db h, db e, db l, db l, db o.

Пример 9.

IRPC char, hello

db char

ENDM

При макрорасширении получим команды db ‘h’, db ‘e’, db ‘l’, db ‘l’, db ‘o’.

Условные директивы

Позволяют при трансляции программы просмотреть или пропустить фрагмент программы в зависимости от проверки условия.

  1. Директивы условной трансляции.

  2. Директивы условной генерации ошибок (позволяют выдать соответствующее сообщение об ошибках на этапе трансляции).

Назначение директивы условной трансляции:

  1. Написание отладочных версий программ, в которых после завершения отладки можно протранслировать код без соответствующих операторов

(Например Debug = 1).

  1. Написание универсальных макросов, настраиваемых на систему.

IF xxx

Операторы (Тело 1)

[ ELSE

Операторы (Тело 2) ]

ENDIF

xxx – некоторое выражение, проверка которого должна давать булевский результат

xxx = 0 Ложь

xxx  0 Истина

Допускается 255 уровневое вложение.

Существуют предопределенные операторы IF:

IF1 Его тело транслируется только на первом проходе.

Пример10.

IF1

INCLUDE MYLIB

ENDIF

IFE xxx Транслируется, если выражение (xxx) равно нулю.

ALLOC MACRO LENGHT

VALUE

REPT LENGTH

IFE VALUE – 0FFh

EXITM

ENDIF

VALUE = VALUE + 1

ENDM

ENDM

EXITM – Выход из макроса

Написанный макрос обеспечивает заполнение памяти целыми числами от 1 до 256 байт.

II.

IFDET / IFNDEF имя _ переменной

Тело выполняется, если определено / не определено имя _ переменной.

Пример 12. (задает возможность проверки дисплея):

IFDEF Disptest

; часть первой общей проверки дисплея

IFCOLOR

; часть проверки цветного дисплея

ELSE

; часть проверки монохромного дисплея

ENDIF

; часть второй общей проверки

ELSE

; код, выполнения при отсутствие проверки

ENDIF

IFB / IFNB <аргумент> Проверяет, имеется или отсутствует аргумент (IF Blank – если отсутствует)

Применяется:

  1. Для выдачи подсказок об отсутствия аргументов.

  2. Для разработки рекурсивных макросов с переменным числом в параметрах.

Пример 11.

I способ применения

Make _ Pasc _ String Macro Id, Msg

Local MsgLen, Endstr

Ifb <id>

Display ‘Задать переменную id’

ExitM

IFB <Msg>

Display ‘Задать преобразованную строку’

ExitM

Else

Id Db Endstr-id-1,’&Msg&’

Label EndStr Byte

EndIf

EndIf

EndM

II способ применения

PushReg Macro R1, R2, R3, R4, R5, R6

Ifnb <R1>

Push R1

PushReg R2, R3, R4, R5, R6

Endif

EndM

Отличительные признаки рекурсивного вызова макроса:

  1. Должен быть вызов заново себя с количеством элементов меньше на единицу.

  2. Предусмотрен контроль аргумента с помощью директивы Ifnb.

Способы использования макросов

  1. Непосредственное размещение макроопределения в тексте программы. (Оно размещается в самом начале, обычно после заголовка.)

Применение:

  1. Создание макробиблиотеки с последующим подключением ее к программе. Библиотека строится как обычный файл. В основной файл добавляются следующие команды:

IF1

Include My _ Maclib

EndIf

Можно исключить некоторые макросы из библиотеки, если они не нужны.

Purge Mac1, Mac2, Mac7

Источник: https://studfile.net/preview/15919868/

Смотрите также:

А27103 Василинец И. М., Колодязная В.С. Методы исследования
Анализ учета доходов и расходов организации
Вступительные испытания по профилю «Промышленный дизайн». методические указания к выполнению вступительных испытаний для абитуриентов направления 54.03.01. Семыкин В.Н., Кузовкин А.В
Выполнение внутримышечных инъекций
ЛР-8_Ф-22_10_Литвиненко_Харькова_Отчет.docx
Морфология праздника Красной горки
Обследование помещений, зданий, сооружений, участков местности и транспортных средств (Основные понятия проведения ОРМ «Обследование помещений, зданий, сооружений, участков местности и транспортных средств»)
Политика предприятия в области качества
Предприятие по сервису и ремонту автомобилей в структуре Центральной районной больницы Чурапчинского улуса в с. Чурапча
Розробка технологічної послідовності жіночого жакета із коміром 'стійкою' з прорізними кришеннями в складну рамку