Иллюстрированный самоучитель по Assembler


Макросредства ассемблера - часть 7


В тех случаях, когда макрокоманды составляются для конкретной программы, они включаются в текст программы так, как это было сделано в примере 2.1. Однако часто программист оформляет в виде макрокоманд стандартные процедуры общего назначения, например, программную задержку или вывод на экран строки текста. В этом случае тексты макроопределений целесообразно поместить в макробиблиотеку.

Макробиблиотека представляет собой файл с текстами макроопределений. Макроопределения записываются в этот файл точно в таком же виде, как и в текст программы. Ниже приведен текст файла макробиблиотеки с произвольным именем MYMACRO.MAC, содержащей две макрокоманды.

;Макрокоманда endpr завершения программы

endpr macro ;Макрокоманда без параметров

mov AX,4C00h

int 2 In

endm ;Конец макрокоманды

;Макрокоманда delay настраиваемой программной задержки

delay macro time ;Параметр - число шагов

locallabell,Iabel2 ;Локальные метки

push CX ;Сохраним внешний счетчик

mov CX,time ;Получим фактический параметр

Iabel2 : push CX ;Сохраним его в стеке

mov CX, 0 ;Пусть будет 64К шагов

labell: loop lanell ;Внутренний цикл

pop CX ;Извлечем внешний счетчик

loop Iabel2 ;Внешний цикл

pop CX ;Восстановим CX программы

endm ;Конец макрокоманды

Для того чтобы транслятору были доступны макрокоманды из файла MYMACRO.MAC, его следует на этапе трансляции подсоединить к исходному тексту программы директивой ассемблера include:

include my macro, mac

Все макрокоманды, включенные в этот файл, можно использовать в любом месте программы.

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

Директивы условной трансляции (условного ассемблирования) позволяют иметь в исходном тексте программы различные варианты отдельных фрагментов программы, и путем задания определенных условий управлять процессом трансляции. Таким образом можно, например, включать или исключать из текста программы служебные, отладочные фрагменты или настраивать программу для выполнения на заданном процессоре.

Пусть, например, в процессе отладки сложной программы мы используем подпрограмму regs вывода на экран содержимого всех регистров процессора. Включая в разные места программы вызов этой подпрограммы, мы имеем возможность контролировать ход ее выполнения, в том числе и такие тонкие моменты, как, например, расположение программы в памяти или интенсивность использование стека. Для управления процессом трансляции предусмотрим константу debug (отладка), ненулевое значение которой будет требовать отладочного варианта трансляции, а нулевое - рабочего. Начало программы, а также участки с вызовом отладочной подпрограммы будут выглядеть следующим образом:




- Начало -  - Назад -  - Вперед -