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

Драйверы MOSFET/IGBT Infineon – силой нужно управлять!

Специалисты Infineon усовершенствовали традиционные кремниевые MOSFET и IGBT и выпустили компоненты на базе принципиально иных материалов – нитрида галлия и карбида кремния. Мы создали подборку полезных материалов, чтобы вы разобрались во всех тонкостях и стали экспертом по управлению силовыми приборами нового поколения CoolMOS, CoolGaN, CoolSiC!

Подробнее

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

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

  • Сообщения

    • К  моему сожалению я пока не знаю, кто такой джетаг. Нашел на kenotrontv.ru, но там надо перечислить 100 рублей для регистрации. Проблема не в деньгах, просто живу в Украине и не знаю как оплатить. Может есть у кого-то прошивка?
    • Вообще-то ККМ нужен не для того чтоб не сгорела проводка, а чтоб синусоида не срезалась от зарядки ёмкостей. Реактивные токи тут не причём. Единственное, что их создаёт - это конденсаторы во входном фильтре. А это обычно 0.47 + 0.47 микрофарад
    • Плавный розжиг светодиодов по схеме Falconist-a. На выходы компараторов добавлены конденсаторы для более тонкого перетекания света.  
    • Тоже такого мнения, но ведь как-то и только Вот такая, понимаешь, загогулина.  
    • Совсем дурак. Кто поможет - лох! Гость Сергей... Вы как Гость - Сэр Гей? Никогда бы так своего ребенка не назвала! Сэр Гей. Это же пи3дeц!  Аналогом!
    • 1. Плавное нарастание на выходе ЛБП (в нормальном ЛБП) дает С8=10,0 + 10к перед средним выводом R20. 2. Гарантированное и значительное снижение выбросов при вкл. и выкл. дает питание минуса ОУ от нормального источника. При этом варианте можно поставить более быстрый TL074 и этим уменшить выброс после КЗ и режима СС. При С8=10,0 + 10к отдельный минус даст приход сначала минуса на ОУ и затем рост плюса на выходе ОУ и напряжения на выходе ЛБП. 3. КТ808 слишком слабый. Большой выброс на шунте его может убить. Вариант с гарантированно меньшими выбросами - v18yR. Он работает вообще без кондеров коррекции.   https://forum.cxem.net/index.php?/topic/76820-простой-и-доступный-бп-050в/&do=findComment&comment=3343798  Или более старый выриант v16yR  https://forum.cxem.net/index.php?/topic/76820-простой-и-доступный-бп-050в/&do=findComment&comment=2612212 4. конденсатор на выходе ПиДБП должен быть сотни мкФ.   
    • Дело в том что до 50 ватт ккм и не нужен) нет таких реактивных токов чтоб сгорела проводка, а терь попробуйте флебеком передать мощность 500-1кВ - 400вольт, буст в любом случае выиграет а в режиме ссм и подавно, по МС - я не подскажу с ней дело не имел. 

  • MOSFET транзисторы в смд корпусе, p-канальные, 100 шт.

×
×
  • Create New...