Jump to content
oleg st

Как написать в ассемблере переход без меток?

Recommended Posts

9 часов назад, oleg st сказал:

может кому пригодится ))

Хотелось бы увидеть примеры в коде. Понять практическую сторону метода. 

Share this post


Link to post
Share on other sites
Posted (edited)

Смысл макросов заменить и расширить стандартные условные переходы  breq и т.п. Эти переходы ограничены относительными прыжками от -63 до +64, если

нужно прыгнуть дальше, то эти макросы вам помогут, при дальнем прыжке будет подставлен rjmp, пример:

.org 200

 cp r16,r17

 RJEQ  loop1; Jump ==    Skip !=   <<-- здесь будет обычный breq loop1

 cp r18,r19

 RJEQ  loop2; Jump ==    Skip !=   <<-- тут макрос автоматически подставит конструкцию с дальним переходом brne + rjmp

.org 250

 loop1: nop

.org 1000

loop2: nop

названия макросов писал в стиле авр асма, но вы можете придумать свои удобные названия.

Edited by oleg st

Share this post


Link to post
Share on other sites
Posted (edited)

Честно? Не вижу смысла. Если количество команд переваливает, компилятор сразу выдаёт ошибку. Если хотите красиво, без заморочек, используйте табличные методы. Эти макросы только объем кода увеличивают. Хотите красиво, макросы увеличивают выхлоп. Либо табличные методы, при большом количестве сравнений и прочего. А ещё лучше, переходите на си. Я сам несколько лет писал на асме. Был ярым поклонником. И не слушал никого, кто советовал. Я перешёл после того, когда мои проекты стали большими. Особенно когда я начал использовать многоуровневые меню. В этот момент я понял. Пора. Когда освоил более менее си, сам себя материл, что раньше не перешёл. Скорость выполнения проектов ускорилась в разы. А то что я раньше писал на асме, это мне теперь помогает разбираться в дизассемлере, если какие то непонятки. 

Edited by demiurg1978

Share this post


Link to post
Share on other sites

LED-драйверы с KNX: как сэкономить до 50% электроэнергии?

Протокол KNX предлагает потребителям комплексную систему управления освещением и функциями безопасности – как центральную, так и распределенную. Компания Mean Well выпускает ряд изделий с поддержкой протокола KNX – LED-драйверы серии LCM-KN, а также блоки питания KNX-20E и KNX-40E.

Подробнее

Posted (edited)

с вами согласен полностью, я сам на асме пишут давно и перешел на С, как и вы, и спецом придумал кучу С-подобных макросов, не для того чтобы писать дальше на асме, а для ускорения написания и спец задач для таких МК типа тини13,10,24. Хотя, в эпоху стм даже эти тини уже не актуальны, но мы в теме авр, так что это может кому и пригодится.

Чтобы макрос не увеличивал выхлоп, лучше  его использовать как инструмент автоматизации и передачи параметров.

Edited by oleg st

Share this post


Link to post
Share on other sites

Снижена цена на DC/DC и AC/DC преобразователи Mornsun в Компэл!

Компэл снизил цены на всю продукцию Mornsun. В ассортименте – как широко известные и популярные позиции, так и новинки. Доступны AC/DC, неизолированные DC/DC-преобразователи или импульсные стабилизаторы (семейство K78/R3), изолированные DC/DC, и новейшее поколение R4.

Подробнее

4 часа назад, oleg st сказал:

Смысл макросов заменить и расширить стандартные условные переходы  breq и т.п. Эти переходы ограничены относительными прыжками от -63 до +64, если

нужно прыгнуть дальше, то...

Можно сделать лаконичнее, применив переход противоположного условия на пару байт дальше, а следующей командой ставите тот же RJMP.

;например, вместо breq_куда-то далеко можно сделать так...
	brne	PC+2
	rjmp	куда-то далеко

 

Share this post


Link to post
Share on other sites

Новинки гибридных конденсаторов: преимущества технологии

Гибридные конденсаторы унаследовали от полимерных конденсаторов такие достоинства как устойчивость к импульсам тока, повышенную надежность и низкое собственное сопротивление, а также высокую емкость и низкий ток утечки, как у алюминиевых электролитов. Благодаря этому гибридные конденсаторы могут с успехом заменить традиционные алюминиевые конденсаторы.

