Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Спорить о вкусе устриц нужно с теми, кто их ел... Этот афоризм Жванецкого относится не только ко вкусовым предпочтениям.
1. Размерность переменных не является предметом рассмотрения ассемблера по одной очень простой причине - она ему не нужна для трансляции. Для ЯВУ нужна, а для АСМа - нет. Вы пытаетесь приписать АСМу не свойственные ему функции и на том основании делаете выводы о сущностях самого АСМа.
Но даже на разных языках человеческого общения есть разные объемы описания одних и тех же сущностей. Но никто при этом не берется утверждать, что слова в языке нет лишь потому, что язык не определяет в его смысле часть свойств, которые присутствуют в другом языке.
2. Контроль за размерностью в АСМе определяет линкер, патамушта единственной проблемой размерности от уровня ассемблера и ниже является определение абсолютных адресов. И не функция это среды, ибо определяются размерности ДИРЕКТИВАМИ АССЕМБЛЕРА, а среда лишь имеет возможность отображать то, что ей позволил АСМ.
Еще раз. АСМ в общем случае, является этапом компиляции из Си в бинарный код. И не надо пытаться сопоставлять эти языки по их влиянию на абстракции. Абстракции существуют независимо от инструментов для работы с ними.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Ее атомарность сильно зависит от архитектуры МК
я имел ввиду атомарность на уровне синтаксиса языка. в том смысле, что это неделимая языковая конструкция. поскольку ассемблер оперирует только с регистрами, понятие переменная ему чуждо именно по причине неатомарности работы с нею (в общем случае).
КРАМ писал(а):И при попытке "прибить гвоздями" пересекающиеся адреса переменных при явном определении расположения данных, в дело тут же вступит линкер, обматерив страдальца...
мне показалось, что это не в число плюсов, а в число минусов следует дописать. как в Си указатели - попытки наделить Си строгой проверкой типов указателей привела к появлению С++, но никак не улучшила Си. так и основное достоинство ассемблера заключается именно в вольнице работы с доступными ячейками памяти (и регистрами), и если эту вольницу ограничить, получится уже зародыш ЯВУ... я не уверен, что это достоинство АССЕМБЛЕРА. хотя привыкнуть можно ко всему, как и решать задачи можно всем
КРАМ писал(а):Спорить о вкусе устриц нужно с теми, кто их ел...
я ел много ассемблеров, но вот до микрочиповских руки не дошли :)) сомневаюсь, что там что-то сверхоригинальное на вкус :) тем более что с возрастом чувствительность вкусовых рецепторов притупляется...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804626#p3804626"]это неделимая языковая конструкция[/uquote] Если только ее не развалят через union и struct. :)
Но я говорил совершенно о другом.
Переменная как сущность это ИМЕНОВАННАЯ область оперативной памяти. Точка. Все остальное - это специфика языка.
Ассемблер рассматривает переменную именно так.
Я не собираюсь обсуждать те или иные достоинства Си по сравнению с ассемблером. Мне они известны. Как и недостатки первого в части встраиваемых архитектур.

[uquote="ARV",url="/forum/viewtopic.php?p=3804626#p3804626"]я ел много ассемблеров, но ...[/uquote]
Вы меня и тут не поняли. Дело не в том, что Вы их ели, а в том, НА КАКОМ УРОВНЕ Вы это делали. Я не зря привел историю с микрочиповским ассемблером. То, о чем я написал существует лет так 20, если не больше. Сильно подозреваю, что и другие ассемблеры запилили не хуже...
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Переменная как сущность это ИМЕНОВАННАЯ область оперативной памяти.
не совсем так - это, скажем, "исконный" смысл переменной. но в современном программировании это уже абстракция куда более высокого уровня, единственный корректный смысл которой - хранение данных. большинство ЯВУ в той или иной мере приближается к этому уровню... но не ассемблер - тут, естественно, вы абсолютно правы: для ассемблера переменная - это область памяти. но при этом ассемблер не оперирует этими областями, как чем-то атомарным, т.е. целым, как это делают ЯВУ. о чем я и говорил.

