Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование параметров в макрокомандах.
В предыдущем макроопределении требовались фиксированные имена сегментов: cseg, dseg и stack. Для того, чтобы макрокоманда была более гибкой и могла принимать любые имена сегментов, определим эти имена, как формальные параметры:
Пример2: init2 macro csname,dsname,ssname ;Формальные параметры assume cs:csname,ds:dsname,ss:ssname;es:dsname push ds sub ax,ax push ax mov ax,dsname mov ds,ax mov es,ax endm Формальные параметры (аргументы, указываемые при объявлении или определении макроса) в макроопределении указывают ассемблеру на соответствие их имен любым аналогичным именам в теле макроопределения. Все три формальных параметра csname, dsname и ssname встречаются в директиве assume, а параметр dsname еще и в последующей команде mov. Формальные параметры могут иметь любые правильные ассемблерные имена, не обязательно совпадающими именами в сегменте данных. Теперь при использовании макрокоманды init2 необходимо указать в качестве параметров действительные имена трех сегментов в соответствующей последовательности (фактические параметры – это аргументы, передаваемый в макрос при его вызове).
(слайд №12) Например, следующая макрокоманда содержит три параметра, которые соответствуют формальным параметрам в исходном макроопределении:
Макроопределение: init2 macro csname,dsname,ssname (форм. параметры) | | | Макрокоманда: init2 cseg, dseg, stack (параметры)
Так как ассемблер уже определил соответствие между формальными параметрами и операторами в макроопределении, то теперь ему остается подставить параметры макрокоманды в макрорасширении:
Ассемблер не распознает регистровые имена и имена, определенные в области данных, как таковые. В одной макрокоманде может быть определено любое число формальных параметров, разделенных запятыми, вплоть до 120 колонки в строке.
(слайд №13) Комментарии.
Комментарии – это пояснения к исходному тексту программы, находящиеся непосредственно внутри комментируемого кода. Для пояснений назначения макроопределения в нем могут находиться комментарии. Директива comment или символ «;» указывают на строку комментария. Так как по умолчанию в листинг попадают только команды генерирующие объектный код, то ассемблер не будет автоматически выдавать и комментарии, имеющиеся в макроопределении. Если необходимо, чтобы в расширении появлялись комментарии, следует использовать перед макрокомандой директиву.lall ("list all" - выводить все), которая кодируется вместе с лидирующей точкой: .lall <имя_макроса> [<формальные_параметры_макроса>]
Макроопределение может содержать несколько комментариев, причем некоторые из них могут выдаваться в листинге, а другие - нет. В первом случае необходимо использовать директиву.lall. Во втором – кодировать перед комментарием два символа точка с запятой (;;) - признак подавления вывода комментария в листинг. По умолчанию в ассемблере действует директива.xall, которая выводит в листинг только команды, генерирующие объектный код. И, наконец, можно запретить появление в листинге ассемблерного кода в макрорасширениях, особенно при использовании макрокоманды в одной программе несколько раз. Для этого служит директива.sall ("suppress all" - подавить весь вывод), которая уменьшает размер выводимого листинга, но не оказывает никакого влияния на размер объектного модуля. Директивы управления листингом.lall,.xall,.sall сохраняют свое действие по всему тексту программы, пока другая директива листинга не изменит его. Эти директивы можно размещать в программе так, чтобы в одних макрокомандах распечатывались комментарии, в других - макрорасширения, а в третьих подавлялся вывод в листинг. (слайд №14) Использование макрокоманд в макроопределениях. Макроопределение может содержать ссылку на другое макроопределение. Рассмотрим простое макроопределение dos21, которое заносит в регистр ah номер функции dos и выполняет int 21h:
dos21 macro dosfunc mov ah,dosfunc int 21h endm
Для использования данной макрокоманды при вводе с клавиатуры необходимо закодировать:
lea dx,namepar dos21 0ah
Предположим, что имеется другое макроопределение, использующее функцию 02 в регистре ah для вывода символа:
disp macro char mov ah,02 mov dl,char int 21h endm
Для вывода на экран, например, звездочки достаточно закодировать макрокоманду disp '*'. Можно изменить макроопределение disp, воспользовавшись макрокомандой dos21:
disp macro char mov dl,char dos21 02 endm
Теперь, если закодировать макрокоманду disp в виде disp '*', то ассемблер сгенерирует следующие команды:
mov dl,'*' mov ah,02 int 21h
Директива local.
В некоторых макрокомандах требуется определять элементы данных или метки команд. При использовании такой макрокоманды в программе более одного раза происходит также неоднократное определение одинаковых полей данных или меток. В результате ассемблер выдаст сообщения об ошибке из-за дублирования имен. Для обеспечения уникальности генерируемых в каждом макрорасширении имен используется директива local, которая кодируется непосредственно после директивы macro, даже перед комментариями. Общий формат имеет следующий вид:
local dummy-1,dummy-2,;Формальные параметры
(слайд №15)
|
||||||
Последнее изменение этой страницы: 2022-09-03; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.207.174 (0.009 с.) |