Подробнее

Posted (edited)

зачем писать 2 строки, когда можно одну?  у меня 75% заменено макросами, по опыту скажу, что скорость написания и понимания кода возросла в разы. почти си ))

вот еще:

STSW ram_addr,reg; любые регистровые пары(WORD) от r0...r30 грузит в ОЗУ или РСН (WORD)  

LDSW reg,ram_addr; ОЗУ или РСН (WORD) грузит в любые регистровые пары(WORD) от r0...r30

РСН или ОЗУ тоже автоматом.

на классике:

lds r16,ram_addr

lds r17,ram_addr+1

еще сравнение 16-битной константы с ОЗУ 16бит, выглядит так:

CPMIW ram_addr,2500; сравнение

RJSH loop; переход по >=

мне лично так удобно, я просто устал от лапной писанины )))

Edited by oleg st

Share this post


Link to post
Share on other sites
5 часов назад, Геннадий сказал:

Можно сделать лаконичнее, применив переход противоположного условия на пару байт дальше, а следующей командой ставите тот же RJMP.


;например, вместо breq_куда-то далеко можно сделать так...
	brne	PC+2
	rjmp	куда-то далеко

 

ну так макрос это и делает автоматом

.macro RJEQ ; Jump ==        Skip !=
    .if    jump_calc
    breq    @0
    .else
    brne    lop
    rjmp    @0 lop:

    .endif    .endm

Share this post


Link to post
Share on other sites

Тогда уж надо и rjmp анализировать на +-2К.

Share this post


Link to post
Share on other sites
Posted (edited)

да, можно, и будет подставляться jmp

короче.. суть вы уловили ))

Edited by oleg st

Share this post


Link to post
Share on other sites

Да, уловил. Может это и удобно, но мне не пригодится.

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

А то прям как на СИ - чего оно там накомпилировало то шьём.

Не влазит - берём проц пожирнее. Не успеваем - берём побыстрее.

Share this post


Link to post
Share on other sites

так эти макросы и нужны, чтоб меньше было ошибок и не зависать на час за монитором в прострации ))

Share this post


Link to post
Share on other sites

Ну почему же сразу в прострации?

Если любишь свою работу, она тебя кормит да ещё и моральное удовлетворение получаешь, это же просто офигенно! 

А если работаешь "на дядю", то да, прострации могут быть затяжными ))

 

Share this post


Link to post
Share on other sites

Разбирать портянку час, если ее можно описать 5 строками, и решить проблему за 5 мин, взять за это котлету - лучшее удовлетворение , что можно получить.

Человек капал поле всю жизнь, а ему дают трактор для работы, а он, - "не, ерунда, лучше с лопатой"

Макросы и нужны, чтоб лопатой не махать. Этот инструмент встроен в среду, и не пользоваться им неумно.

На дядю нужно быстро писать и прострации не приемлемы, а писать нужно, не то что макросами, а целыми блоками и не своими )))

Share this post


Link to post
Share on other sites
Posted (edited)
3 часа назад, oleg st сказал:

решить проблему за 5 мин, взять за это котлету - лучшее удовлетворение , что можно получить.

Человек капал поле всю жизнь, а ему дают трактор для работы, а он, - "не, ерунда, лучше с лопатой"

Копал. А если поле маленькое, копать человеку в удовольствие, того что он выкапывает с лихвой хватает на пропитание, зачем ему трактор? И котлет у него достаточно, складывать уже некуда.

3 часа назад, oleg st сказал:

Макросы и нужны, чтоб лопатой не махать. Этот инструмент встроен в среду, и не пользоваться им неумно.

С чего Вы взяли что я против макросов? Почему решили что я ими не пользуюсь?

Мне именно Ваши макросы не нравятся поскольку результат их работы можно только по листингу выяснить.

И макрос это скорее всего не трактор, а хорошо заточенная и удобная лопата, возможно с небольшим моторчиком.

3 часа назад, oleg st сказал:

На дядю нужно быстро писать и прострации не приемлемы, а писать нужно, не то что макросами, а целыми блоками и не своими )))

Ага, понадеешься на всяких библиотеко писателей. Сделаешь всё быстро и на прогоне время сэкономишь.

