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

· Числа заданные в формате:

o Десятичном (принят по умолчанию): 10, 255

o Шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff

o Двоичном: 0b00001010, 0b11111111

o Восьмеричном (начинаются с нуля): 010, 077

· PC - текущее значение программного счётчика (Programm Counter)

Операторы

Компилятор поддерживает ряд операторов которые перечислены в таблице (чем выше положение в таблице, тем выше приоритет оператора). Выражения могут заключаться в круглые скобки, такие выражения вычисляются перед выражениями за скобками.

Приоритет Символ Описание
! Логическое отрицание
~ Побитное отрицание
- Минус
* Умножение
/ Деление
+ Суммирование
- Вычитание
<< Сдвиг влево
>> Сдвиг вправо
< Меньше чем
<= Меньше или равно
> Больше чем
>= Больше или равно
== Равно
!= Не равно
& Побитное И
^ Побитное исключающее ИЛИ
| Побитное ИЛИ
&& Логическое И
|| Логическое ИЛИ



Символ: !

Логическое отрицание

Описание: Возвращает 1 если выражение равно 0, и наоборот

Приоритет: 14

Пример: ldi r16, !0xf0 ; В r16 загрузить 0x00

Символ: ~

Побитное отрицание

Описание: Возвращает выражение в котором все биты проинвертированы

Приоритет: 14

Пример: ldi r16, ~0xf0 ; В r16 загрузить 0x0f

Символ: -

Минус

Описание: Возвращает арифметическое отрицание выражения

Приоритет: 14

Пример: ldi r16,-2 ; Загрузить -2(0xfe) в r16

Символ: *

Умножение

Описание: Возвращает результат умножения двух выражений

Приоритет: 13

Пример: ldi r30, label*2

Символ: /

Деление

Описание: Возвращает целую часть результата деления левого выражения на правое

Приоритет: 13

Пример: ldi r30, label/2

Символ: +

Суммирование

Описание: Возвращает сумму двух выражений

Приоритет: 12

Пример: ldi r30, c1+c2

Символ: -

Вычитание

Описание: Возвращает результат вычитания правого выражения из левого

Приоритет: 12

Пример: ldi r17, c1-c2

Символ: <<

Сдвиг влево

Описание: Возвращает левое выражение сдвинутое влево на число бит указанное справа

Приоритет: 11

Пример: ldi r17, 1<<bitmask ; В r17 загрузить 1 сдвинутую влево bitmask раз

Символ: >>

Сдвиг вправо

Описание: Возвращает левое выражение сдвинутое вправо на число бит указанное справа

Приоритет: 11

Пример: ldi r17, c1>>c2 ; В r17 загрузить c1 сдвинутое вправо c2 раз

Символ: <

Меньше чем

Описание: Возвращает 1 если левое выражение меньше чем правое (учитывается знак), и 0 в противном случае

Приоритет: 10

Пример: ori r18, bitmask*(c1<c2)+1

Символ: <=

Меньше или равно

Описание: Возвращает 1 если левое выражение меньше или равно чем правое (учитывается знак), и 0 в противном случае

Приоритет: 10

Пример: ori r18, bitmask*(c1<=c2)+1

Символ: >

Больше чем

Описание: Возвращает 1 если левое выражение больше чем правое (учитывается знак), и 0 в противном случае

Приоритет: 10

Пример: ori r18, bitmask*(c1>c2)+1

Символ: >=

Больше или равно

Описание: Возвращает 1 если левое выражение больше или равно чем правое (учитывается знак), и 0 в противном случае

Приоритет: 10

Пример: ori r18, bitmask*(c1>=c2)+1

Символ: ==

Равно

Описание: Возвращает 1 если левое выражение равно правому (учитывается знак), и 0 в противном случае

Приоритет: 9

Пример: andi r19, bitmask*(c1==c2)+1

Символ: !=

Не равно

Описание: Возвращает 1 если левое выражение не равно правому (учитывается знак), и 0 в противном случае

Приоритет: 9

Пример: .SET flag = (c1!=c2) ;Установить flag равным 1 или 0

Символ: &

