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="" p="">
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="" br=""> NEG Rd Дополнение до 2. Rd <- 0x00="" -="" rd="" r0="" r31="" br=""> SBR Rd, K Установить биты в регистре. В качестве Rd допустимы R16..R31. В чем разница от ORI Rd, K, непонятно. CBR Rd, K Сбросить биты в регистре. Rd <- rd="" and="" 0xff-k="" r16="" r31="" br=""> 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)
|