Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 3 Основы программирования на ассемблере.doc
Скачиваний:
84
Добавлен:
01.06.2015
Размер:
357 Кб
Скачать
☆

Выражения

Компилятор позволяет использовать в программе выражения которые могут состоять операндов,операторовифункций. Все выражения являются 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(выражение)