переменная в ассемблере - всего лишь очередной алиас, псевдоним метки. и тот факт, что линкер может следить за ними, ничего в сущности не меняет.
КРАМ писал(а):что и другие ассемблеры запилили не хуже...
ну да, когда-то давно мне попадалась в руки книжка "ООП на ассемблере" - выкинул, почти не читая :))) наделение ассемблера всеми этими "высокоуровневыми" наворотами, имхо (подчеркиваю - это моё личное мнение), ничего хорошего не делает: уровень абстракции ассемблера все равно остается слишком низким, чтобы облегчать программирование так, как это делают ЯВУ, но при этом заметно усложняют синтаксис, делая его отнюдь не таким простым, как изначально предполагалось (мнемоническая замена бинарных опкодов).

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ассемблер у АВРок и ПИКовых таки "немного отличается".
Основной разницей идут директивы распределения областей ОЗУ.
Второй пункт разницы - Регистр-аккумуляторы, с возможностью отображения на ОЗУ (аналогия только у ПИК24 вроде появляется).
Третий - линейная область ОЗУ без "дополнительных особенностей" (за пределами РСФ).
Атмел (до поглощения микрощипом) ближе к кейловскому стилю ассемблер подгонял.
По крайней мере "именованной областью оперативной памяти" может являться любой из регистров R0-R31...(они же и аккумуляторы)...
А также и любой из РСФ (но тут и у ПИКов аналогично сделано).
8)
Кстати...
Главное отличие ПИКового ассемблера - без дополнительного скрипта линкера для каждого конкретного кристалла он работать не будет (как и без линкера как компонента компилятора).
Такова уж особенность - по крайней мере у "среднемладшей".
Атмел вообще ушел от линкера (как для АВР, так и для mcs51)...
Что лучше/что хуже - в принципе и с тем и с другим работать вполне комфортно, разве что конспект для быстрой "перепрыжки" держать под руками надо (с "заметками о ....").
:beer:
Последний раз редактировалось BOB51 Вт мар 10, 2020 11:39:29, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804666#p3804666"]это, скажем, "исконный" смысл переменной. но в современном программировании это уже абстракция куда более высокого уровня[/uquote]
Коллега Алексей не обсуждал отклонения от "исконного смысла" в ЯВУ. Речь шла лишь о том, что в АСМе ЕСТЬ ПЕРЕМЕННЫЕ. И более ничего.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если "переменная" как "ячейка с данными, кои могут изменяться в процессе исполнения программы"
то тогда еще можно принять.
:roll:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804666#p3804666"]когда-то давно мне попадалась в руки книжка "ООП на ассемблере" - выкинул[/uquote]
Дело в том, что у разных людей разное базовое образование и разные специальности. А программирование, как техническое умение, стоит в эмбеде обособлено.
То есть подходы к абстракциям языка у разных специалистов очень разные. Типичная рекомендация классического программиста - писать абсолютно переносимый код, что требует отказаться вообще от всех аппаратных фич контроллеров, включая УАРТы и И2Ц напополам с эСПиАй. То есть свои навыки с мейнфреймов они тупо переносят на эмбед. Глупость невероятная. Полное непонимание внутреннего содержания абстракций, которыми они оперируют. Весь код нижнего уровня в универсальных машинах является узко специальным и никуда не переносимым. Это и дает переносимость верхнего уровня путем отказа от ряда аппаратных фич, которые не удалось корректно абстрагировать. Для универсальных машин - терпимо. Для встраиваемых систем - категорически нет.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Речь шла лишь о том, что в АСМе ЕСТЬ ПЕРЕМЕННЫЕ. И более ничего.
чтобы говорить о чем-то, что есть или чего нет, надо определиться с терминологией. с моей точки зрения переменных в ассемблере быть не может по определению, поскольку это абстракция более высокого уровня, чем сам язык.
"область памяти", на которую вы ссылаетесь, не может быть переменной, поскольку невозможно выполнить манипуляцию данными, находящимися в ней средствами ассемблера. иначе говоря, термин "переменная" притянут за уши, и очень сильно притянут, о чем я и говорю. ассемблер в лучшем случае манипулирует АДРЕСОМ НАЧАЛА области памяти и её ДЛИНОЙ - а это совсем не то же самое, как манипуляция ДАННЫМИ, хранящимися в ПЕРЕМЕННОЙ.

даже префикс REP в ассемблере x86 не создает полноценный аналог ассемблерных манипуляций с данными, поскольку реализует лишь крайне ограниченный набор этих манипуляций...
КРАМ писал(а):То есть свои навыки с мейнфреймов они тупо переносят на эмбед. Глупость невероятная.
категорически согласен! и ПЕРЕМЕННАЯ в ассемблере, как сущность, как раз является примером такого поведения.

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=3804675#p3804675"]Если "переменная" как "ячейка с данными"[/uquote]
Переменная В ОБЩЕМ СЛУЧАЕ - это ОБЛАСТЬ памяти, а не ячейка. Эта область не может быть меньше минимально адресуемой разрядности. И все.
Способы обработки данных в инструкциях никак не ограничивают разрядность переменных. Факт неатомарной обработки области памяти не отменяет сущности переменной. Ее целостность поддерживается данной ей программистом алгоритмической ролью. Если алгоритм полагает обработку 4 байт как флоата, то значит эта переменная и есть флоат. А сколько для этой обработки потребуется инструкций - не имеет значения.

