ORG - Установить положение в сегменте
Директива ORG устанавливает счётчик положения равным заданной величине, которая передаётся как параметр. Для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. Если директиве предшествует метка (в той же строке) то метка размещается по адресу указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание что для ОЗУ и EEPROM используются побайтные счётчики а для программного сегмента - пословный.
Синтаксис:
.ORG выражение
Пример:
.DSEG ; Начало сегмента данных
.ORG 0x37 ; Установить адрес SRAM равным 0x37
variable: .BYTE 1 ; Зарезервировать байт по адресу 0x37H
.CSEG
.ORG 0x10 ; Установить программный счётчик равным 0x10
mov r0,r1 ; Данная команда будет размещена по адресу 0x10
SET - Установить переменный символический эквивалент выражения
Директива SET присваивает имени некоторое значение. Это имя позднее может быть использовано в выражениях. Причем в отличии от директивы EQU значение имени может быть изменено другой директивой SET.
Синтаксис:
.SET имя = выражение
Пример:
.SET io_offset = 0x23
.SET porta = io_offset + 2
.CSEG ; Начало кодового сегмента
clr r2 ; Очистить регистр 2
out porta,r2 ; Записать в порт A
Выражения
Компилятор позволяет использовать в программе выражения которые могут состоять операндов, операторов и функций. Все выражения являются 32-битными.
Операнды
Могут быть использованы следующие операнды:
Метки определённые пользователем (дают значение своего положения).
Переменные определённые директивой SET
Константы определённые директивой EQU
Числа заданные в формате:
Десятичном (принят по умолчанию): 10, 255
Шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff
Двоичном: 0b00001010, 0b11111111
Восьмеричном (начинаются с нуля): 010, 077
PC - текущее значение программного счётчика (Programm Counter)