А потом окажется что индус где-то накосячил.  И котлету вернуть придётся ещё и с процентами.

Как бы не забанили за флуд...

Поддержу тему, вот скажите ув. знатоки, накой мне здесь метки?

.if TESTCLK==ON
	cli
	sbi	(VPORT3_OUT),3
	nop
	nop
	nop
	cbi	(VPORT3_OUT),3
	nop
	rjmp	PC-6
.endif
----------------------
	lds	RA,(RTC_STATUS)
	sbrc	RA,RTC_SYNCBUSY_bp
	rjmp	PC-3
----------------------
	SBIS	(VPORT2_IN),1
	RJMP	PC-1
----------------------
	LDS	RTMPA,(BWAIT)
	DEC	RTMPA
	BREQ	PC+3
	STS	(BWAIT),RTMPA
	RETI
----------------------

 

Edited by AvrAsm

Share this post


Link to post
Share on other sites

Я уже писал, если без меток, нужно считать не количество команд, а количество слов. В конце у вас стоит команда STS, она занимает 2 слова. Если вдруг вам придётся что то исправить и вы забудете исправить переход, то и огребете. А метки исключают подобного рода ошибки. Это хороший тон, понимаете? Заблаговременное исключение ошибок. Вроде правила не писать магические числа.

3 часа назад, oleg st сказал:

Разбирать портянку час, если ее можно описать 5 строками, и решить проблему за 5 мин, взять за это котлету - лучшее удовлетворение , что можно получить.

Человек капал поле всю жизнь, а ему дают трактор для работы, а он, - "не, ерунда, лучше с лопатой"

Макросы и нужны, чтоб лопатой не махать. Этот инструмент встроен в среду, и не пользоваться им неумно

Вы как то неправильно понимаете суть макросов. Макросами пишут какие либо повторяющиеся куски кода, но которые не перенести в подпрограммы. И макросы не уменьшают, а замещают код. 

Share this post


Link to post
Share on other sites

Даже не знаю что должно со мной случиться чтобы я забыл что STS занимает два слова.

Вы как давно с AVR имеете дело?

 

Share this post


Link to post
Share on other sites
Posted (edited)

Вы можеть забыть в случае изменения поправить число. Устали, не выспались, отвлеклись. С AVR работаю постоянно. Последние годы на си, асм единичные случаи. До этого несколько лет писал на асме.

Не переходите на личности, и не нужно меряться письками (только ассемблерщики меряются, у кого короче) . Я говорю о правилах, которым нужно следовать и превращать в привычки. А некоторые правила созданы как раз для того чтобы изначально исключить некоторые типы ошибок.

Edited by demiurg1978

Share this post


Link to post
Share on other sites
Posted (edited)
10 минут назад, demiurg1978 сказал:

Вы можеть забыть в случае изменения поправить число. Устали, не выспались, отвлеклись.

Да конечно могу. Но это сразу вылезет при тестировании и дальше моего рабочего стола не уйдёт.

Но Вы правы, новичкам так лучше не делать.

10 минут назад, demiurg1978 сказал:

Не переходите на личности, и не нужно меряться письками.

И не собирался, у меня всё равно больше. :D

А по остальным отсутствующим меткам в приведённом мною коде у Вас возражений нет?

Edited by AvrAsm

Share this post


Link to post
Share on other sites
Posted (edited)

Есть. Вы не компилятор, чтобы быть непогрешимым. Ставьте метки. Я ставлю и как то не испытываю душевных мук... Потому что понимаю цену ошибок. 

Edited by demiurg1978

Share this post


Link to post
Share on other sites
Posted (edited)

Это ваше право. Я делал  электронику для пром оборудования и учился у профессионалов. И не следовал слепо, потому что понимаю, что есть правило а есть предпочтение. И ни разу потом не жалел о следовании некоторым правилам. Некоторые правила я впоследствии вывел сам

Доводы я привёл. Дальше смотрите сами.

Посмотрел ваш профиль. Стаж больше 20 лет. Думаю вы должны были отметиться на некоторых форумах. И мне странно поднимать с вами спор о метках. 

Edited by demiurg1978

Share this post


