реклама на сайте
подробности

 
 
> Макросы в AVRASM/AVRASM2 и других ASM, Можно ли опираться на макро-средства ассемблеров для AVR
SAAl
сообщение Jun 30 2010, 05:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 27-10-06
Пользователь №: 21 715



Наверное уже не первый кто спрашивает но поиск не дал результатов.

Можно ли в макрокомандах имеющихся для AVR ассемблеров использовать неопределенное кол-во параметров.
Можно ли средствами макрокоманд AVRASM2 проверить переданный в макроопределение параметр по принципу есть\нет или меньше больше, если переданный параметр не константа (адрес, порт) а регистр.
Может быть уже существует реализация команды push списком push_list ZH, ZL, YL, YH, R0 и т.д.?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Exstreem
сообщение Jul 7 2010, 12:24
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 5-02-09
Пользователь №: 44 428



Верно, на пустоту не проверить.
Макрос в асме, как функция в С; должны быть перечислены все параметры.
Если на пустоту не проверить, то можно проверить на 0 (.if @0<>0). Конечно, при объявлении макроса будет лишняя информация, зато получишь то что хотел. rolleyes.gif

Точно не помню как обозначается "не равно" - <>, либо еще как.
Go to the top of the page
 
+Quote Post
SAAl
сообщение Jul 7 2010, 13:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 27-10-06
Пользователь №: 21 715



Цитата(Exstreem @ Jul 7 2010, 18:24) *
Верно, на пустоту не проверить.
Макрос в асме, как функция в С; должны быть перечислены все параметры.
Если на пустоту не проверить, то можно проверить на 0 (.if @0<>0). Конечно, при объявлении макроса будет лишняя информация, зато получишь то что хотел. rolleyes.gif

Точно не помню как обозначается "не равно" - <>, либо еще как.


если быть точным то в AVRASM2 как в Си "не равно" это "!=". Однако вот результаты, заметьте, во втором случае в передаче параметра использовалась константа и ошибка произошла уже в строке 7.

В первом случае вызов:
pushl r1, r2, r3

Цитата
AVRASM: AVR macro assembler 2.1.2 (build 99 Nov 4 2005 09:35:05)
Copyright © 1995-2005 ATMEL Corporation

asm.asm(3): error: syntax error, unexpected REGISTER
asm.asm(20): info: macro 'pushl' called here



Во втором случае вызов:
pushl 10, r2, r3

Цитата
AVRASM: AVR macro assembler 2.1.2 (build 99 Nov 4 2005 09:35:05)
Copyright © 1995-2005 ATMEL Corporation

asm.asm(7): error: syntax error, unexpected REGISTER
asm.asm(20): info: macro 'pushl' called here


Макрос выглядит так:
Код
.MACRO pushl

.if @0!=0
push @0
.endif

.if @1!=0
push @1
.endif

.if @2!=0
push @2
.endif


.ENDM


unexpected REGISTER явно свидетельствует о том что условное макросредство .if ожидает не регистр, и косвенно подтверждает что в AVRASM параметры макрокоманды типизированы на константы и регистры smile.gif


Цитата(ReAl @ Jul 6 2010, 18:12) *
#if — это от С-шного препроцессора элементы взяты, они отрабатывают до того, как файл начинает анализировать "именно ассемблер".


Да действительно при сравнении #if препроцессора происходит сравнения @0 а не то что туда передается, препроцессор тут бессмысленно применять.

Цитата(ReAl @ Jul 6 2010, 18:12) *
avrasm2 вроде бы существенно расширяли по сравнениию с avrasm, но я на тот момент уже перестал интересоваться "родными" инструментами от Атмел, даже не смотрел.


да вот так получается что расширение коснулось пару операций и внедрения препроцессора Си, остальное осталось от AVRASM.

Цитата(ReAl @ Jul 6 2010, 18:12) *
Для поставенной задачи со списком типичный инструмент — макроинструкция IRP (блок повтора по списку аргументов). Ищите это в AVRASM2.


