Выбрать главу

.NOLIST

Пример:

.NOLIST; Отключить генерацию листинга

.INCLUDE "macro.inc" ; Включаемые файлы не будут

.INCLUDE "const.def"; показаны в листинге

.LIST; Включить генерацию листинга

.ORG — установка значения счетчика расположения.

Директива ORG присваивает абсолютное значение счетчику. Параметром директивы является значение, которое должно быть присвоено счетчику. При использовании директивы ORG в сегменте данных будет определено значение, указывающее расположение и оперативной памяти SRAM. При использовании директивы ORG в сегменте кода будет определено значение, указывающее расположение в памяти программ. При использовании директивы ORG в сегменте EEPROM будет определено значение, указывающее расположение в памяти EEPROM.

Если перед директивой расположена метка (на этой же строке), метка получит значение параметра директивы. Значение по умолчанию для сегмента кода и 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 символьное обозначение = выражение

Пример:

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