Link to post
Share on other sites
Posted (edited)
8 часов назад, demiurg1978 сказал:

Вы как то неправильно понимаете суть макросов. Макросами пишут какие либо повторяющиеся куски кода, но которые не перенести в подпрограммы. И макросы не уменьшают, а замещают код. 

Я не говорил, что он уменьшает код, он уменьшает сам текст, это позволяет лучше воспринимать программу.  Обычно простые замещалки пишу редко, как правило что-то проверяю ИФами и макрос становится уже типа умным. Это и есть макроассемблер, а непросто асм.

з.ы. метки нужно ставить всегда ! ))

Edited by oleg st

Share this post


Link to post
Share on other sites
Posted (edited)

Здесь мы плавно пришли к следующему. Как только начинаешь писать на макроассемблере, пора переходить на си. Ассемблер хорош тем, что напрямую управляешь мк. Здесь все зависит только от тебя. Как успех, так и ошибки. Так же ассемблер хорош низким порогом вхождения. Я взял мк, почитал книги, написал свои первые шаги. И пошло. 

Начиная с определённого момента дальше идут приёмы программирования. А не язык. Если точнее, проектирования. 

Edited by demiurg1978

Share this post


Link to post
Share on other sites
1 минуту назад, demiurg1978 сказал:

Здесь мы плавно пришли к следующему. Как только начинаешь писать на макроассемблере, пора переходить на си. Ассемблер хорош тем, что напрямую управляешь мк. Здесь все зависит только от тебя. Как успех, так и ошибки. Так же ассемблер хорош низким порогом вхождения. Я взял мк, почитал книги, написал свои первые шаги. И пошло. 

я перешел на си, писал выше, но на асме пишу под мелкие мк типа тини13/10, и благодаря этому переходу мой асм стал лучше :D

Share this post


Link to post
Share on other sites
Posted (edited)

Ещё со времен ассемблер не парюсь насчёт объёма памяти мк. Я активно использую конечные автоматы, программные таймеры, это как минимум на 25 процентов увеличивает выхлоп. На маленьких мк это критично. Проекты побольше, эта разница нивелируется. Если не влезает, пробую ужаться, не получается, беру более жирный мк. У меня мало серийных изделий, поэтому этой проблемы нет. 

Edited by demiurg1978

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Мерял напряжение +-70в .частота на затворах 116кгц.то есть на выходе 230. Я так понимаю он на грани насыщение если без сигнала такая температура.можно конечно поднять частоту .но тогда транзисторам будет тяжелее (четыре затвора в паралель) вот и подумал его перемотать.Сколько собирал 311 усей .всегда брал габариты и индуктивность и медь с запасом .и всегда все было холодное и сам усь имел низкий ток холостого .А тут китайци все видимо секономили ,ферит ,медь.Это от блока питания 12в на вторичке +-70 ,а в машине при заведенном 14.2в будет все +-80в это еще больше его приблизит к насыщению .  
    • На усилитель "Урал" похож. Нагрев создаёт какие-то проблемы? Если просто хочется по холоднее. Приделайте вентилятор для обдува. Ну а чтоб что-то менять, для начала надо сделать некоторые замеры и прикинуть, а стоит-ли.
    • Подскажите пожалуйста .усилитель crunch 3000 .как бы все работает .но температура дроселя на холостом 75 градусов ,это нормально или стоит заморочется и купить большее кольцо с меньшим мю и намотать больше индуктивность? Тогда и транзисторам по легче будет.
    • А если оно ниже напряжения стабилизации! Вы думаете что стабилитрон его будет повышать? 
    • Своё мнение оставим при себе. Если мозгов нет, ни кто не добавит, и не купишь. Два умника нашлись. Хотел бы чтоб вы обосновали такое заявление! В мой адрес. Когда это я херню нёс? Если у вас не получается, не надо так яростно за видывать. У меня-то всё работает. Что сидеть на месте и тупа собирать уже проверенные схемы, Надо двигаться дальше и развиваться. А не сидеть и обсуждать что да как.  "Как бабки на лавочке с семечками"
    • тут вон усилитель 1600вт готовый за 6к р не каму не нужен был а тут трансформатор один 11т р.   

  • Оловоотсос, два цвета на выбор

×
×
  • Create New...