увы... такового нет

Цитата(ReAl @ Jul 6 2010, 18:12) *
Вдогонку — если ассемблер позволяет рекурсивные макросы (т.е. вызывающие сами себя), то задачу тоже можно решить, просто надо ограничиться каким-то разумным максимальным количеством аргументов. Как-то так (это тоже от 51-го контроллера, асм от 2500A.D.)


рекурентность возможна и выход Вы нашли из положения просто "супер", но... портит все одна вещь как вывалиться из рекурсии? Только при проверке параметра, а тут такой "облом" как регистр проверить параметр не позволяет специфика условных директив.

Сообщение отредактировал SAAl - Jul 7 2010, 13:15
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SAAl   Макросы в AVRASM/AVRASM2 и других ASM   Jun 30 2010, 05:53
- - Artem_Petrik   Насчет AVRASM2 не скажу (когда меня волновал анало...   Jun 30 2010, 11:01
- - Qwertty   Цитата(SAAl @ Jun 30 2010, 09:53) Можно л...   Jun 30 2010, 11:19
|- - SAAl   Цитата(Qwertty @ Jun 30 2010, 17:19) Все ...   Jul 1 2010, 16:33
|- - ReAl   Цитата(SAAl @ Jul 1 2010, 19:33) #if в AV...   Jul 6 2010, 12:12
|- - _Bill   Цитата(ReAl @ Jul 6 2010, 16:12) Для AVR ...   Jul 11 2010, 18:11
- - Deka   Число параметров для одного макроса фиксированное ...   Jul 5 2010, 12:41
|- - SAAl   Цитата(Deka @ Jul 5 2010, 18:41) Число па...   Jul 6 2010, 02:00
- - adc   Дело в том что передаваемые макросу параметры стро...   Jul 6 2010, 06:48
- - Artem_Petrik   2 SAAL: Что-то быстро найти нормальное описание av...   Jul 6 2010, 09:29
|- - SAAl   Цитата(Artem_Petrik @ Jul 6 2010, 15:29) ...   Jul 7 2010, 12:11
|- - Artem_Petrik   Цитата(SAAl @ Jul 7 2010, 15:11) Описание...   Jul 7 2010, 17:51
|- - ReAl   Цитата(Artem_Petrik @ Jul 7 2010, 20:51) ...   Jul 7 2010, 20:11
|- - SAAl   Цитата(Artem_Petrik @ Jul 7 2010, 23:51) ...   Jul 8 2010, 03:40
- - Deka   Я бы тоже не отказался от помощи прикручивания к с...   Jul 8 2010, 09:54
- - Exstreem   Код ассемблировался: .MACRO Pushl .if @0<31 ...   Jul 8 2010, 14:49
- - Exstreem   В прошлом сообщении допустил ошибку: вместо Цитата...   Jul 8 2010, 18:13
|- - SAAl   Цитата(Exstreem @ Jul 9 2010, 00:13) В пр...   Jul 9 2010, 02:55
- - Exstreem   Да, конечно, пробовал, поэтому и выложил. Ассембли...   Jul 9 2010, 04:56
|- - SAAl   Цитата(Exstreem @ Jul 9 2010, 10:56) Да, ...   Jul 9 2010, 05:16
- - Exstreem   Цитатавот код который "компилится": Код ...   Jul 9 2010, 05:51
|- - SAAl   Цитата(Exstreem @ Jul 9 2010, 11:51) Ошик...   Jul 9 2010, 07:00
- - Exstreem   ЦитатаХитрость ясна, однако тоже полумера согласны...   Jul 9 2010, 07:39
- - ILYAUL   А SREG ?   Jul 10 2010, 07:13
- - Exstreem   Один из вариантов: Код.MACRO Pushl .if @0<=31 ...   Jul 10 2010, 16:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016