Jump to content
oleg st

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

Recommended Posts

7 часов назад, AvrAsm сказал:

...потом пеньки 286...

Пеньки пошли с 586-х. XT, 286, 386, 486 такой "кликухи" не слыхивали.:)

Share this post


Link to post
Share on other sites
Posted (edited)

Да, конечно оговорился, просто со словом пеньки у любой intel того далёкого времени на базе х86 ассоциируется :crazy:

Edited by AvrAsm

Share this post


Link to post
Share on other sites
11.07.2020 в 16:06, oleg st сказал:

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

Начали активно макросы применять? Или что-то другое? 

Share this post


Link to post
Share on other sites

Вебинар «STM32L5. Секреты оценки энергопотребления» (05.11.2020)

Компания КОМПЭЛ приглашает 5 ноября принять участие в вебинаре, посвященном первому семейству МК STM32L5 на ядре Cortex-M33. На вебинаре будет рассказано об ошибках при расчете энергопотребления МК с помощью отладки STM32L562E-DK. Отладки STM32L562E-DK будут разыгрываться среди участников. Информация об условиях участия будет озвучена на вебинаре.

Подробнее

Наверное, не асм, а листинг кода. Стать лучше должен машинный код, а не "писанина" на той или другой платформе.

Share this post


Link to post
Share on other sites

Как снизить потери мощности на 30%? Транзисторы SiC MOSFET.

Прогресс в области широкозонных полупроводниковых материалов позволил создать карбид-кремниевые полевые транзисторы (SiC MOSFET) с повышенной рабочей частотой, обеспечивающие меньшие потери на переключение. Усовершенствованные корпуса с малой паразитной индуктивностью, в которых выпускаются такие транзисторы, позволяют разработчикам в полной мере использовать возможности этих компонентов для увеличения КПД силовых преобразователей.

Подробнее

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

Начали активно макросы применять? Или что-то другое? 

Когда расширяется инструментарий, уже видишь другие подходы написания, алго да и макросы помогают. Век живи век учись ))

Share this post


Link to post
Share on other sites

Нейросети в STM32G4 - пошаговое руководство!

Наличие программного пакета X-CUBE-AI, расширяющего функционал STM32CubeMX, поможет разработчику построить искусственную нейросеть на базе микроконтроллера из линейки STM32G4 производства STMicroelectronics. Статья включает пошаговое описание реализации такой нейросети.

Подробнее

Posted (edited)

Наиболее полезный макрос я в своё время делал с помощью добрых людей с форума Электроникс, и макрос этот был для avr-as из комплекта avr-gcc (WinAVR). В том убожище, которое avrassember от Atmel, макросы - это недоразумение...

Так вот, в "нормальном" ассемблере я сделал пару макросов, функционально напоминающих пару команд ассемблера x86 ENTER - LEAVE. Макрос ENTER в качестве параметров принимает любое количество регистров в виде списка, которые сохраняет в стек, а макрос LEAVE уже без параметров восстанавливает эти самые регистры из стека в нужном порядке - очень удобно при написании обработчиков прерываний. А лучшего применения макросов я и не припоминаю... 

Edited by ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

ну макросы это не панацея, но штука полезная. тоже про стековые вспомнил для авр:

 

pushw Z; - сохр. рег. пару в стеке (r0...r30)

popw Z; извлеч

 

Share this post


Link to post
Share on other sites
Только что, oleg st сказал:

стековые вспомнил для авр

Главна проблема при работе со стеком - это не нарушить порядок сохранения-восстановления регистров (или пар). И макрос pushw никак эту проблему не решает: написать на входе в обработчик прерывания

pushw r24
pushw r26

и потом по запарке на выходе 

popw r24
popw r26

проще простого... Упомянутые мной макросы лишены этого недостатка, и используются как-то так:

ENTER r0, r7, r12, r30
; обработчик
LEAVE
reti


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


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

ENTER r0, r7, r12, r30
; обработчик
LEAVE
reti

А как LEAVE знает нужную последовательность восстанавливаемых регистров?

ENTER где-то как-то сохраняет строку входных регистров? :shok:

А дайте ссылку на тему на электрониксе.

 

Share this post


Link to post
Share on other sites

Это было очень давно, и ссылку я не найду... А вот ссылку на свою статью по поводу этого макроса, могу дать. Правда, там сменился движок и верстка статьи съехала, вставки кода никак не выделены, но смысл понять можно. 

https://simple-devices.ru/articles/7-soft/170-gnu-assembler-reviev

44 минуты назад, oleg st сказал:

накрутить можно как угодно

Это да, но только не в атмеловском ассемблере! Нормальный макроассемблер - это, имхо, gnu-as или GAS


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
Цитата

{code}.set selector, 0 // в этой переменной будем отмечать нужные регистры

Что за переменная seleсtor? где она хранится?

Share this post


Link to post
Share on other sites

Ну, здравствуйте... Вы что, никогда с макроассемблером дел не имели? Это переменная, существующая только для макроассемблера, она нигде не хранится, кроме как в памяти компилятора.

