COKPOWEHEU, терминология понятна вполне. Это было так, к слову. Что у АВРок адресация через отображение на память универсальна для всего регистрового файла.
Да, насколько я помню, там даже РОНы можно адресовать через оперативку. Я-то к тому говорил, что в MMIO (за пределы in/out) они вылезли не от хорошей жизни. И не самым удобным способом.
COKPOWEHEU, просто в системе команд для адресации IO атмелы отвели 6 бит всего.... Тем самым себя ограничив... "64 регистра хватит всем" А для части команд вообще 5 бит адресация IO
Потому что всего 16 бит на команду. Да еще хвастались развесистым ассемблером, более сотни инструкций. Впрочем, в 32-битках тоже адрес периферии в команде не кодируют.
COKPOWEHEU, и что, разве мало? Вон некоторые на "современном ассемблере" мегапрограммы пишут с собственным отладчиком... И программы, во много раз более компактные, нежели на ЯВУ. Значит хороший ассемблер, надо брать. Просто на этапе разработки системы команд не получилось, видимо, выделить больше 6 бит на адрес периферии. Зато он внутри команды, а не идет отдельным операндом, занимая еще одну ячейку флеша.
Добавлено after 5 minutes 35 seconds: А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...
там есть условия, которые определяются комбинацией битов в SREG. так что, не всегда достаточно проверить только один бит. а большое количество мнемоник из-за того, что есть дублирующие мнемоники, имеющие один и тот же код. например, BRCS и BRLO имеют одинаковый код. но вторая (если меньше) логически более удобна, чем просто "если перенос установлен".
Добавлено after 15 minutes 22 seconds: и еще. в этом большом количестве мнемоник есть огромное удобство - мне не нужно помнить номера каждого бита в регистре.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
COKPOWEHEU, и что, разве мало? Вон некоторые на "современном ассемблере" мегапрограммы пишут с собственным отладчиком... И программы, во много раз более компактные, нежели на ЯВУ. Значит хороший ассемблер, надо брать.
Ну, "во много раз" для программы более-менее вменяемого размера и более-менее вменяемого срока разработки я, конечно, не поверю. Пара десятков процентов от силы. Дальше у человека уже закончится внимательность за всем следить.
А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...
Чего не сделаешь ради маркетинга. Даже псевдо-команды в список добавлять будешь. Хм. Даже интересно, сколько у них команд на самом деле, без дублирования.
Ну, "во много раз" для программы более-менее вменяемого размера и более-менее вменяемого срока разработки я, конечно, не поверю.
В сети встречала утверждение, что грамотно написанная сишная программа дает оверхед 20-30% против грамотного асм-кода. Но бывают частные случаи, когда функционал простой и можно писать все на регистрах... Либо укладываться в 256 байт ОЗУ, "законстантив" ZH... Можно еще ради экономии сидеть оптимизировать код, используя различные ухищрения и аппаратные особенности... Особенно, когда программа не умещается во флеш ровно на один байт ))) Еще можно уйти от универсальности программы на ЯВУ, заточив код под какой то один-два МК. Но это частные случаи (как срачик про загрузчики). Как по мне, асм хорош для каких то критичных ко времени задач. Когда нужно сделать минимальный код, а ЯВУ навешает лишнего согласно своих соглашений. Причем не чистый асм, а ассемблерная вставка. А в остальном - срок разработки, читаемость и переносимость кода - это не для ассемблера.
Starichok51 писал(а):
в этом большом количестве мнемоник есть огромное удобство - мне не нужно помнить номера каждого бита в регистре.
Мне их тоже не нужно помнить )))))) if (a>0) { action; } А если мне нужна ассемблерная вставка, то я могу и в справке подсмотреть мнемонику.
В общем-то всё гораздо проще оказалось, есть плата адруино уно с краватью, только кварц перепаять, с 16 на 8, в програматоре залить восьмую и вставить в кравать вместо 168.
_________________ Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Можно еще ради экономии сидеть оптимизировать код, используя различные ухищрения и аппаратные особенности... Особенно, когда программа не умещается во флеш ровно на один байт )))
А представьте себе такую хардкорную оптимизацию под, хотя бы, stm32f103, контроллер 10-20-летнего возраста с 64к флеша.
Just_Fluffy писал(а):
Еще можно уйти от универсальности программы на ЯВУ, заточив код под какой то один-два МК.
Можно. Но это будет скорее пример демосцены "смотрите, как я умею", чем реального проекта. Например, вроде такого.
Just_Fluffy писал(а):
Как по мне, асм хорош...
...для локальных оптимизаций, для критичного к времени выполнения кода (vusb отличный пример; хотя в более мощных камнях скорость выполнения инструкций уже не гарантируется - кеши, предсказания, да и просто пропускная способность шины команд). Для супер-низкоуровневых вещей вроде переключателя контекста в ОС. Очень хорош для обучения. И, разумеется, при просмотре дизассемблированного кода - реверсе или просто отладке.
Just_Fluffy писал(а):
Причем не чистый асм, а ассемблерная вставка.
Отчего же, можно и чистый асм. Очень часто стартап-файлы (тот код, который подготавливает стек, переменные, спецрегистры и прочее к запуску высокоуровневого кода) пишутся именно на чистом асме. На AVR он уже написан и хорошо спрятан, а вот на arm или risc-v его приходится качать у производителя или писать самому. Ну и другие примеры использования библиотек на асме никто не отменял.
Just_Fluffy писал(а):
А если мне нужна ассемблерная вставка, то я могу и в справке подсмотреть мнемонику.
Не, не. Когда есть удачная мнемоника это очень удобно. Зачастую получается писать ассемблерный код просто из головы. Не говоря уж о чтении (в т.ч. дизасма).
java писал(а):
В общем-то всё гораздо проще оказалось, есть плата адруино уно с краватью, только кварц перепаять, с 16 на 8, в програматоре залить восьмую и вставить в кравать вместо 168.
Ну вот, так и не дали форумчанам блеснуть своими навыками
COKPOWEHEU, не, я асм в целом помню, но в основном помнятся BREQ и BRNE, а остальные ветвления по флагам приходится подглядывать.... Ну не пишу я на асме уже давно... Иногда что то накалякать как вставку... Либо глянуть чужой код...
У АВРок все команды достаточно обоснованы. Особенности проистекают из структуры ядра и желания подстроиться под ЯВУ уже на уровне ассемблера (avrasm2).
и желания подстроиться под ЯВУ уже на уровне ассемблера
да, обилие команд чтобы абстрагироваться от железа. Их можно просто как макросы воспринимать..
Например, переход контроллером совершается не потому что меньше или больше, а по факту проверки флага sreg. Так как предыдущая команда его устанавливает или очищает.
Это как компромисс между машинным языком и человеческим))
Особенности проистекают из структуры ядра и желания подстроиться под ЯВУ уже на уровне ассемблера (avrasm2).
Если бы хотели подстроиться под ЯВУ, сделали бы косвенную адресацию. Вот у меня по адресу Z=0x0124 лежит объект, как обратиться к его полю? Никак - сначала прибавляем к Z смещение, потом обращаемся. Вот у меня на стеке выделено пять локальных переменных, как к ним обратиться? Снова никак - сначала загрузить в регистр SP, потом добавить смещение, и только потом обращаемся. Для сравнения, в risc-v регистр SP это просто РОН, и есть команды вроде lw reg, 4(sp), sw reg, -6(reg). В ARM вроде тоже что-то подобное есть.
BOB51 писал(а):
Такая "шпора" быстрее память освежает.
Только вот со шрифтами там довольно печально. Да и с дизайном тоже. Сравните.
Табличное чтение есть, переход ICALL , IJMP есть сложение/вычитание с индекс-регистрами (ADIW, SBIW) есть, Обмен регистровых пар MOVW есть. Чего ещё не хватает то? Разве что спец команды условного возврата как у I8080/Z80 ... Так их устроить не так уж и сложно. Быстродействие вполне позволяет. Насчет шрифтов и оформления в "шпоре" - это пдфка с *.bmp оригинала 90х годов. Переделывать леньки (пикушки у меня уже в splan7 отрисованы, а 51я и I8080/Z80 вообще вручную с карандашиком - тогда ещё с компами напряг был). И второе... "шпаргалки" не заменяют основной документации по системе команд и даташитам МК - это всего лишь возможность быстро "окинуть взглядом" имеющиеся в распоряжении ресурсы. (возможность выбора более удачного решения из "чуток подзабытого" при перерывах в работе с МК)
Последний раз редактировалось BOB51 Ср янв 29, 2025 14:48:13, всего редактировалось 2 раз(а).
Сейчас этот форум просматривают: Kontantin и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения