Выражения языка ассемблер
Компилятор позволяет использовать в программе выражения, которые состоят из операндов, операторов и функций. Все выражения являются четырехбайтными.
Операнды могут быть следующих видов:
1. Метки, определенные пользователем, которые определяют численные значения адреса либо ячейки ОЗУ, либо программы команды.
2. Переменная, определенная директивой .SET
3. Константы, определенные директивой EQU
4. Операндами могут быть числа, заданные в разных форматах:
а) десятичный, который использует лишь десятичные символы 10, 20,….
б) 16-ричный использует 2 варианта записи: 0хОА и $ ОА
в) двоичный начинается с символов Ов и использует лишь нули и 1.
г) восьмеричный начинается обязательно с 0 и использует младшие 8 десятичных цифр.(0-7).
5.Имя РС, текущие значения программного счетчика.
Компилятор поддерживает ряд операторов в выражениях, которые перечислены ниже согласно их приоритету. Изменения приоритета того или иного оператора при вычислении выражения добиваются использованием круглых скобок.
1. Оператор «Логическое отрицание» записывается символом «!». Этот оператор возвращает единицу, если его операнд равен нулю и возвращает ноль, если операнд отличен от нуля
Пример №1:
LDI R16, !0×F0; в R16 загружается число 0×00
2. Оператор «Побитное отрицание» записывается символом ~ (тильда). Этот оператор возвращает операнд, в котором все биты проинвертированы
Пример №2:
LDI R16, ~0×F0; в R16 загружается число 0×0F
LD R16, ~0×28
3. Оператор «минус» “ - ” возвращает арифметическое отрицание исходного операнда.
Пример №3:
LD R16, - 2; в R16 загружается число 0×FE
4. Оператор умножения обозначается знаком “ * ”
Пример №4:
Ldi r30, label*2
5. Оператор деления записывается символом “ / ”, возвращает целую часть деления (частное) левого выражения на правое.
Пример №5:
Ldi r30, label/2
6. Оператор суммирования обозначается “ + ” и возвращает сумму двух выражений.
Пример №6:
Ldi r30, c1+12
7. Оператор вычитания обозначается символом “ - ” и возвращает результат вычитания из левого операнда правого операнда.
Пример №7:
Ldi r30, с1 – с2
8. Оператор «сдвиг влево» записывается символом “ << ” и возвращает левое выражение сдвинутое влево на число бит указанное справа.
Пример №8:
Ldi r17, 1< 9. Оператор «Сдвиг вправо» записывается символом “ >> ” и возвращает выражение сдвинутое вправо на число бит указанное справа.
Пример №9:
Ldi r17, c1>>c2
10. Оператор “ меньше чем ” записывается символом “ < ” и возвращает 1, если левое выражение меньше чем правое (в скобках учитывается знак) и возвращает 0 в противном случае.
Пример №10:
Ori r18, bitmask*(c1 11. Оператор “ <= ”, возвращает 1, если левое выражение <= чем правое и 0 в противном случае.
12. Оператор «больше или равно “ >= ” вводится аналогично.
13. Оператор «равно» записывается в виде “ = = ” возвращает 1, если левое выражение равно правому и 0 в противном случае.
14. Оператор «не равно» записывается в виде “ != ”возвращает 1, если левое выражение не равно правому и 0 в противном случае.
15. Оператор “ побитное И ” записывается символом “ & ” возвращает результат побитного логического умножения двух выражений.
16. Оператор “ побитное исключающее ИЛИ ”записывается символом “ ^ ” возвращает результат побитного логического сложения двух выражений по модулю два.
17. Оператор “ побитное ИЛИ ” записывается символом “ | ” возвращает результат побитного логического сложения двух выражений.
18. Оператор “ логическое И ” записывается символом “ && ”и возвращает 1, если оба выражения не равны 0 и 0 в противном случае.
19. Оператор “ логическое ИЛИ ”записывается символом “ | | ” возвращает 1, если хотя бы одно выражение не было равно 0 и 0 в противном случае.
В языке Assembler определены следующие функции:
LOW (выражение) эта функция возвращает младший байт выражения.
HIGH (выражение) эта функция возвращает второй байт выражения.
BYTE 2 (выражение) эта функция возвращает второй байт выражения.
BYTE 3 (выражение) эта функция возвращает третий байт выражения.
BYTE 4 (выражение) эта функция возвращает четвертый байт выражения.
LWRD (выражение) эта функция возвращает биты с 0 по 15.
HWRD (выражение) эта функция возвращает биты с 16 по 31.
PAGE (выражение) эта функция возвращает биты с 16 по 21 от выражения.
EXP 2 (выражение) возвращает 2 в степени выражения.
LOG 2 (выражение) возвращает целую часть логарифма с основанием 2 от выражения.
Операнды могут быть следующих видов:
1. Метки, определенные пользователем, которые определяют численные значения адреса либо ячейки ОЗУ, либо программы команды.
2. Переменная, определенная директивой .SET
3. Константы, определенные директивой EQU
4. Операндами могут быть числа, заданные в разных форматах:
а) десятичный, который использует лишь десятичные символы 10, 20,….
б) 16-ричный использует 2 варианта записи: 0хОА и $ ОА
в) двоичный начинается с символов Ов и использует лишь нули и 1.
г) восьмеричный начинается обязательно с 0 и использует младшие 8 десятичных цифр.(0-7).
5.Имя РС, текущие значения программного счетчика.
Компилятор поддерживает ряд операторов в выражениях, которые перечислены ниже согласно их приоритету. Изменения приоритета того или иного оператора при вычислении выражения добиваются использованием круглых скобок.
1. Оператор «Логическое отрицание» записывается символом «!». Этот оператор возвращает единицу, если его операнд равен нулю и возвращает ноль, если операнд отличен от нуля
Пример №1:
LDI R16, !0×F0; в R16 загружается число 0×00
2. Оператор «Побитное отрицание» записывается символом ~ (тильда). Этот оператор возвращает операнд, в котором все биты проинвертированы
Пример №2:
LDI R16, ~0×F0; в R16 загружается число 0×0F
LD R16, ~0×28
3. Оператор «минус» “ - ” возвращает арифметическое отрицание исходного операнда.
Пример №3:
LD R16, - 2; в R16 загружается число 0×FE
4. Оператор умножения обозначается знаком “ * ”
Пример №4:
Ldi r30, label*2
5. Оператор деления записывается символом “ / ”, возвращает целую часть деления (частное) левого выражения на правое.
Пример №5:
Ldi r30, label/2
6. Оператор суммирования обозначается “ + ” и возвращает сумму двух выражений.
Пример №6:
Ldi r30, c1+12
7. Оператор вычитания обозначается символом “ - ” и возвращает результат вычитания из левого операнда правого операнда.
Пример №7:
Ldi r30, с1 – с2
8. Оператор «сдвиг влево» записывается символом “ << ” и возвращает левое выражение сдвинутое влево на число бит указанное справа.
Пример №8:
Ldi r17, 1<
Пример №9:
Ldi r17, c1>>c2
10. Оператор “ меньше чем ” записывается символом “ < ” и возвращает 1, если левое выражение меньше чем правое (в скобках учитывается знак) и возвращает 0 в противном случае.
Пример №10:
Ori r18, bitmask*(c1
12. Оператор «больше или равно “ >= ” вводится аналогично.
13. Оператор «равно» записывается в виде “ = = ” возвращает 1, если левое выражение равно правому и 0 в противном случае.
14. Оператор «не равно» записывается в виде “ != ”возвращает 1, если левое выражение не равно правому и 0 в противном случае.
15. Оператор “ побитное И ” записывается символом “ & ” возвращает результат побитного логического умножения двух выражений.
16. Оператор “ побитное исключающее ИЛИ ”записывается символом “ ^ ” возвращает результат побитного логического сложения двух выражений по модулю два.
17. Оператор “ побитное ИЛИ ” записывается символом “ | ” возвращает результат побитного логического сложения двух выражений.
18. Оператор “ логическое И ” записывается символом “ && ”и возвращает 1, если оба выражения не равны 0 и 0 в противном случае.
19. Оператор “ логическое ИЛИ ”записывается символом “ | | ” возвращает 1, если хотя бы одно выражение не было равно 0 и 0 в противном случае.
В языке Assembler определены следующие функции:
LOW (выражение) эта функция возвращает младший байт выражения.
HIGH (выражение) эта функция возвращает второй байт выражения.
BYTE 2 (выражение) эта функция возвращает второй байт выражения.
BYTE 3 (выражение) эта функция возвращает третий байт выражения.
BYTE 4 (выражение) эта функция возвращает четвертый байт выражения.
LWRD (выражение) эта функция возвращает биты с 0 по 15.
HWRD (выражение) эта функция возвращает биты с 16 по 31.
PAGE (выражение) эта функция возвращает биты с 16 по 21 от выражения.
EXP 2 (выражение) возвращает 2 в степени выражения.
LOG 2 (выражение) возвращает целую часть логарифма с основанием 2 от выражения.