Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка (1) / ЦИМПУ(atmega 128).doc
Скачиваний:
102
Добавлен:
16.04.2015
Размер:
4.2 Mб
Скачать

2.2.10 Выражения

Ассемблер позволяет использовать в тексте программы выражения. Они могут содержать операнды, операции и функции. Все выра­жения имеют разрядность 32 бита.

2.2.11 Операнды

Могут быть использованы следующие операнды:

  • определенные программистом метки, имеющие значение счет­чика, в зависимости от места своего расположения;

  • переменные, определенные с помощью директивы SET;

  • константы, определенные с помощью директивы EQU;

  • целые константы:

- десятичные (по умолчанию): 10, 255,

- шестнадцатеричные (два вида записи): 0х0а, $0а, 0xff, $ff,

- двоичные: 0b0101011, 0b1111111;

  • коды символов ASCII: 'A', 'a';

  • строки ASCII (без нуля в конце строки): «String»;

  • PC - текущее значение счетчика команд в памяти программ.

2.2.12 Функции

LOW (выражение) - возвращает младший байт выражения;

HIGH (выражение) - возвращает старший байт выражения,

BYTE2 (выражение) - возвращает 2 байта выражения;

BYTEЗ (выражение) - возвращает 3 байта выражения;

BYTE4 (выражение) - возвращает 4 байта выражения;

LWRD (выражение) - возвращает биты 0 --15 выражения;

HWRD (выражение) - возвращает биты 16--31 выражения;

РАGЕ (выражение) - возвращает биты 16--21 выражения;

ЕХР2 (выражение) - возвращает 2^ выражения;

LOG2 (выражение) - возвращает целую часть log2(выражение).

2.2.13 Операции

Ассемблер поддерживает различные операторы, описанные ни­же. При их использовании можно применять скобки.

.equ const1 =А ; Определение константы const1

.equ const2 =В ; Определение константы const2

.equ c1 =С ;Определение константы c1

.equ c2 =D ;Определение константы c2

Логическое НЕ

Обозначение: ! Описание: унарный оператор, возвращает 1, если выражение рав­но нулю, и 0, если выражение было не равно нулю.

Приоритет: 14.

Пример: ldi r16,!0xf0 ; Загрузить в r16 0х00

Побитовое НЕ

Обозначение: ~ Описание: унарный оператор, который возвращает исходное вы­ражение со всеми инвертированными битами.

Приоритет: 14.

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

Унарный минус

Обозначение: — Описание: возвращает число с измененным на противоположный знаком.

Умножение

Обозначение: * Описание: возвращает результат умножения двух чисел.

Приоритет: 13.

Пример: ldi r18,const1*2 ; Загрузить в регистр r18 const1*2

Деление

Обозначение: / Описание: возвращает целую часть от деления левого параметра на правый.

Приоритет: 13.

Пример: ldi r30,const2/2 ; Загрузить в регистр r30 const2/2

Сложение

Обозначение: + Описание: возвращает сумму двух чисел.

Приоритет: 12.

Пример: ldi r30,с1+с2 ; Загрузить в регистр r30 с1+с2

Вычитание

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

Приоритет: 12.

Пример: ldi r17,с1-с2 ; Загрузить в регистр r30 с1-с2

Сдвиг влево

Обозначение: << Описание: возвращает значение левого числа, сдвинутое влево на число раз, равное правому числу.

Приоритет: 11.

Пример: ldi r17,1<<3 ; Загружает в регистр г17 число 1, сдвинутое влево на 3 бита

Сдвиг вправо

Обозначение: >> Описание: возвращает значение левого числа, сдвинутое вправо на число раз, равное правому числу.

Приоритет: 11.

Пример: ldi r17,1>>2 ; Загружает в регистр r17 число 1, сдвинутое вправо на 2 бита

Меньше

Обозначение:< Описание: возвращает 1, если первое число меньше второго, ина­че - 0. Приоритет: 10.

Пример: ldi r16, const1*(c1<c2) ; Загружает в регистр r16 const1 если c1<c2

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

Обозначение: <= Описание: возвращает 1, если первое число меньше второго или равно ему, иначе - 0. Приоритет: 10.

