Если перед директивой расположена метка (на этой же строке), метка получит значение параметра директивы. Значение по умолчанию для сегмента кода и EEPROM равно 0, а для SRAM — 32 (так как регистры занимают пространство с 0 до 31). Обратите внимание, что для EEPROM и SRAM отсчитываются байты, в то время как в памяти программ — слова.
Синтаксис:
.ORG выражение
Пример:
.DSEG; Начало сегмента данных (SRAM)
.ORG 0x37; Установить адрес SRAM 37Н
variable:.BYTE 1; Зарезервировать 1 байт по адресу 37Н SRAM
.ESEG;Начало сегмента EEPROM
.ORG 0x20; Установить значение счетчика расположения
eevar:.DW 0xf77a;Инициализировать слово в памяти EEPROM
.CSEG
.ORG 0x10; Установить счетчик на значение 0x10
mov r0,r1; Эта команда будет расположена в памяти; программ по адресу 0x10
Директива SET присваивает символьному обозначению значение выражения. В дальнейшем это символьное обозначение может быть использовано в выражениях. В дальнейшем тексте программы это символьное выражение может быть изменено.
Синтаксис:
.SET символьное обозначение = выражение
Пример:
SET io_offset = 0x23
.SET porta = io_offset + 2
CSEG; Начало сегмента кода
clr r2; Очистить регистр г2
out porta,r2; Записать в порт А
Ассемблер позволяет использовать в тексте программы выражения. Они могут содержать операнды, операции и функции. Все выражения имеют разрядность 32 бита.
Могут быть использованы следующие операнды:
• определенные программистом метки, имеющие значение счетчика, в зависимости от места своего расположения;
• переменные, определенные с помощью директивы SET;
• константы, определенные с помощью директивы EQU;
• целые константы:
— десятичные (по умолчанию): 10,255,
— шестнадцатеричные (два вида записи): 0x0а, $0а, 0xff, $ff,
— двоичные: 0Ь00001010, 0b11111111;
• коды символов ASCII: 'А', 'а';
• строки ASCII (без нуля в конце строки): «String»;
• PC — текущее значение счетчика команд в памяти программ.
LOW(выражение) — возвращает младший байт выражения;
НIGH(выражение) — возвращает старший байт выражения;
ВУТЕ2(выражение) — возвращает 2 байта выражения;
ВУТЕ3(выражение) — возвращает 3 байта выражения;
ВУТЕ4(выражение) — возвращает 4 байта выражения;
LWRD(выражение) — возвращает биты 0—15 выражения;
HWRD(выражение) — возвращает биты 16–31 выражения;
РАGЕ(выражение) — возвращает биты 16–21 выражения;
ЕХР2(выражение) — возвращает 2^ выражения;
LOG2(выражение) — возвращает целую часть lоg 2(выражение).
Ассемблер поддерживает различные операторы, описанные ниже. При их использовании можно применять скобки.
Логическое НЕ
Обозначение: !
Описание: унарный оператор, возвращает 1, если выражение равно нулю, и 0, если выражение было не равно нулю.
Приоритет: 14.
Пример: ldi r16,!0xf0; Загрузить в г16 0x00
Побитовое НЕ
Обозначение: ~
Описание: унарный оператор, который возвращает исходное выражение со всеми инвертированными битами.
Приоритет: 14.
Пример: ldi r16.~0xf0; Загрузить в r16 0x0f
Унарный минус
Обозначение: —
Описание: возвращает число с измененным на противоположный знаком.
Умножение
Обозначение: *
Описание: возвращает результат умножения двух чисел. Приоритет: 13.
Пример: ldi r30,label*2; Загрузить в регистр r30 label*2
Деление
Обозначение: /
Описание: возвращает целую часть от деления левого параметра на правый.
Приоритет: 13.
Пример: ldi r30, label/2; Загрузить в регистр r30 label/2
Сложение
Обозначение: +
Описание: возвращает сумму двух чисел.
Приоритет: 12.
Пример: ldi г30,с1+с2; Загрузить в регистр r30 с1+с2
Вычитание
Обозначение: -
Описание: возвращает результат вычитания правого числа из левого.
Приоритет: 12.
Пример: ldi г17,с1-с2; Загрузить в регистр r30 с1-с2
Сдвиг влево
Обозначение: <<
Описание: возвращает значение левого числа, сдвинутое влево на число раз, равное правому числу.
Приоритет: 11.
Пример: ldi r17,1<<3; Загружает в регистр г17 число 1, сдвинутое влево на 3 бита
Сдвиг вправо
Обозначение: >>
Описание: возвращает значение левого числа, сдвинутое вправо на число раз, равное правому числу.
Приоритет: 11.
Пример: ldi r17,1>>2; Загружает в регистр r17 число 1, сдвинутое вправо на 2 бита
Меньше
Обозначение: <