Добавлено after 1 minute 53 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804680#p3804680"]чтобы говорить о чем-то, что есть или чего нет, надо определиться с терминологией[/uquote]
Вот я и предлагаю с ней определиться и не таскать НОРМЫ одного языка в другой. Термин и его нормирование - это РАЗНЫЕ ПОНЯТИЯ. И не надо их мешать в кучу.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Вот я и предлагаю с ней определиться и не таскать НОРМЫ одного языка в другой. Термин и его нормирование - это РАЗНЫЕ ПОНЯТИЯ. И не надо их мешать в кучу.
а почему тогда я не могу с вами согласиться? :)))
видимо потому, что вы перетаскиваете ТЕРМИН, наделяя его новым смыслом. в ассемблере есть понятия МЕТКА, ОБЛАСТЬ ДАННЫХ и т.п. - все поотдельности, и все они логично вписаны в концепцию самого ассемблера, как языка.

а вот ПЕРЕМЕННОЙ там нет и не было, потому что концептуально в это слово вкладывается гораздо бОльший смысл, который не реализован ассемблером.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804680#p3804680"]ПЕРЕМЕННАЯ в ассемблере, как сущность, как раз является примером такого поведения.[/uquote]
Это с какого перепуга? Рассматривая алгоритм для ассемблерной реализации кода я не вношу ограничений в ФИЗИЧЕСКУЮ реализацию устройства. А методы классического программирования этим грешат.
Да, в ассемблерном коде отсутствуют многие ограничения, позволяющие не совершать ошибки. Но, во первых, причем тут терминология, которая НА СВОЕМ УРОВНЕ позволяет систематизировать написание кода, что само по себе уменьшает число ошибок? А во вторых, никто не препятствует использовать соглашения Си в АСМе с целью улучшения читабельности и повышению эффективности исполняемого бинарника. Тот факт, что нет автоматики реализуемой компилятором Си, не говорит о том, что абстракции Си не могут быть применены в АСМе. Включая сопоставимую терминологию.
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ассемблер оперирует как с областью памяти, так и с ячейками вплоть до отдельных битов.
Причем не всегда это область памяти.
Частенько и область регистров (в том числе РСФ). Хотя... оные вроде тоже "специфическая оперативная память"...
Флаг-бит в общем случае также можно назвать "именованной областью памяти"...
8)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804684#p3804684"]видимо потому, что вы перетаскиваете ТЕРМИН, наделяя его новым смыслом.[/uquote]
Каким еще новым? Самым что ни на есть классическим.
И причем тут ОБЛАСТЬ данных АСМа? Мы сейчас говорим не об области данных, а о внутреннем разбиении этой области на сущности, которые с точностью до неразличимости являются переменными.
И я не намерен спорить с адептом чего бы то ни было. Ибо ЛЮБОЙ адепт - это перекошенное сознание.

Добавлено after 3 minutes 30 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3804686#p3804686"]вплоть до отдельных битов.
Причем не всегда это область памяти.[/uquote]
Всегда область памяти. Причем оперативной. И никогда не оперирует битами, поскольку они не адресуемы нативно. Ну за редким исключением типа bit banding и то криво.
Мы говорим о переменных, а не вообще о числах, которые могут быть константами.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Но, во первых, причем тут терминология, которая НА СВОЕМ УРОВНЕ позволяет систематизировать написание кода, что само по себе уменьшает число ошибок? А во вторых, никто не препятствует использовать соглашения Си в АСМе с целью улучшения читабельности и повышению эффективности исполняемого бинарника. Тот факт, что нет автоматики реализуемой компилятором Си, не говорит о том, что абстракции Си не могут быть применены в АСМе. Включая сопоставимую терминологию.
как и ранее, я снова выскажу своё личное мнение.

терминология для того и придумана, чтобы упростить понимание и общение. язык программирования тоже придуман для того, чтобы обеспечить разных людей набором терминов и правил, позволяющих понимать друг друга ОДИНАКОВО.

именно поэтому свободное манипулирование УСТОЯВШЕЙСЯ терминологией вносит путаницу.

