Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
88
Добавлен:
12.03.2015
Размер:
320 Кб
Скачать

3.6 Директивы препроцессора

В ассемблере доступны следующие директивы препроцессора Языка C, указанные в таблице 6.

Таблица 6 – Директивы препроцессора

Директива

Описание

#define

Назначает значение метке.

#elif

Вводит новое условие в блок #if ... #endif .

#else

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

#endif

Заканчивает блоки #if, #ifdef, или #ifndef.

#error

Генерирует ошибку.

#if

Обрабатывает команды, если условие истинно.

#ifdef

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

#ifndef

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

#include

Подключает файлы

#pragma

Распознаётся и игнорируется.

#undef

Отменяет метки (переменные)

/*comment*/

Комментарий в стиле языка С

//

Комментарий в стиле языка С++

Синтаксис:

#define label text

#elif condition

#else

#endif

#error "message"

#if condition

#ifdef label

#ifndef label

#include {"filename" | <filename>}

#message "message"

#undef label

/*comment*/

//comment

где: параметр condition принимает одно из следующих значений:

Абсолютное выражение

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

string1=string2

Условие истинно, если string1 и string2 имеют одинаковую длину и содержание.

string1<>string2

Условие истинно, если string1 и string2 имеют разную длину и содержание

filename – имя подключаемого файла

labelметка, которая должна быть определена, отменена или проверена.

messageтекст выводимого сообщения

text - Значение, которое будет назначено.

Описание директив препроцессора

#define

Используется для определения временной переменной. Подобно тому, как записывается label VAR value

#undef

Используется для отмены переменной.

/*comment*/

Используется для комментирования секции листинга

//comment

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

#if, #else, #endif

Директивы #if ... #else ... #endif используются для управления процессом трансляции во время ассемблирования. Если условие после директивы #if не истинно, последующие команды не будут обрабатываться, пока не будут найдены директивы #endif или #else .

#ifdef

Используется, для трансляции команд до следующей директивы #else или #endif , только если символическая метка определена.

#ifndef

Используется, для трансляции команд до следующей директивы #else или #endif , только если символическая метка не определена.

#include

Используется, чтобы вставить содержимое файла в исходный код в указанной точке. #include "filename" ищет следующие каталоги в указанном порядке:

-Каталог исходного кода.

-Каталоги, указанные опцией -I

-Текущий каталог

если указывается не кавычки, а скобки #include <filename>, то файл ищется в порядке:

-Каталоги, указанные опцией -I

-Текущий каталог

#error

Используется для генерации ошибки, определяемой пользователем.

Примеры:

Следующий пример определяет метки tweak и adjust.

#define tweak 1

#define adjust 3

#ifdef tweak

#if adjust=1

SUB A,#4

#elif adjust=2

SUB A,#20

#elif adjust=3

SUB A,#30

#endif

#endif

Следующий пример использует #include, чтобы включить файл, определяющий макрос в исходный файл. Например, следующий макрос мог быть определен в файле macros.s26 :

xchrp MACRO a,b

PUSH a

PUSH b

POP a

POP b

ENDM

NAME include

#include c:\iar\asm\inc\”macros.s26”

main: xchrp RP2,RP3

RET

END main

Соседние файлы в папке методички к 78К0