Реферат Курсовая Конспект
Директивы - раздел Высокие технологии, АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРА Директивы Ассемблера Не Транслируются В Коды Операций, Они Ис...
|
Директивы ассемблера не транслируются в коды операций, они используются для размещения программы в памяти, определяют макрокоманды, инициализируют память данных и выполняют ещё целый ряд различных вспомогательных операций, облегчающих процесс программирования. Полный список директив ассемблера AVR приведен в таблице 4.2.
Таблица 4.2. Директивы языка Atmel AVR Assembler
Директивы | Мнемоника | Наименование | |
byte | Reserve byte to a variable | Резервирование байта для переменной | |
cseg | Code Segment | Сегмент памяти программ | |
db | Define constant byte(s) | Определение однобайтной константы | |
def | Define a symbolic name on a register | Определение символического названия регистра | |
device | Define which device to assemble for | Определение устройства | |
dseg | Data Segment | Сегмент памяти данных | |
dw | Define Constant word(s) | Определение слова | |
endmacro | End macro | Конец макроса | |
equ | Set a symbol equal to an expression | Задание имени константы | |
eseg | EEPROM Segment | Сегмент EEPROM | |
exit | Exit from file | Конец файла | |
include | Read source from another file | Подключение файла | |
list | Turn listfile generation on | Включение генерации листинга | |
listmac | Turn Macro expansion in list file on | Включение макроса в листинг | |
nolist | Turn listfile generation off | Отключение генерации листинга | |
org | Set program origin | Задание начального адреса памяти | |
set | Set a symbol to an expression | Задание имени выражения |
Примечание: Любой директиве в тексте программы предшествует точка.
Выбор микроконтроллера
device
Директива device (Define which device to assemble for) сообщает ассемблеру о используемом контроллере. При использовании этой директивы генерируется предупреждение, если команда в программе не поддерживается точно выбранным контроллером. Если сегмент программы или сегмент EEPROM в программе больше, чем в выбранном устройстве, ассемблер также формирует предупреждение. Если директива не используется, то считается, что все команды ассемблера поддержаны и нет никаких ограничений на EEPROM и память программ.
Синтаксис:
.device at9Os120O |at90s2313 | at90s2323 | at90s2333 | at90s2343 | at90s4414 | at90s4433 | at90s4434 | at90s8515 | at90s8534 | at90s8535 | attiny11 | attiny12 | attiny22 | atmega603| atmega103| atmega163
Например,
.device atmega163 ; выбираем atmega163
Организация и резервирование памяти
Профамма на языке ассемблера обычно состоит из нескольких сегментов. Область памяти, в которой размещаются программы, называют сегментом кода, область памяти данных - сегментом данных, а область энергонезависимой памяти данных - сегментом EEPROM. Сегмент кода описывается директивой CSEG, сегмент данных - директивой DSEG, а сегмент EEPROM - ESEG.
cseg
Директива cseg (Code segment) определяет начало сегмента кода. Файл ассемблера может состоять нескольких сегментов, которые связаны в одну программу. В пределах сегмента кода cseg нельзя использовать директиву byte. Для размещения программ в сегменте кода используется директива org (см. далее). Директива cseg не имеет параметров.
Синтаксис:
.cseg
Например,
.dseg ; начало сегмента данных
vartab: .byte 4 | ; резервируется 4 байта в sram |
.cseg | ; начало сегмента кода |
const: .dw 2 | ; запись $0002 в память программ |
mov r1 ,r0 | ; пересылка |
dseg
Директива dseg (Data segment) определяет начало сегмента данных. Файл ассемблера может содержать несколько сегментов данных. Сегмент данных обычно состоит только из директив byte. Для размещения переменных в определенных байтах SRAM может использоваться директива org. Директива не имеет никаких параметров.
Синтаксис:
.dseg
Например,
.dseg ; начало сегмента данных
var1: .byte 1 ; резервируем 1 байт по адресу var1
table: .byte tab_size ; резервируем tab_size бай.
.cseg
ldi r30,low(var1) ; запись в младший байт регистра z
ldi г31 ,high(var1) ; запись в старший байт регистра z
ld r1,z ; пересылка из var1 в r
eseg-
Директива eseg (EEPROM Segment) определяет начало сегмента EEPROM. Файл ассемблера может содержать несколько сегментов EEPROM. Сегмент EEPROM обычно состоит только из директив db и dw. Для размещения данных в сегменте EEPROM может использоваться директива org. Директива eseg не имеет параметров.
Синтаксис:
.eseg
Например,
.dseg ; начало сегмента данных
va1: .byte 1 ; резервируется 1 байт для var
table: .byte tab_size ; резервируется tab_size байт
.eseg
eevar1: .dw 0xffff ; инициализируется 1 слово в eeprom
byte
Директива byte (Reserve bytes to a variable) резервирует байты в памяти данных (SRAM). Директиве должна предшествовать метка.. Директива имеет один параметр, который указывает на число резервируемых байт. Директива может быть использована только пределах сегмента данных (см. директиву dseg).
Синтаксис:
label: .byte expression
Например,
.dseg
va1: .byte 1 ; резервируется 1 байт для var
table: .byte tab_size ; резервируется tab_size байт
.cseg
ldi r30,low(var1) ; загрузка младшего байта регистра z
ldi г31 ,high(var1) ; загрузка старшего байта регистра z
ld r1,z ; загрузка var1 из регистра 1
Определение переменных
Директивы определения переменных позволяют включить данные в программу. Они указывают ассемблеру, что в соответствующем месте памяти программ или EEPROM располагается переменная, устанавливают её тип (байт или двухбайтное слово), задают начальные значения и ставят в соответствие переменным метки, которые впоследствии можно использовать при обращении к данным.
db
Директива db (Define constant byte(s) in program memory and EEPROM) определяет константы в памяти программ или EEPROM. Директиве db должна предшествовать метка. Директива db использует список выражений, содержащий, по крайней мере, одно выражение. Директива db должна быть размещена в сегменте кода или в сегменте EEPROM.
Список выражения - последовательность выражений, разграниченных запятыми. Каждое выражение должно иметь значение в пределах -128....255. Если выражение является отрицательным числом, оно будет представлено в дополнительном коде.
Если директива db расположена в сегменте программы cseg и список выражений содержит более чем одно выражение, то выражения упаковываются по два байта в каждом слове памяти программ. Если список выражений содержит нечетное число выражений, последнее выражение займет слово в памяти программ, даже если следующая строка в коде ассемблера снова содержит db директиву.
Синтаксис:
label: .db expressionlist
Например,
.cseg
consts: .db 0, 255, 0Ь01010101, -128, $aa
.eseg
const2: .db1,2,3
dw
Директива dw (Define constant word(s) in program memory and EEPROM) резервирует слово (2 байта) в памяти программ или EEPROM. Директиве должна предшествовать метка. Директива использует список выражений, состоящий не менее чем из одного выражения. Директива dw должна быть размещена в сегменте кода или в сегменте EEPROM.
Список выражений - последовательность выражений, разграниченных запятыми. Каждое выражение должно находится в пределах от -32768 до 65535. Отрицательные числа записываются в дополнительном коде.
Синтаксис:
label: .dw expressionlist
Например,
.cseg
varlist: .dw0, 0xffff, 0b1001110001010101, -32768, 65535
.eseg
eevarlst: .dw0,0xffff,10
def
Директива def (Set a symbolic name on a register) присваивает символические имена регистрам. Один регистр может иметь несколько символических имен. Символическое имя регистра может быть переопределено позже в программе.
Синтаксис:
.def symbol=register
Например,
.deftemp=r16
.def ior=r0
.cseg
ldi temp,0xf0 ; запись $f0 в регистр temp
in ior,$3f ;чтение регистра статуса sreg в регистр ior
еог temp,ior ; исключающее ИЛИ регистров temp и ior
еqи
Директива equ (Set a symbol equal to an expression) связывает константу с меткой. Эта метка может использоваться далее в программе. Метка, указывающая на константу в соответствии с директивой set, не может быть впоследствии переопределена.
Синтаксис
.equ label = expression
Директива .equ обычно используется для присвоения символических имен всем регистрам микроконтроллера, отдельным битам регистров и ячеек памяти, как это сделано, например, в приложении 1 в файле описания файле ATmega163def.inc.
set
Директива set (Set a symbol equal to an expression) присваивает имя выражению. Это имя может использоваться далее в программе. Имя, присвоенное выражению в соответствии с директивой set, может быть впоследствии изменено.
Синтаксис
.set label = expression
Например,
.set pina = $19 ; имя pina присваивается числу $19
.set porta = pina + 2 ; имя porta присваивается выражению $19+2=$1b
out porta,r2 ;Пересылка данных из регистра r2 в porta (по адресу $1 B)
Управление файлами
include
Директива include (Include another file) вставляет в текст программы заданный файл. Включенный файл может также содержать директивы include. Синтаксис: .include "filename" Например, .include "m163def.inc" подключаем файл описания микроконтроллера АТтеда163
Макросы
Макросом называется участок программы, которому присвоено имя и который ассемблируется всякий раз, когда ассемблер встречает это имя в тексте программы. Макрос начинается директивой macro и заканчивается директивой endmacro.
macro
Директива macro (begin macro) сообщает ассемблеру о начале макроса. Параметром директивы является название макроса. Макрос может содержать до 10 параметров. Эти параметры упоминаются как @0 - @9 в пределах макроопределения. При вызове макроса параметры перечисляются списком через запятую.
По умолчанию в листинге программы показывается только вызов макроса. Чтобы включить в листинг макроопределение необходимо использовать директиву LISTMAC. Макроопределения отмечаются в поле кода операции знаком «+».
Синтаксис:
.macro macroname
Например,
.macro subh 6 ; начало определения мароса
subi @1 ,low(@0) ; вычитание младшего байта
sbci @2,high(@0) ; вычитание старшего байта
.endmacro ; конец макроопределения
.cseg ; начало сегмента кода
subi16 0x1234,r16,r17 ; вычитание 0x1234 из r17:г16
Директива endmacro (End macro) определяет конец макроса. Директива не имеет никаких параметров.
Синтаксис: .endmacro
Например,.macro subh 6 ; начало определения макроса
subi r16,low(@0) ; вычитание low byte
sbci r17,high(@0) ; вычитание high byte .endmacro
Управление листингом
list
Директива list (Тит the list file generation on) сообщает ассемблеру о необходимости генерации листинга программы. Листинг - это файл, содержащий исходный текст программы, адреса и коды инструкций. По умолчанию генерация листинга считается включенной. Вместе с директивой NOLIST она позволяет генерировать листинги отдельных частей исходного файла.
Синтаксис:
.list
Например,
.nolist ; отключение генерации листинга
.include "macro.inc" ; подключение файла
.include "const.def ; подключение файла
.list ; включение генерации листинга
listmac
Директива listmac (Тит macro expansion on) включает в листинг программы текст макроса. По умолчанию в листинге показывается только вызов макроса с параметрами. Синтаксис:
.listmac | |
Например, | |
.macro macx | ; определение макроса |
add r0,@0 | |
eor r1,@1 | |
.endmacro | ; конец определения |
.listmac | ; включение макроса в листинг программы |
macx r2,r | ; выполнение макроса |
nolist
Директива nolist (Тит listfile generation off) выключает генерацию листинга. По умолчанию генерация листинга считается включенной. Директива может использоваться также вместе с директивой LIST для генерации листинга отдельных частей программы.
Синтаксис:
.NOLIST
Например,
.NOLIST ; отключение генерации листинга программы
.INCLUDE "macro.inc ; подключение файла
.INCLUDE "const.def" ; подключение файла
.LIST ; включение генерации листинга
Установка адресных счетчиков
ORG
Директива ORG (Set program origin) устанавливает счетчик адреса на определенное значение. Устанавливаемое значение задается как параметр. Если директива ORG записана в сегменте данных, то она устанавливает счетчик адреса SRAM. если в сегменте кода - то счетчик адреса программы, если в сегменте EEPROM - то счетчик адреса EEPROM. Если директиве предшествует метка на той же самой строке исходного текста, nj метке будет присвоено значение параметра. По умолчанию значения счетчиков адреса программы и EEPROM нулевые, а счетчика адреса данных - 32 (после регистров, занимающим адреса 0-31).
Синтаксис:
.org expression
Например,
.dseg ; сегмент данных
.org 0x37 ; адрес $37
variable: .byte 1 ; резервирование байта
.cseg ; сегмент кода
.org 0x10 ; установка программного счетчика на адрес $10
mov r0,r1 ;
Выход
exit
Директива exit (Exit this file) прекращает трансляцию файла. Обычно ассемблер выполняет трансляцию до конца файла. Если директива exit появляется в подключенном файле ассемблирование продолжается от строки, следующей за директивой include.
Синтаксис:
.exit
Например,
.exit ; конец трансляции
– Конец работы –
Эта тема принадлежит разделу:
Создание фирмой Intel в году первой программируемой электронной схемы на... За лет своего бурного развития микропроцессорные системы прошли путь от специализированных комплектов интегральных...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Директивы
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов