Перейти к содержанию

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


oleg st

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Смысл макросов заменить и расширить стандартные условные переходы  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

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

Изменено пользователем oleg st
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Изменено пользователем oleg st
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

 

Ссылка на комментарий
Поделиться на другие сайты

зачем писать 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; переход по >=

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

Изменено пользователем oleg st
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Геннадий сказал:

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


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

 

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

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

    .endif    .endm

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

 

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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
----------------------

 

Изменено пользователем AvrAsm
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Изменено пользователем AvrAsm
Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, demiurg1978 сказал:

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

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

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

Изменено пользователем oleg st
Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Здравствуйте. Чтобы не открывать новую тему по примитивному вопросу. На фото выше справа вверху стоит ионистор. На этой плате никаких элементов памяти я не вижу, поэтому скорее всего питание с ионистора подается вверх - на плату с МК.   Правильно ли я понимаю, что ионистор нужен для хранения текущего времени, а рабочая программа хранится в eeprom или flash на плате с МК (или в кишках самого МК)? Вопрос связан с тем, что прежде чем чинить эту LOGO, надо знать, сохранилась ли в нем программа. А чтобы узнать, сохранилась ли в нем программа, надо иметь соответствующую приблуду. Приблуду можно сотворить и самому, но если программа все-таки хранится в sram с питанием от ионистора, то никакого смысла делать приблуду нет, как и чинить LOGO. Просьба просветить, кто в курсе месте хранения рабочей программы в siemens logo. LOGO само собой старый: 6ED1052-1MD00-OBA5  
    • Против разумной, никаких. Кашкаровшина к ней не относится.
    • Таки делаю правильно, из за 50 гигов диск не попру никуда.
    • Доступ к файлам проекта, серверной части и график дизайнеру есть?
    • Эта платка напрямую к УСБ подключается, я через Arduino IDE заливал тот код, как в статье. Может правда панели плохие. Ножки не смог к плате припаять, припой вообще не ложился, поэтому проводочки только. Спасибо, а второй конденсатор обычный на 100 нанофарад? диод который уже у меня есть, его можно оставить? А код через арудино также заливать?
    • Проблема со щелчками в SMSL SU-1 - ошибка проектирования. Поставили туда модный разъём USB-C, но все кабели для них тонкие и дешёвые, практически без экранирования, и они прекрасно ловят наводки от сети в виде тихих раздражающих щелчков. Особенно если кабель лежит на силовых проводах от другой техники. Старые же USB-C кабели от принтеров и сканеров имеют хорошее плетёное экранирование и наводкам не подвержены. Поэтому меняйте свои ужасные SMSL SU-1 на прекрасный TOPPING DX-1, там ещё и усилитель для наушников есть.
    • "Умные" по форумам не шляются . Оформление в корпусе надо знать для начала .  А так , если не хватает естественной конвекции добавляют дополнительную . Тепловые трубки , антифриз и т.п. . Но это будет ставится в предполагаемый конструктив .   
×
×
  • Создать...