во всех ЯВУ, где существует понятие ПЕРЕМЕННАЯ (есть вообще ЯВУ, где такое понятие не существует?), это понятие несет ОДИН И ТОТ ЖЕ смысл: хранилище данных. и с этим хранилищем ВСЕГДА имеется набор "типичных" манипуляций, как то (минимум) присваивание, извлечение, сравнение и т.п., поддерживаемых СРЕДСТВАМИ ЯВУ. таким образом, понятие удачно вписано в концепцию.

в ассемблере НЕТ ничего подобного.

конечно, вы можете выступить инноватором, и внести в устоявшееся в ассемблерах положение дел новое - концепцию ПЕРЕМЕННОЙ. но, поскольку средств поддержки этого понятия в ассемблерах нет, вы будете вынуждены ИЗМЕНИТЬ СМЫСЛ ТЕРМИНА, что вам и приходится делать.

естественно, с этого момента я и вы начинаем говорить на разных языках - у вас своя новаторская терминология, у меня своя традиционная.

хорошо ли это? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вот тут и ... понеслось...
8)
Эта "перепалка" о сущностях более уместна в пределах моей "сборной солянки"
где собралась смесь из проектов под ассемблером для mcs51, avr, pic и Си/
Си++ для радуиноподобных...
:wink:

Ну да, все регистры РСФ это ОПЕРАТИВНАЯ ПАМЯТЬ?
включая и аппаратно - зависимые ресурсы?
МК ведь не только ядро, там и моножество подлых АППАРАТНЫХ модулей запихнуто.
:roll:
Последний раз редактировалось BOB51 Вт мар 10, 2020 12:17:52, всего редактировалось 1 раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):И никогда не оперирует битами, поскольку они не адресуемы нативно.
never say never :)))
нативное манипулирование битами (именно с индивидуальной адресацией) реализовано было давным давно в ассемблере MCS51 и еще ряда других "древностей". и вот ни капельки не криво.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ЭТО НЕ ТЕМА АССЕМБЛЕРА ДЛЯ АВР!!!
ЭТО МОЙ РАЗДЕЛ!!!
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
ФЫРШШШ!!!
:music:
:beer:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3804692#p3804692"]и с этим хранилищем ВСЕГДА имеется набор "типичных" манипуляций, как то (минимум) присваивание, извлечение, сравнение и т.п., поддерживаемых СРЕДСТВАМИ ЯВУ. таким образом, понятие удачно вписано в концепцию.[/uquote]
Вы не поверите, но АСМ имеет ровно такие же "типичные" манипуляции. Только синтаксис их немного иной. Но разве в разных ЯВУ синтаксис не отличается?
И почему тогда я не страдаю от непонимания моей якобы маргинальной (новаторской) терминологии моими коллегами, которые влет понимают написанное мною на АСме, а я влет понимаю написанное ими на Си?
Может быть потому, что внутренняя логика моего АСМ кода ничем не противоречит сущностям Си и элементарно встраивается как часть общего кода для трансляции? :tea:
Рискну Вам заметить, что под видом устриц Вас потчевали подделкой из сурими... :wink: :tea:

Добавлено after 3 minutes 57 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804696#p3804696"]нативное манипулирование битами (именно с индивидуальной адресацией) реализовано было давным давно в ассемблере MCS51[/uquote]
Даладна... :))) :))) :)))
Я начинаю сомневаться в Ваших кондициях... То есть Вы утверждаете, что в MCS51 дешифратор адреса сделан на каждый бит? :facepalm: Причем тут АСМ? Если инструкция реализует за несколько циклов то, что будет имитировать адресацию битов, причем тут нативность? Разве дело в формальном количестве инструкций? Разве в MCS51 есть однобитная арифметика? Вы вообще о чем?
Друг Кота
Аватара пользователя
Сообщения: 15791
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Именно так - НА КАЖДЫЙ БИТ.
Причем половина тех битов в области СОЗУ, а половина в области РСФ!
:twisted:
Помимо прочего...
MCS51 ЕДИНСТВЕННЫЙ МК, в котором используется именно БИТОВЫЙ АККУМУЛЯТОР и выполняются операции с отдельными битами!
(специально выделенными для того командами).
8)
ORL C,bit
ANL C,bit
MOV bit,C
MOV C,bit
CPL bit
CLR bit
CPL C
CLR C
SETB bit
SETB C
ORL C,/bit
ANL C,/bit
Флаг С в вышеперечисленном выполняет функционал битового аккумулятора.
(Воть польза от моих "шпор" :wink: ).
8)
Ответить

Вернуться в «AVR»