Пример: ldi r16,const1*(c1<=c2) ; Загружает в регистр r16 const1 если c1<=c2

Больше

Обозначение: > Описание: возвращает 1, если первое число больше второго, ина­че - 0.

Приоритет: 10.

Пример: ldi r16,const1*(c1>c2) ; Загружает в регистр r16 const1 если c1>c2

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

Обозначение: >= Описание: возвращает 1, если первое число больше второго или равно ему, иначе - 0. Приоритет: 10.

Пример: ldi r16,const1*(c1>=c2) ; Загружает в регистр r16 const1 если c1>=c2

Равно

Обозначение: = = Описание: возвращает 1, если первое число равно второму, ина­че - 0.

Приоритет: 9

Пример: ldi r16,const1*(c1==c2) ; Загружает в регистр r16 const1 если c1==c2

Не равно

Обозначение: != Описание: возвращает 1, если первое число не равно второму, иначе - 0.

Приоритет: 9.

Пример: ldi r16,const1*(c1!=c2) ; Загружает в регистр r16 const1 если c1!=c2

Побитовое И

Обозначение: & Описание: возвращает результат побитной операции «И» между операндами.

Приоритет: 8.

Пример: ldi r19,low(c1&c2)

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

Обозначение: ^ Описание: возвращает результат побитной операции «исключаю­щее ИЛИ» между операндами.

Приоритет: 7.

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

Побитовое ИЛИ

Обозначение: | Описание: возвращает результат побитной операции «ИЛИ» между операндами.

Приоритет: 6.

Пример: ldi rl8,Low(cl |c2)

Логическое И

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

Приоритет: 5.

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

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

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

Приоритет: 4.

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

Ниже приведены программа и ее алгоритм. Данная программа не выполняет какую-то определенную задачу, она демонстрирует работу с директивами и некоторыми командами.

Рис.2.17 Алгоритм программы

Рис. 2.18 Алгоритм подключаемой программы

Листинг программы:

; BASIC .ASM template file for AVR

; ******************************************************

; Define here the variables

;

.include "C:\VMLAB\include\m128def.inc""; определение библиотеки МК ;ATmega128, при условии расположения программы VMLAB на ;локальном диске С

.def numb = r16 ;запись символьного имени

.def const = r17 ; запись символьного имени

.def sum = r18 ; запись символьного имени

.macro sdvig ; Начало определения макрокоманды sdvig

lsr @0 ;Логический сдвиг фиксированного имени @0

sub r0,@1 ;Вычитание из РОН(r0) фиксированного имени @1

.ENDMACRO ; Конец определения макрокоманды

reset: ; начальная метка

rjmp start; Переход на начало основной программы

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03 Вектора прерываний МК ATmega128.

reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.

reti ; Addr $05 Полностью вектора прерываний представлены

reti ; Addr $06 в приложении с назначением прерываний

reti ; Addr $07 (внешних и внутренних).

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B

reti ; Addr $0C

reti ; Addr $0D

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

start:

ldi numb,$0a ;инициализация стека(младший байт)

out SPL,numb

ldi const,0b1101 ;инициализация стека(старший байт)

out SPH,const

mov r18,r16 ;пересылка значения r16 в регистр r18

add sum,const ;сложение r18,r17

.include "umn.asm" ; Включение другого файла на ассемблере

sdvig r18,r17 ; Вызов макрокоманды sdvig

.exit

Листинг подключаемого файла(программы)

; файл umn.asm

mul r17, r16 ; Перемножить r17 и r16

;результат перемножения регистров заносится в регистры R0 и R1

mov r19, r0 ; Вернуть результат r19

mov r20, r1 ; Вернуть результат r20

Листинг проектного файла

.MICRO "ATmega128" ; Указание типа микроконтроллера (ATmega128)

.PROGRAM " Project2.asm" ; Ассемблируемый файл

.TARGET " Project2.hex" ; Файл машинного кода

.TRACE ; Включение трассировки

.POWER VDD=5 VSS=0 ; Задание напряжения питания 5 В

.CLOCK 4meg ; Задание тактовой частоты работы микроконтроллера

.STORE 250m ; Время регенерации сигнала осциллографа

Соседние файлы в папке Новая папка (1)