Побитное И

Описание: Возвращает результат побитового И выражений

Приоритет: 8

Пример: ldi r18, High(c1&c2)

Символ: ^

Побитное исключающее ИЛИ

Описание: Возвращает результат побитового исключающего ИЛИ выражений

Приоритет: 7

Пример: ldi r18, Low(c1^c2)

Символ: |

Побитное ИЛИ

Описание: Возвращает результат побитового ИЛИ выражений

Приоритет: 6

Пример: ldi r18, Low(c1|c2)

Символ: &&

Логическое И

Описание: Возвращает 1 если оба выражения не равны нулю, и 0 в противном случае

Приоритет: 5

Пример: ldi r18, Low(c1&&c2)

Символ: ||

Логическое ИЛИ

Описание: Возвращает 1 если хотя бы одно выражение не равно нулю, и 0 в противном случае

Приоритет: 4

Пример: ldi r18, Low(c1||c2)

Определены следующие функции:

Функции

LOW(выражение) возвращает младший байт выражения HIGH(выражение) возвращает второй байт выражения BYTE2(выражение) то же что и функция HIGHBYTE3(выражение) возвращает третий байт выражения BYTE4(выражение) возвращает четвёртый байт выражения LWRD(выражение) возвращает биты 0-15 выражения HWRD(выражение) возвращает биты 16-31 выражения PAGE(выражение) возвращает биты 16-21 выражения EXP2(выражение) возвращает 2 в степени (выражение) LOG2(выражение) возвращает целую часть log2(выражение)

Открытие файлов

В WAVRASM могут быть открыты как новые так и существующие файлы. Количество открытых файлов ограничено размером памяти, однако объём одного файла не может превышать 28 килобайт (в связи с ограничением MS-Windows). Компиляция файлов большего размера возможна, но они не могут быть редактируемы встроенным редактором. Каждый файл открывается в отдельном окне.

Сообщения об ошибках

После компиляции программы появляется окно сообщений. Все обнаруженные компилятором ошибки будут перечислены в этом окне. При выборе строки с сообщением о ошибке, строка исходного файла,

в которой найдена ошибка, становится красной. Если же ошибка находится во вложенном файле, то этого подсвечивания не произойдёт.

Если по строке в окне сообщений клацнуть дважды, то окно файла с указанной ошибкой становится активным, и курсор помещается в начале строки содержащей ошибку. Если же файл с ошибкой не открыт (например это вложенный файл) то он будет автоматически открыт.

Учтите, что если Вы внесли изменения в исходные тексты (добавили или удалили строки), то информация о номерах строк в окне сообщений не является корректной.

Опции

Некоторые установки программы могут быть изменены через пункт меню Options. Если выбрать этот пункт то появится диалоговое окно

В поле ввода озаглавленном "List-file extension" вводится расширение используемое для файла листинга, а в поле "Output-file extension" находится расширение для файлов с результатом компиляции программы. В прямоугольнике "Output file format" можно выбрать формат выходного файла (как правило используется интеловский). Однако это не влияет на объектный файл (используемый AVR Studio), который всегда имеет один и тот же формат, и расширение OBJ. Если в исходном файле присутствует сегмент EEPROM то будет также создан файл с расширением EEP. Установки заданные

в данном окне запоминаются на постоянно, и при следующем запуске программы, их нет необходимости переустанавливать.

Опция "Wrap relative jumps" даёт возможность "заворачивать" адреса. Эта опция может быть использована только на чипах с объёмом программной памяти 4К слов (8К байт), при этом становится возможным делать относительные переходы (rjmp) и вызовы подпрограмм (rcall) по всей памяти. Опция "Save before assemble" указывает программе на необходимость автоматического сохранения активного окна (и только его) перед компиляцией.

ORG - Установить положение в сегменте - student2.ru Если Вы хотите чтобы при закрытии программы, закрывались все открытые окна, то поставьте галочку в поле "Close all windows before exit".

Atmel, AVR являются зарегистрированными товарными знаками фирмы Atmel Corporation

Перевод выполнил Руслан Шимкевич, [email protected]

Наши рекомендации