Только dec для работы с 2-байтовым числом использовать нельзя , нужно subi RX,1. Казалось бы - какая разница ? Есть разница. Dec не устанавливает флаг С , поэтму brcs/brcc - мимо .ИС-пытатель писал(а):через флаг Carry (C) делаются такие штуки. SBIW....
Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
- Muzykant
- Нашел транзистор. Понюхал.
- Сообщения: 192
- Зарегистрирован: Вт дек 24, 2013 17:22:18
- Откуда: Ярославль
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот что нагуглил по поводу .dbEngineer_Keen писал(а): Не знаю как в железе (думаю что поддерживается), но в симуляторах работает.Код: Выделить всё
.org 0 .db 0xFD,0xCF ;аналог RJMP на 1 адрес вниз .org 0x1FFE .db 0x01,0xC0 ;аналог RJMP на 1 адрес вверх
И практически ничего не понял.. Или к Вашему коду это не имеет отношения и Вы как-то по другому используете директиву?DB - определить байт(ы) в программной памяти или в EEPROM
Директива DB резервирует ресурсы памяти в программной памяти или в EEPROM. Директиве должна предшествовать метка. DB задает список выражений, и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте.
Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между –128 и 255.
Если директива указывается в сегменте кодов и список выражений содержит более двух величин, то выражения будут записаны так, что 2 байта будут размещаться в каждом слове Flash-памяти.
Синтаксис:
LABEL: .DB список выражений
Пример:
.CSEG
consts: .DB 0, 255, 0b01010101, -128, 0xaa
.ESEG
const2: .DB 1,2,3
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Директива использована для вставки машинного кода в текст программы, чтобы компилятор схавал.И практически ничего не понял.. Или к Вашему коду это не имеет отношения и Вы как-то по другому используете директиву?
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Директивой он записывает байты память программ. Эти байты не отделены jmp-ми. т.е. по сути это не переменные какие-то или константы, а самые натуральные команды процессору. Причем, обратите внимание, байты записаны по два (слово) и в обратном порядке (сначала младший, потом старший).
З.Ы. Ищите в инете тему "машинный код"
З.Ы. Ищите в инете тему "машинный код"
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Директива эта проста до безобразия, она просто говорит компилятору: "хочу в этом месте вставить ЭТИ байты" причем, это не описано в документации но память программ адресуется словами, поэтому нечетное количество байт в СТРОКЕ будет выровнено до четного и дано соответствующее предупреждение. А уж как эти байты будут использоваться в конкретном месте... уже не помню где я видел, но для x86 процессоров был такой прикол - исполняемый файл в виде осмысленной стоки текста, на самом деле это были инструкции процессору - все зависит от того как и чем интерпретировать данные.
- Реклама
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А как, допустим, вставить целый файл в текст программы? наподобие типа там .incbin "*.*". Есть что-то такое или нет?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А что из себя файл представляет? И что вы хотите получить в итоге?
.include "file.asm" например. Только файл должен быть правильный чтобы компилятор не ругался
.include "file.asm" например. Только файл должен быть правильный чтобы компилятор не ругался
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
C "file.asm" понятно, его компилятор вставляет как часть текста проги, а мне нужна именно бинарная вставка, т.е. такая директива, которая предполагает вставку абсолютно любого файла в любом формате, как просто блок данных и компилятору должно быть пофиг, что содержит файл. Например как в Easy68k:
Спойлер
Код: Выделить всё
; Processor: 68302
; Target Assembler: 680x0 Assembler in MRI compatible mode
;=========
; segment "ROM"
include "mc68302def.x68"
CLK equ 15000000 System clock Hz
stack equ $d90 Stack pointer
V_gimr equ %101<<V5 V7-V5 in GIMR register
I_vect equ (V_gimr+ISCC3)*4 Interrupt Vector for SCC3
stktemp equ END_SYS_RAM Stack pointer
MEMORY ROM $000000,$200000
org $0 start at the beginning
incbin "GS7000.bin"
ORG $0
off_000 dc.l $0D90
off_004 dc.l START
dcb.l $3A,$80082E
off_0F0 dc.l 0,0,0,0
dcb.l $C0,$80082E
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Такой директивы нет, но... все можно обойти! Пишется утилита(на турбопаскале, бейсике), которая конвертирует двоичный файл в текстовый с HEX-кодами и директивами .DW в каждой строке и делов. Если надо каждую перекомпиляцию чтобы коды обновлялись - вставить вызов в скрипт выполнения действий до компиляции. И делов. Я когда-то подобную программу делал для псевдоязыка которая генерировала правильно оформленные двоичные инклуды.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Собственно, на данный момент так и делаю.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Иманно !Alexeyslav писал(а):Пишется утилита(на турбопаскале, бейсике), которая конвертирует двоичный файл в текстовый с HEX-кодами и директивами .DW в каждой строке и делов.
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Привет, коты! 
Такое вот дело, я попробовал использовать регистр чисто для флагов. Получилось очень даже здорово (чего я раньше не додумался?). Но учитывая что в байте 8 бит, было бы здорово для удобства и быстроты все эти биты как-нибудь назвать.
Я полез в inc файл, чтобы посмотреть, как это сделано с регистрами конфигурации МК. Первый бит, который мне пришёл в голову - RXC для UARTа. Написал его в поиск и увидел такую штуку:
Дальше я решил поискать R25 (у меня он в программе используется как статусный), но нашлось только вот это:
Вот у меня вопрос, как-то можно через этот файл назвать биты регистра общего назначения, чтобы потом удобнее было с ними работать?
Такое вот дело, я попробовал использовать регистр чисто для флагов. Получилось очень даже здорово (чего я раньше не додумался?). Но учитывая что в байте 8 бит, было бы здорово для удобства и быстроты все эти биты как-нибудь назвать.
Я полез в inc файл, чтобы посмотреть, как это сделано с регистрами конфигурации МК. Первый бит, который мне пришёл в голову - RXC для UARTа. Написал его в поиск и увидел такую штуку:
Код: Выделить всё
; UCSR0A - USART Control and Status Register A
.equ MPCM0 = 0 ; Multi-processor Communication Mode
.equ U2X0 = 1 ; Double the USART transmission speed
.equ UPE0 = 2 ; Parity Error
.equ DOR0 = 3 ; Data overRun
.equ FE0 = 4 ; Framing Error
.equ UDRE0 = 5 ; USART Data Register Empty
.equ TXC0 = 6 ; USART Transmitt Complete
.equ RXC0 = 7 ; USART Receive Complete
Код: Выделить всё
; GPIOR2 - General Purpose I/O Register 2
.equ GPIOR20 = 0 ;
.equ GPIOR21 = 1 ;
.equ GPIOR22 = 2 ;
.equ GPIOR23 = 3 ;
.equ GPIOR24 = 4 ;
.equ GPIOR25 = 5 ;
.equ GPIOR26 = 6 ;
.equ GPIOR27 = 7 ;
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Только inc-файл не трогайте. Обзывайте эти биты как хотите или в главном файле (в начале кода) или в любом другом самописном файле, подключенном к проекту. Я например все определения и константы всегда выношу в отдельный файл, там гораздо удобнее и править.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А можете подсказать, каким образом привязаться именно к конкретным битам конкретного регистра? Вы же не называете, например 0 буквой А(соответственно все 0 в программе), 1 буквой Б и т.п.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Замечу, RXC не доступен для записи. Лучше использовать UBRR, если в камне нет GPIO.Мikа писал(а):Первый бит, который мне пришёл в голову - RXC для UARTа.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Все биты уже привязаны. В том же инклуде. Не изобретайте велосипед. А те, которые не привязаны можете обозвать сами через .def.
Например:
Фактически, Вы присваиваете здесь константе ABCDE число 7. И далее в программе можете использовать его для обращения к этому биту. Это нужно для того, чтобы допустим не забыть какой номер бита соответствует какому флагу в программе (из тех флагов, что Вы понапридумывали).
Например:
Код: Выделить всё
.def ABCDE=7Фактически, Вы присваиваете здесь константе ABCDE число 7. И далее в программе можете использовать его для обращения к этому биту. Это нужно для того, чтобы допустим не забыть какой номер бита соответствует какому флагу в программе (из тех флагов, что Вы понапридумывали).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ИС-пытатель писал(а):Например:Код: Выделить всё
.def ABCDE=7
Другой пример
Спойлер
Код: Выделить всё
.equ SCK=7
.equ DOUT=5
.equ SPI_IRQ=3
.equ SPI_CS=4
.equ SW_EN=6
.def _FF=R1
.def _01=R2
.def BIAS=R19
.def R_COUNT=R17
.def R_CRC=R18
.def R_DATA=R22
.equ BEGIN_POINT=$C0 ; буфер памяти результата
.equ RAM_CONST=$70
.equ RAM_CONST_END=$B0
.equ BUF_COMAND=$60
.equ BUF_COMAND_END=$64
.equ N1_RAM=$80 ; 32 байта скользящего среднего N1
.equ N2_RAM=$A0 ; 32 байта скользящего среднего N2
.set PRIZ=0
.set PR_INIT=1- Engineer_Keen
- Друг Кота
- Сообщения: 3870
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ого, set, я и не знал что им кто-то пользуется... Мне обычно equ хватает. А def да, только для переопределения РОН.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну, да, конечно же .equ или .set )) Ох уж эта каша в голове.. ) В Си #define. Ща прогу стряпаю с большим их количеством - вот .def и всунул с разгону. ))
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Парни, так я как раз о том и говорю, что если присвоить имя какому-нибудь числу через
то это просто обзывание нуля таким именем. А если регистров с флагами 2, например. Поэтому я и поинтересовался, можно ли биты конкретного регистра как-то назвать? 
Код: Выделить всё
.equ MPCM0 = 0Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.


