Выражения
Компилятор позволяет использовать в программе выражения которые могут состоять операндов,операторовифункций. Все выражения являются 32-битными.
Операнды
Могут быть использованы следующие операнды:
Метки определённые пользователем (дают значение своего положения).
Переменные определённые директивой SET
Константы определённые директивой EQU
Числа заданные в формате:
Десятичном (принят по умолчанию): 10, 255
Шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff
Двоичном: 0b00001010, 0b11111111
Восьмеричном (начинаются с нуля): 010, 077
PC - текущее значение программного счётчика (Programm Counter)
Операторы
Компилятор поддерживает ряд операторов которые перечислены в таблице (чем выше положение в таблице, тем выше приоритет оператора). Выражения могут заключаться в круглые скобки, такие выражения вычисляются перед выражениями за скобками.
|
Приоритет |
Символ |
Описание |
|
14 |
! |
Логическое отрицание |
|
14 |
~ |
Побитное отрицание |
|
14 |
- |
Минус |
|
13 |
* |
Умножение |
|
13 |
/ |
Деление |
|
12 |
+ |
Суммирование |
|
12 |
- |
Вычитание |
|
11 |
<< |
Сдвиг влево |
|
11 |
>> |
Сдвиг вправо |
|
10 |
< |
Меньше чем |
|
10 |
<= |
Меньше или равно |
|
10 |
> |
Больше чем |
|
10 |
>= |
Больше или равно |
|
9 |
== |
Равно |
|
9 |
!= |
Не равно |
|
8 |
& |
Побитное И |
|
7 |
^ |
Побитное исключающее ИЛИ |
|
6 |
| |
Побитное ИЛИ |
|
5 |
&& |
Логическое И |
|
4 |
|| |
Логическое ИЛИ |
Логическое отрицание
Символ: !Описание: Возвращает 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(выражение) то же что и функция HIGH
BYTE3(выражение) возвращает третий байт выражения
BYTE4(выражение) возвращает четвёртый байт выражения
LWRD(выражение) возвращает биты 0-15 выражения
HWRD(выражение) возвращает биты 16-31 выражения
PAGE(выражение) возвращает биты 16-21 выражения
EXP2(выражение) возвращает 2 в степени (выражение)
LOG2(выражение) возвращает целую часть log2(выражение)
