wavrasm - старенькая бесплатная среда для программирования микроконтроллеров на ассемблере. К сожалению, настолько старая, что на сайте Atmel её уже не найти.
Спасает, как обычно, Google и BitTorrent. Позволяет писать программы на ассемблере, проверять синтаксис (в момент компиляции) и компилировать их в HEX-файл, ничего более, зато разобраться очень легко. При новом запуске открывает последний редактируемый *.asm файл. Текст создается в кодировке 1251 (ANSI), русские буквы допускаются в комментариях. Клавишу TAB для форматирования лучше не использовать, иначе получается неудобочитаемый просмотрщиком (F3 в Windows Commander) текст.
1. Установка не нужна, достаточно скопировать файл wavrasm.exe в любую папку и запускать уже оттуда.
2. Выберите Options...\поставьте галочку Save before assemble. Теперь ассемблировать текст можно нажатием Alt-A. Попробуйте ввести и откомпилировать разные команды ассемблера (см. далее).
3. Пересылка данных.
LDI Rd, K
почему-то работает только для R16..R31
Примеры команды LDI
LDI R17, 2
LDI R17, 0x02
LDI R17, LOW(0x5102)
LDI R17, HIGH(0x0243)
MOV Rd, Rr
Rd <- Rr. Допустимо применять в качестве операндов R0..R31.
4. Арифметика
ADD R17, R1
Складывает R17 с R1, результат в R17. А тут уже допустимо применять R0..R31 !
ADC R17, R1
То же самое, но еще добавляется 1, если признак переноса установлен.
SUB Rd, Rr
Вычесть из Rd регистр Rr, результат в Rd. Допустимо применять R0..R31.
SUBI Rd, K
Вычесть из Rd константу K. В качестве Rd допустимы R16..R31.
SBC
SBCI
То же самое, что SUB и SUBI, но вычитается также перенос.
SBIW R30, 0x12
Вычесть байт из слова R31:R30. В качестве операнда-регистра доступны R24 (слово R25:R24), R26 (R27:R26,
регистр X), R28 (R29:R28, регистр Y) и R30 (R31:R30, регистр Z).
AND Rd, Rr
Логическое И, результат в Rd. Допустимо применять R0..R31.
ANDI Rd, K
То же самое с константой. В качестве Rd допустимы R16..R31.
OR Rd, Rr
ORI Rd, K
То же самое, что и AND, ANDI, только операция ИЛИ.
EOR Rd, Rr
Исключающее или, результат в Rd. Допустимо применять R0..R31.
COM Rd
Дополнение до 1. Rd <- 0xFF - Rd. Допустимо применять R0..R31.
NEG Rd
Дополнение до 2. Rd <- 0x00 - Rd. Допустимо применять R0..R31.
SBR Rd, K
Установить биты в регистре. В качестве Rd допустимы R16..R31. В чем разница от ORI Rd, K, непонятно.
CBR Rd, K
Сбросить биты в регистре. Rd <- Rd AND (0xFF-K). Как реально работает команда, пока не понятно. В качестве Rd допустимы R16..R31.
INC Rd
DEC Rd
Инкремент и декремент. Допустимо применять R0..R31.
TST Rd
Проверка регистра на ноль. Допустимо применять R0..R31.
CLR Rd
очистка регистра в ноль. Допустимо применять R0..R31.
SER Rd
В регистр Rd помещается 0xFF. В качестве Rd допустимы R16..R31.
MUL Rd, Rr
Перемножение двух 8-разрядных величин без знака, результат 16-разрядное число без знака сохранется в R1:R0. В качестве операндов допустимы R0..R31. Если в качестве операндов используются R0 и R1, то результат сразу заместит множители. Эта команда недоступна в базовой линии процессоров.
5. Передача управления.
RJMP label
Относительный переход. Занимает 2 такта времени.
IJMP
Переход по адресу в регистре Z (R31:R30). Занимает 2 такта времени.
JMP label
Переход. Занимает 3 такта времени.
RCALL label
Относительный вызов подпрограммы. Занимает 3 такта.
ICALL
Переход по адресу в регистре Z (R31:R30). Занимает 3 такта.
CALL label
Вызов подпрограммы. Занимает 4 такта.
RET
Возврат из подпрограммы. Занимает 4 такта.
RETI
Возврат из подпрограммы прерывания. Занимает 4 такта.
6. Ветвление операций
CPSE Rd, Rr
ComPare Skip Equivalence - сравнить два регистра, и если равны, пропустить следующую инструкцию. Допустимо в операндах применять R0..R31.
CP Rd, Rr
Сравнить два регистра методом Rd-Rr. Допустимо в операндах применять R0..R31.
CPC Rd, Rr
То же самое с учетом переноса: Rd-Rr-С
CPI Rd, K
Сравнение с константой K: Rd-K. В качестве Rd допустимы R16..R31.
SBRC Rr, b
Skip if Bit in Register Cleared - если указанный бит регистра очищен, то пропустить следующую команду. В качестве Rr допустимо R0..R31. В качестве b используется константа 0..15
SBRS Rr, b
Skip if Bit in Register Setted - то же самое, только наоборот - если бит установлен.
SBIC P, B
Skip if Bit Input port Cleared - пропуск команды, если указанный порт ввода-вывода очищен. В качестве P допустима константа 0..31, в качестве b - константа 0..7
SBIS P, B
Skip if Bit Input port Setted - то же самое, только наоборот - если бит установлен.
BRBS s, k
Переход, если установлен флаг s (SREG(s)) по адресу PC+k+1. Константа s в диапазоне 0..7, k константа со знаком или метка.
BRBC s, k
То же самое, только переход в случае сброшенного флага s.
BREQ k
Переход, если равно (флаг Z=1). k константа со знаком или метка.
BRNE k
Переход, если не равно (флаг Z=0). k константа со знаком или метка.
BRCS k
Переход если установлен перенос. k - метка
BRCC k
Переход если сброшен перенос. k - метка
BRSH k
Переход, если равно или больше (C=0). То же самое, что BRCC k
BRLO k
Переход, если меньше (C=1). То же самое, что BRCS k
BRMI k
Переход, если минус (N=1)
BRPL k
Переход, если плюс (N=0)
BRGE k
Переход, если больше или равно, со знаком (if (N XOR N)=0)
BRLT k
Переход, если (N XOR N)=1
BRHS k
Переход, если установлен флаг H
BRHC k
Переход, если сброшен флаг H
BRTS k
Переход, если установлен флаг T
BRTC k
Переход, если сброшен флаг T
BRVS k
Переход, если установлен флаг V (переполнение)
BRVC k
Переход, если сброшен флаг V
BRIE k
Переход если разрешены прерывания (I=1)
BRID k
Переход если запрещены прерывания (I=0)
|