Основные инструкции для работы с регистрами 
";


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные инструкции для работы с регистрами



Инструкция. Мнемоника Действие
ADDB ADDB XARn, #7bit #7bit - 7-битовая константа без знака XARn = XARn + #7bit
ADRK ADRK XARn, #8bit #7bit - 8-битовая константа без знака XARn = XARn + #8bit
ADDK addk (.unit) cst, dst .unit =.S1,.S2 cst+dst => dst
SUB SUBU sub (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 src1=src2 => dst
ABS abs (.unit) src, dst .unit =.L1,.L2 abs(src) => dst
B b (.unit) label .unit = S1, S2  
CMPEQ cmpeq (.unit) src1, src2, dst .unit =.L1,.L2 1 => dst при src1=src2
CMPGT CMPGTU cmpgt (.unit) src1, src2, dst .unit =.L1,.L2 1 => dst при src1>src2
CMPLT CMPLTU cmplt (.unit) src1, src2, dst .unit =.L1,.L2 1 => dst при src1<src2
MPY MPYU mpy (.unit) src1, src2, dst .unit =.M1,.M2 src1*src2 => dst
MV mv (.unit) src, dst .unit =.L1,.L2, S1,.S2,.D1,.D2 src => dst
MVK mvk (.unit) cst, dst .unit =.S1,.S2 cst => dst
NEG neg (.unit) src, dst .unit =.L1,.L2,.S1,.S2 =src => dst
NOP nop  
STB STH STW stb (.unit) src, *+baseR[offserR] .unit =.D1,.D2 src => baseR[offsetR]
LDB LDH LDW ldb (.unit) *+baseR[offserR], dst .unit =.D1,.D2 baseR[offsetR] => dst
AND and (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 src1 AND src2 => dst
OR or (.unit) src1, src2, dst .unit =.L1,.L2,.S1,.S2 src1 OR src2 => dst
XOR xor (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 src1 XOR src2 => dst
NOT not (.unit) srt, dst .unit =.L1,.L2,.S1,.S2  
SHL shl (.unit) src2, src1, dst .unit =.S1,.S2 (src2 на src1) => dst
SHR shr (.unit) src2, src1, dst .unit =.S1,.S2 (src2 на src1) => dst

Основные команды для работы с вещественными числами

Инструкция Мнемоника Действие
ABSSP ABSDP abssp (.unit) src, dst .unit =.S1,.S2 absdp(src) => dst
ADDSP ADDDP addsp (.unit) src1, src2, dst .unit =.L1,.L2 src1+src2 => dst
SUBSP SUBDP subsp (.unit) src1, src2, dst .unit =.L1,.L2 src1+src2 => dst
CMPEQSP CMPEQDP cmpeqsp (.unit) src1, src2, dst .unit =.S1,.S2 1 => dst при src1=src2
CMPGTSP CMPGTDP cmpgtsp(.unit) src1, src2, dst .unit =.S1,.S2 1 => dst при src1>src2
CMPLTSP CMPLTDP cmpltsp (.unit) src1, src2, dst .unit =.S1,.S2 1 => dst при src1<src2
MPYSP MPYDP mpysp (.unit) src1, src2, dst .unit =.M1,.M2 src1*src2 => dst
SPINT spint (.unit) src, dst .unit =.L1,.L2 src1 => dst
INTSP intsp (.unit) src, dst .unit =.L1,.L2 src1 => dst
DPINT dpint (.unit) src, dst .unit =.L1,.L2 src1 => dst
INTDP intdp (.unit) src, dst .unit =.L1,.L2 src1 => dst
DPSP dpsp (.unit) src, dst .unit =.L1,.L2 src1 => dst
SPDP spdp (.unit) src, dst .unit =.L1,.L2 src1 => dst

Листинги программ

Листинг программы показывает исходные инструкции и объектный код, который они производят. Чтобы получить файл листинга, вызовите ассемблер с опцией - L. Листинг печатается постранично. Незаполненную строку и строку заголовка, имеют наверху каждая страница распечатки. Любой заголовок, определенный.title директивой, печатается в строке заголовка. Номер страницы печатается справа от заголовка. Если Вы не используете.title директиву, печатается имя исходного файла. Ассемблер вставляет незаполненную строку ниже строки заголовка.

Каждая строка в исходном файле создает, по крайней мере, одну строку в файле листинга. Она содержит в порядке слева направо номер исходной инструкции, значение SPC, объектный код, и исходную инструкцию..

Пример показывает листинг ассемблера.

Формат объектного файла

Ассемблер и компоновщик создают объектные файлы, которые могут выполняться устройством. Формат для этих объектных файлов назван общим объектным файловым форматом (COFF – ООФФ).

ООФФ упрощает модульное программирование при написании программы на языке ассемблера, поскольку он позволяет представлять программу и данные в виде блоков. Эти блоки известны как разделы. Как ассемблер, так и компоновщик обеспечены директивами, которые позволяют создавать и манипулировать разделами.

Разделы. Наименьший модуль объектного файла называется разделом. Раздел - блок программы или данных, который занимает непрерывное пространство на карте памяти с другими разделами. Каждый раздел объектного файла является самостоятельным и отличным от других. По умолчанию ООФФ объектных файлов всегда содержит три раздела:

· Раздел текста -.text обычно содержит выполняемый код.

· Раздел данных -.data обычно содержит инициализированные данные.

· Раздел.bss обычно резервируется для неинициализированных переменных.

Кроме того, ассемблер и компоновщик позволяют Вам создавать, называть и связывать поименованные разделы, которые используются подобно разделам.data,.text и.bss. Есть два основных типа разделов:

· Инициализированные разделы содержат данные или код. Разделы.text и.data проинициализированы. Именуемые разделы, создаваемые с помощью директивы ассемблера.sect, также проинициализированы;

· Неинициализированные разделы резервируют пространство на карте памяти для неинициализированных данных. Раздел.bss неинициализированный. Именуемые разделы, создаваемые с помощью директивы ассемблера.usect, также неинициализированные.

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

В системе имеется целевая платформа (Устройство), это плата с конкретным процессором. Там имеется целевая память, содержащая разделы: ПЗУ (ROM), перепрограммируемое ПЗУ (EEPROM), ОЗУ (RAM). Этим разделам назначается область адресов в карте распределения целевой памяти. Компоновщик должен перемещать в целевую память разделы объектного кода. Поскольку большинство систем содержат различные типы памяти, то применение разделов может помочь использовать целевую память более эффективно. Все разделы независимо переместимые, любой раздел можно разместить в любом блоке целевой памяти. Если у вас нет целевой платформы, то отладчик имитирует ее.

Ассемблер идентифицирует части программы на языке ассемблера, которые принадлежат данному разделу. Ассемблер имеет 5 директив поддержки этой функции:

·.bss

·.usect

·.text

·.data

·.sect

Директивы.bss и.usect создают неинициализированные разделы; директивы.text,.data, и.sect создают инициализированные разделы.

Вы можете создавать подразделы любого раздела, чтобы дать Вам более жесткое управление картой памяти. Подразделы создаются, используя.sect и.usect директивы. Подразделы идентифицируются основным именем раздела и именем подраздела, отделенным двоеточием.

Неинициализированные разделы резервируют пространство в памяти C28x; они обычно распределены в ОЗУ. Эти разделы не имеют никакого фактического содержания в объектном файле, они просто резервируют память. Программа может использовать это пространство во время выполнения для создания и сохранения переменных. Неинициализированные области данных формируются, используя директивы ассемблера.bss и.usect:

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

· Директива.usect резервирует пространство в определенном неинициализированном названном разделе. Директива.usect резервирует данное число байтов в разделе с указанным именем. Вы должны определить размер, нет никакого значения по умолчанию.

Каждый раз, когда Вы вызываете.bss или.usect директиву, ассемблер резервирует дополнительное пространство в.bss или названном разделе. Синтаксис директивы.bss:

.bss символ, размер в словах [, флаг блокировки[, флаг выравнивания [, тип]]

Синтаксис директивы.usect:

символ.usect ”имя раздела”, размер в словах [, флаг блокировки[, флаг выравнивания]

 

· Символ указывает на первый байт, зарезервированный этим обращением директивы.bss или.usect. Символ соответствует имени переменной, для которой Вы резервируете пространство. На него может ссылаться любой другой раздел, а также он может быть объявлен, как глобальный символ (директивой ассемблера.global).

· Размер в словах – абсолютное выражение.

· Флаг блокировки.

· Флаг выравнивание – необязательный параметр. Он определяет минимальное выравнивание в байтах, требуемое распределяемым пространством. Значение по умолчанию – 1 байт. Значение должно быть степенью числа 2.

· Необязательный тип.

Директивы инициализированных разделов (.text,.data, и.sect) указывают ассемблеру прекратить трансляцию в текущий раздел и начать транслировать в обозначенный раздел. Директивы.bss и.usect, однако, не заканчивают данный раздел и не начинают новый, они просто выходят от текущего раздела временно. Директивы.bss и.usect могут появляться где-нибудь в инициализированном разделе, не воздействуя на его содержание.

Ассемблер обрабатывает неинициализированные подразделы (созданные.usect директивой) тем же самым способом, как неинициализированные разделы.

Инициализированные разделы содержат выполняемый код или инициализированные данные. Содержание этих разделов записывается в объектный файл и помещается в память C28x, когда программа загружается. Каждый инициализированный раздел – независимо перемещаемый и может ссылаться на символы, которые определены в других разделах. Компоновщик автоматически решает эти ссылки к другим разделам. Три директивы предписывают ассемблеру размещать код или данные в раздел. Синтаксис этих директив:

.text

.data

.sect «имя раздела»

Когда ассемблер сталкивается с одной из этих директив, он останавливает трансляцию в текущий раздел (действует как команда конца текущего раздела). Затем он транслирует последующий код в обозначенный раздел, пока не обнаружит другую.text,.data, или.sect директиву.

Разделы формируются через итеративный процесс. Например, когда ассемблер первый раз сталкивается с директивой.data, раздел.data - пуст. Инструкции, следующие за первой директивой.data, собираются в.data раздел (пока ассемблер не сталкивается с.text или.sect директивой). Если ассемблер сталкивается с последующими.data директивами, то он прибавляет инструкции после этих директив.data к инструкциям, уже находящимся в разделе.data. Это создает единый раздел.data, который может быть распределен непрерывно в памяти.

Инициализированные подразделы создаются.sect директивой. Ассемблер обрабатывает инициализированные подразделы тем же самым способом, как инициализированные разделы.

Названные разделы - разделы, которые Вы создаете. Вы можете использовать их подобно заданным по умолчанию.text,.data, и.bss разделам, но они транслируются отдельно. Например, повторное использование.text директивы создает единый.text раздел в объектном файле. Во время компоновки этот.text раздел распределяется в памяти как одиночный модуль. Предположим, что имеется часть выполняемого кода (возможно подпрограмма инициализации), которую Вы не хотите размещать вместе с.text. Если Вы размещаете этот сегмент кода в названном разделе, он транслируется отдельно от.text, и Вы можете распределять его в памяти отдельно. Вы можете также транслировать инициализированные данные, который отличны от.data раздела, и Вы можете резервировать пространство для неинициализированных переменных, которые отличны от.bss раздела.

Директивы ассемблера

Директивы ассемблера поставляют данные программе и управляют процессом трансляции. Директивы ассемблера дают возможность Вам делать следующее:

· Транслировать код и данные в указанные разделы.

· Резервировать пространство в памяти для неинициализированных переменных.

· Управлять видом листинга.

· Инициализировать память.

· Транслировать условные блоки.

· Определять глобальные переменные.

· Определять библиотеки, из которых ассемблер может получить макрокоманды.

· Исследовать информацию о символьной отладке.

Внимание: Метки и комментарии не показаны в синтаксисе.

Любая исходная инструкция, которая содержит директиву, может также содержать метку и комментарий. Метки начинаются в первом столбце (они - единственные элементы, кроме комментариев, которые могут появляться в первом столбце), а комментарии должны начинаться с точки с запятой или звездочки, если комментарий - единственный элемент в строке. Чтобы улучшать разборчивость, метки и комментарии не показываются, как часть синтаксиса директив. В описании части, заключенные в квадратные скобки, могут пропускаться, ассемблер будет их задавать по умолчанию.

Разделы

Мнемоника и синтаксис Описание
.bss символ, размер в словах [, флаг блокировки [, флаг выравнивания [, тип]] Резервирует пространство в разделе.bss (неинициализированные данные)
.data Транслирует в раздел.data (инициализированные данные).  
.sect ”имя раздела” Транслирует в названный (инициализированный) раздел
.text Транслирует в раздел.text (выполняемый код)
символ.usect ”имя раздела”, размер в словах [, флаг блокировки[, флаг выравнивания] Резервирует пространство в названном разделе (неинициализированном)

Константы

Мнемоника и синтаксис Описание
.byte значение1[,..., значениеN] Заносит в 16-разрядные слова байты из списка. В слово 1 байт в младшую часть.
.char значение1[,..., значениеN] Заносит в 16-разрядные слова символы из списка. В слово 1 символ в младшую часть.
.string {выражение ”строка”} Текстовые строки. Заносятся символы строки в младшие байты последовательных слов. То же самое делает.char со списком символов.
.pstring {выраж.1 ”строка1”} [,…,{выраж.N ”строкаN”}] Аналог.string. Заносятся символы строки в оба байта последовательных слов.
.field значение[, размер] Инициализирует подполя в константе размером 16 бит. Для каждого подполя задаются значение и размер. При последовательном применении константа заполняется справа налево. Применяется для упаковки нескольких значений в одном месте.
.int значение1[,...,значениеN] Заносит в 16-разрядные слова 16-разрядные целые числа из списка. Есть выравнивание по границам слов.
.longзначение1 [,...,значениеN] Заносит в 16-разрядные слова 32-разрядные целые числа из списка. На одно значение 2 слова. Есть выравнивание по границам слов.
.xlongзначение1 [,...,значениеN] То же, что.long. Нет выравнивания по границам слов.
.word значение1 [,...,значениеN] Заносит в 16-разрядные слова 16-разрядные числа из списка. Есть выравнивание по границам слов.
.float значение1[,...,значениеN] Заносит в 16-разрядные слова 32-битные константы с ПТ, IEEE с однократной точностью из списка. На одно значение 2 слова. Есть выравнивание по границам слов.
.xfloat значение1 [,...,значениеN] То же, что.flooat. Нет выравнивания по границам слов.

Выравнивания

Мнемоника и синтаксис Описание  
.align [размер в словах] Выравнивает SPC на границе, указанной размером в байтах, который должен быть степенью 2; по умолчанию – до границы
.bes [размер в битах] Резервирует биты в текущем разделе. Метка указывает на конец резервируемого пространства
.space [размер в битах] Резервирует биты в текущем разделе. Метка указывает на начало резервируемого пространства

Листинг

Мнемоника и синтаксис Описание  
.drlist Допускает распечатку всех строк директив (по умолчанию).
.drnolist Подавляет распечатку определенных строк директив.
.fclist Позволяет распечатку ложного условного блока (по умолчанию).
.fcnolist Подавляет распечатку ложного условного блока кода.
.length [длина страницы] Устанавливает длину страницы листинга программы
.list Повторный запуск распечатки программы
.mlist Позволяет распечатку макрокоманд и блоков циклов(по умолчанию)
.mnolist Подавляет распечатку макрокоманд и блоков циклов
.nolist Останавливает распечатку программы
.option опция1 [, опция2,...] Выбирает опции листинга; доступны опции - A,B,D,H,L,М,N,O,R,T,W и X
.page Пропускает страницу в распечатке программы
.sslist Позволяет расширенный листинг символов замены
.ssnolist (по умолчанию) Подавляет расширенный листинг символов замены
.tab размер Устанавливает размер знаков табуляции (в символах)
.title “строка” Печатает заголовок в начале страницы листинга
.width [ширина страницы] Устанавливает ширину страницы распечатки программы

Файлы

Мнемоника и синтаксис Описание  
.copy [“]имя файла[“] Включает исходные инструкции из другого файла
.def символ1 [,...,символN] Идентифицирует один или более символов, которые определены в текущем модуле и могут использоваться в других модулях
.global символ1 [,...,символN] Идентифицирует один или более глобальных символов
.include [“]имя файла[“] Включает исходные инструкции из другого файла
.mlib [“]имя файла[“] Определяет библиотеку макрокоманд
.ref символ1 [,...,символN] Идентифицирует один или более символов, используемых в текущем модуле, которые определены в другом модуле

Условная трансляция

Мнемоника и синтаксис Описание  
.break [четкое выражение] Заканчивает трансляцию.loop, если четкое выражение - истина. При использовании конструкции.loop, конструкция.break - необязательна
.else Транслирует блок кода, если (.if четкое выражение) является ложным. При использовании конструкции.if, конструкция.elsе необязательна
.elseif четкое выражение Транслирует блок, если.if четкое выражение является ложным, а условие.elseif - истинно. При использовании конструкции.if, конструкция.elseif - необязательна
.endif Заканчивает блок кода.if
.endloop Заканчивает блок кода.loop
.if четкое выражения Транслирует блок, если четкое выражение является истинным
.loop [четкое выражение] Начинает повторяемую трансляцию кодового блока; счетчик цикла определен четким выражением

Структуры

Мнемоника и синтаксис Описание
.struct Начало структуры. Это коллекция однотипных данных. Для данных, используемых совместно в исходниках Ассемблера и языка С++.
.cstruct Начало структуры с выравниванием и размещением. Для данных, используемых совместно в исходниках Ассемблера и языка С++.
.endstruct Конец структуры.
.union Начало юниона. Это коллекция разнотипных данных. Для данных, используемых совместно в исходниках Ассемблера и языка С++.
.endunion Конец юниона.
.tag Приписывает атрибуты структуры метке

Символы во время трансляции

Мнемоника и синтаксис Описание  
.asg [“]строка знаков[“], символ замены Назначает строку знаков символу замены
.eval четкое выражение, символ замены Исполняет арифметику на числовом символе замены.
.label символ Определяет переместимую во время загрузки метку в разделе.
символ.set значение Приравнивает значение символу.

Разные директивы

Мнемоника и синтаксис Описание  
.asmfunc Начало блока кода для функции
. cdecls [options,]"filename" [, "filename2"[,...] Согласование дескрипторов для кодов C и ассемблера.
.clink [”имя раздела”] Допускает условную компоновку для текущего или указанного раздела
.emsg строка Посылает определяемые пользователем сообщения об ошибке устройству вывода; не производит объектный файл
.end Заканчивает программу
.endasmfunc Конец блока кода для функции
.mmsg строка Посылает определяемые пользователем сообщения устройству вывода
.newblock Снимает определение локальных меток
.sblock Создание раздела блокирования
.wmsg строка Посылает определяемые пользователем предупреждающие сообщения устройству вывода

Макроязык и макрокоманды

Ассемблер поддерживает макроязык, который дает Вам возможность создать ваши собственные команды. Это особенно полезно, когда программа выполняет частные задачи несколько раз. Макроязык позволяет Вам:

· Определить ваши собственные макрокоманды, и переопределить существующие макрокоманды.

· Упростить длинный или сложный ассемблерный код.

· Обратиться к макробиблиотекам, созданным архиватором.

· Определить условные и повторяемые блоки в пределах макрокоманд.

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

· Управлять листингом расширения макрокоманд.

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

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

Использование макрокоманды - процесс из 3 шагов.

Шаг 1: Определение макрокоманды

Вы должны определить макрокоманды прежде, чем Вы можете использовать их в вашей программе. Имеются два метода для определения макрокоманд:

· Макрокоманды могут быть определены в начале исходного файла или в копируемом / включаемом файле.

· Макрокоманды могут также быть определены в макробиблиотеке. Макробиблиотека является собранием файлов в формате архива, созданном архиватором. Каждый элемент архивного файла (макробиблиотеки) может содержать одно макроопределение, соответствующее имени этого элемента. Вы можете обратиться к макробиблиотеке, используя.mlib директиву.

Шаг 2: Вызов макрокоманды

После того, как Вы определили макрокоманду, вызовите ее, используя имя макрокоманды как мнемонику в тексте исходной программы. Это называется вызовом макрокоманды.

Шаг 3: Расширение макрокоманды

Ассемблер разворачивает ваши макрокоманды, когда исходная программа вызывает их. Во время расширения ассемблер передает переменные аргументы параметрам макрокоманды, заменяет инструкция макровызова определением макрокоманды, затем транслирует исходный код. По умолчанию, макрорасширения печатаются в файле листинга. Вы можете выключить распечатку расширения, используя директиву.mnolist. Для получения дополнительной информации, см. раздел 5.8, Использование директив для форматирования листинга.

Когда ассемблер сталкивается с макроопределением, он размещает имя макрокоманды в таблице кодов операций (opcode table). Это переопределяет, любую предварительно определенную макрокоманду, библиотечный вход, директиву, или мнемонику команды, которые имеют то же самое имя, что и данная макрокоманда. Это позволяет Вам расширить функции директив и команд, а также добавить новые команды.

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

имя макрокоманды. macro [параметр 1] [,..., параметр n]

· Имя макрокоманды называет макрокоманду. Вы должны поместить имя в поле метки исходной инструкции. Только первые 128 знаков имени существенны. Ассемблер размещает макро-имя во внутренней таблице кодов операций, заменяя любую команду или прежнее макроопределение, имеющее то же самое имя.

· Директива. macro идентифицирует исходную инструкцию, как первую строку макроопределения. Вы должны разместить.macro в поле кода операции.

· Параметр 1,…, параметр n - являются необязательными символами замены, которые появляются как операнды директивы.macro.

Пример. Определение, вызов и расширение макрокоманды. Код определяет макрокоманду sadd4 с четырьмя параметрами r1, r2, r3, r4.

1 sadd4.macro r1,r2,r3,r4

2 sadd4 r1, r2,r3, r4

4 r1 = r1 + r2 + r3 + r4

5.endm

Макровызов: следующий код вызывает макрокоманду sadd4 с четырьмя параметрами:

11 00000000 sadd4 A0,A1,A2,A3

Макробиблиотеки. Один из способов определения макрокоманд - создание макробиблиотеки. Макробиблиотека - собрание файлов, которые содержат макроопределения. Вы должны использовать архиватор, чтобы собрать эти файлы, или элементы, в одном файле (называемом архивом). Каждый элемент макробиблиотеки содержит одно макроопределение. Файлы в макробиблиотеке должны быть не оттранслированными исходными файлами. Имя макрокоманды и имя элемента должны быть одинаковыми, а расширение имени файла с макрокомандой должно быть.asm.

Например:

Макрокоманда Имя файла в макробиблиотеке
simple simple.asm
add3 add3.asm

Вы можете обращаться к макробиблиотеке, используя.mlib директиву ассемблера. Синтаксис:. mlib имя файла

Когда ассемблер сталкивается с.mlib директивой, он открывает названную (в имени файла) библиотеку и создает таблицу содержания библиотеки. Ассемблер вводит имена индивидуальных элементов библиотеки в таблицы кодов операций в качестве библиотечных входов; это переопределяет любые существующие коды операции или макрокоманды, которые имеют то же самое имя. Если одна из этих макрокоманд вызывается, ассемблер извлекает вход библиотеки и загружает его в таблицу макрокоманд.

Ассемблер разворачивает этот библиотечный вход таким же образом, как он разворачивает другие макрокоманды. Извлекаются только те макрокоманды, которые фактически вызываются из библиотеки, и они извлекаются только один раз.

Рекурсивные и вложенные макрокоманды. Макроязык поддерживает рекурсивные и вложенные макровызовы. Это означает, что Вы можете вызывать другие макрокоманды внутри макроопределения. Вы можете вкладывать макрокоманды глубиной до 32 уровней. Когда Вы используете рекурсивные макрокоманды, Вы вызываете макрокоманду из ее собственного определения (макрокоманда вызывает саму себя).

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

Следующие директивы могут использоваться с макрокомандами. Директивы.macro,.mexit,.endm и.var допустимы только с макрокомандами; оставшиеся директивы - общие директивы языка ассемблера.

Создание макрокоманд:

Мнемоника и синтаксис Описание
.endm Завершает макроопределение
имя.macro [параметр 1] [,..., параметр n] Определяет макрокоманду с указанным именем
.mexit Выполняет переход к.endm
.mlib имя файла Указывает библиотеку, содержащую макроопределения

Управление символами замены:

Мнемоника и синтаксис Описание
.asg [“]строка знаков[“] Назначает знаковую строку символу замены
.eval четкое выражение, символ замены Исполняет арифметику на числовом символе замены

Условная трансляция:

Мнемоника и синтаксис Описание
.break [четкое выражение] Прерывает трансляцию повторяемого блока (необязательная)
.endif Заканчивает условную трансляцию
.endloop Заканчивает трансляцию повторяемого блока
.else Необязательный условный блок
.elseif четкое выражение Необязательный условный блок
.if четкое выражение Начинает условную трансляцию
.loop [четкое выражение] Начинает трансляцию повторяемого блока

Создание сообщений во время трансляции:

Мнемоника и синтаксис Описание
.emsg Посылает сообщение об ошибке стандартному устройству вывода
.mmsg Посылает сообщение стандартному устройству вывода
.wmsg Посылает предупреждение стандартному устройству вывода

Форматирование листинга:

Мнемоника и синтаксис Описание
.drlist Разрешает печать всех директив листинга
.fcnolist Подавляет печать определенных директив листинга
.fclist Разрешает распечатку ложных условных блоков (по умолчанию)
.fcnolist Подавляет распечатку ложных условных блоков
.mlist Разрешает распечатку макрокоманды (по умолчанию)
.mnolist Подавляет распечатку макрокоманды
.sslist Разрешает распечатку расширений символов замены
.ssnolist Подавляет листинг расширений символов замены (по умолчанию)

Компоновщик

Компоновщик (Linker) создает исполняемые модули, объединяя объектные файлы COFF.

Вызов компоновщика. Общий синтаксис для вызова компоновщика:

cl2000 -v28 --run_linker [опции] имя файла 1... имя файла n

Опции - могут появляться где-нибудь в командной строке или в командном файле компоновщика.

Имя файла 1…имя файла n - могут быть объектные файлы, командные файлы компоновщика, или архивные библиотеки. Заданное по умолчанию расширение для всех входных файлов -.obj; любое другое расширение должно быть явно определено. Компоновщик может определять, является ли входной файл объектным или файлом ASCII, который содержит команды компоновщика. Заданное по умолчанию имя файла вывода a.out, если только Вы не используете -o опцию, чтобы назвать выходной файл.

Имеются два метода для вызова компоновщика:

· Определить параметры и имена файлов в командной строке. Этот пример связывает два файла, file1.obj и file2.obj, и создают названный модуль вывода link.out.
cl2000 -v28 --run_linker file1.obj file2.obj -o link.out

· Ввести команду cl2000 -v28 --run_linker без имен файла или параметров; компоновщик запрашивает их:
Command files: Командные файлы.
Object files [.obj]: Объектные файлы.
Output file []: Выходной файл.
Options: Опции.

Для командных файлов, введите один или большее количество имен командных файлов компоновщика.

Для объектных файлов, введите один или большее количество имен объектных файлов. Заданное по умолчанию расширение -.obj. Отделите имена файла пробелами или запятыми; если последний знак - запятая, компоновщик предлагает дополнительную строку для имен объектных файлов.

Выходной файл - имя выходного модуля компоновщика. Это имя отменяет любые опции –o, которые Вы вводите. Если нет параметра -o, и Вы не отвечаете на этот запрос, компоновщик создает объектный файл со значением по умолчанию - a.out.

Опции (параметры) - для дополнительных параметров, хотя Вы можете также ввести их в командный файл. Введите их с дефисами, так, как если бы Вы были в командной строке.

Архиватор

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

Вы можете формировать библиотеки из любого типа файлов. И ассемблер и компоновщик принимают архивные библиотеки в качестве входа; ассемблер может использовать библиотеки, которые содержат индивидуальные исходные файлы, а компоновщик может использовать библиотеки, которые содержат отдельные объектные файлы.

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

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

Чтобы вызывать архиватор, введите:

ar2000[-]команда [параметры] имя библиотеки [имя файла 1... имя файла n]

· [-]Команда - сообщает архиватору, как управлять существующими элементами библиотеки и любыми файлами с указанными именами. Перед командой может быть необязательный дефис. Вы должны использовать одну из следующих команд, когда Вы вызываете архиватор, но Вы можете использовать только одну команду в обращении к архиватору. Команды архиватора следующие:

· @ Использует содержание указанного файла вместо ввода в командной строке. Вы можете использовать эту команду, чтобы избежать ограничения на длину командной строки, наложенную операционной системой компьютера. Используйте (;) в начале строки в командном файле, чтобы включить комментарии.

· a Прибавляет указанные файлы к содержимому библиотеки. Эта команда не заменяет существующий элемент, который имеет то же самое имя, как добавленный файл; она просто добавляет новые элементы в конец архива.

· d Удаляет указанные элементы из библиотеки.

· r Заменяет указанные элементы библиотеки. Если Вы не указываете имена файлов, архиватор заменяет элементы библиотеки файлами с тем же самым именем из текущего каталога. Если указанный файл не найден в библиотеке,

· архиватор добавляет его, вместо замены.

· t Печатает оглавление библиотеки. Если Вы определяете имена файлов, только эти файлы печатаются. Если Вы не определяете никаких имен, архиватор перечисляет все элементы указанной библиотеки.

· x Извлекает указанные файлы. Если Вы не определяете имена элементов, архиватор извлекает все элементы библиотеки. Когда архиватор извлекает элемент, он



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 159; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.0.53 (0.005 с.)