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

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

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

Подробнее

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

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.

Подробнее

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

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

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

Share this post


Link to post
Share on other sites

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

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

Подробнее

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

  • Сообщения

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

  • Набор модулей защиты аккумуляторов от переразряда и перезаряда

×
×
  • Create New...