Когда в Си вы пишите #define DELTA 12 - где хранится DELTA? Вот и selector там же...


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Ну чего Вы сразу "здравствуйте"??? Я просто уточнил.

А если мне в прерывании на входе надо запомнить в стеке всего несколько регистров минимально необходимых.

А затем надо еще регистров в стек добавить.

А это уже два ENTERа будет без LEAVE между ними.

Как быть?

Share this post


Link to post
Share on other sites
Только что, AvrAsm сказал:

Ну чего Вы сразу "здравствуйте"???

Прошу прощения... позволил лишнего.

Только что, AvrAsm сказал:

А если мне

Придумать кучу всяких "а если" можно на любое количество "вот так". Поэтому у меня ответа нет: упомянутые макросы работают в паре, и до использования LEAVE нового ENTER быть не должно. При известном напряжении мозга можно придумать что-то и на этот случай, но лично я не вижу необходимости. Чаще всего при входе в функцию или обработчик прерываний сразу сохраняют все, что нужно, и потом уже не добавляют. В конце концов, push-pop в вашем распоряжении всегда.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
Только что, ARV сказал:

В конце концов, push-pop в вашем распоряжении всегда.

Понятно. Тут применяем, тут не применяем. Зачем такой макрос нужен?

Share this post


Link to post
Share on other sites
Только что, AvrAsm сказал:

Зачем такой макрос нужен?

Разве я недостаточно описал, зачем?


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


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

Придумать кучу всяких "а если" можно

Я ничего не придумывал. Для меня такое сохранение регистров в прерывании вполне норма.

Зачем сохранять регистры которые могут не понадобиться в обработчике, а могут и понадобиться.

Всё зависит от условий с которыми обработчик столкнётся во время своего выполнения.

Share this post


Link to post
Share on other sites
Только что, AvrAsm сказал:

Зачем сохранять регистры которые могут не понадобиться в обработчике, а могут и понадобиться.

Когда вы пишите обработчик прерывания, вы все равно некоторое количество регистров сохраняете в стеке (ну, простейшие случаи не берем в расчет). Следовательно, хотя бы ENTER r1, r2 у вас на входе в обработчик будет. В конце будет LEAVE.

В процессе вам может не хватить пары этих регистров, и тогда вы запросто допишите в ENTER еще несколько: ENTER r1, r2, r16, r17. Потом выяснится, что r16 у вас занят в другой части проекта и использовать его нежелательно, и вы просто замените его на другой ENTER r1, r2, r24, r17. А потом выясните, что можно оптимизировать и отказаться от r1 - и вы просто удалите его из списка: ENTER r2, r24, r17. При этих манипуляциях вам никогда не придется переживать, в каком порядке и какие именно регистры восстанавливаются при выходе из обработчика! Вот в чем смысл этих макросов.

Поскольку на ассемблере обработчик прерывания может занимать легко пару-тройку экранов кода, без этих макросов уследить за корректной цепочкой pop (на 348-й строке) сложновато, так как цепочка push у вас на 1-й строке...

Принцип, как в Си с локальными переменными: в начале вы их определили, но при выходе из функции они сами уничтожились. Аналогия притянутая, но, по-моему, нормально демонстрирует удобство.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


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

Вот в чем смысл этих макросов.

Да понял я смысл.

Это Вы не поняли то что я написал.

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

Обработчик сразу не знает сколько регистров ему придётся "испортить".

--------

Ассемблер на то и ассемблер и не терпит вольностей. Пишешь на асме будь добр считай все PUSH и POP и контролируй их последовательность!

Не хочешь этим заниматься - пиши на СИ и пр.

Share this post


Link to post
Share on other sites
Только что, AvrAsm сказал:

Обработчик сразу не знает сколько регистров ему придётся "испортить".

И что? По-моему, сохранять неожиданно потребовавшиеся регистры в середине обработчика, а не в начале, плохой стиль (если, конечно, в этом нет какого-то особого тайного смысла). А в начале вам заранее ничего знать и не надо - там пишите себе, когда хотите и что хотите, и не бойтесь, что при выходе что-то напортачите.

Макросы, как простая автозамена - это разве польза? Современный редактор (даже тупейший "блокнот") легко заменит любой текст на несколько новых строк - в чем удобство для программиста? По-моему, удобство именно в том и заключается, чтобы облегчать жизнь - разве отсутствие необходимости следить за pop-ами в конце обработчика не облегчение?

Но дело ваше - не нравится, не применяйте. Моё дело маленькое - своими предпочтениями поделился, и с меня хватит.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


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

По-моему, сохранять неожиданно потребовавшиеся регистры в середине обработчика, а не в начале, плохой стиль (если, конечно, в этом нет какого-то особого тайного смысла).

Неужели? :D

А тайный смысл конечно есть, это сокращение времени обработки прерывания.

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

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


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

  • Сообщения


  • Генератор высокого напряжения. Вход 3-6В

×
×
  • Create New...