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

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

Сообщение BOB51 »

...БУКВОЕДЫ...
:beer:
Последний раз редактировалось BOB51 Вт мар 10, 2020 13:52:45, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25518
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804729#p3804729"]не перешлет команда MOV 18 байт, т.е. строку, например![/uquote]
А кто Вам сказал, что признаком присвоения будет ОДНА КОМАНДА? Что за бред?
То есть если я реализую НА СИ извлечение корня и при этом использую целую функцию, то аргумент и сама функция не будут переменными? :))) :))) :)))
Вы даже не пытаетесь понять логику оппонента продолжая трясти свое дерево...
:facepalm:

Добавлено after 3 minutes 46 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804729#p3804729"]опять логическая яма... команда МОV в ассемблере создает КОПИЮ данных - и что?[/uquote]
А ничего. Команда MOV не отрицает возможности операций с ОРИГИНАЛОМ. В случае с ЕЕПРОМом оригинал вообще не доступен для системы команд.

Добавлено after 6 minutes 6 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804729#p3804729"]это ВАМ так хочется. косвенная адресация вообще поначалу была экзотикой.[/uquote]
По какому еще "началу"? :))) Помнится в PDP11 от приснопамятной DEC было аж 8 только основных типов адресаций, не считая специфики РОНов, которые меняли ее до неузнаваемости...
Это был 80-ый год прошлого века. :wink:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

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

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804757#p3804757"]вам не кажется, что в первом высказывании вы уравниваете встроенную в язык БАЗОВУЮ операцию и СОЗДАННУЮ ПРОГРАММИСТОМ ПОДПРОГРАММУ, а во втором перечеркиваете эту эквивалентность?[/uquote]
Эквивалентность ЧЕГО?
Основой понятия переменной является АДРЕСНОЕ ПРОСТРАНСТВО в котором эта переменная ОДНОЗНАЧНО определена и доступна в своем ОРИГИНАЛЬНОМ значении хоть для одной операции, хоть для десятка тысяч. Проблема с ЕЕПРОМом не в том, что код содержит более одной инструкции, а в том, что оный ЕЕПРОМ в принципе не расположен в поле определения переменных. Но можно пользоваться и копией, назвав ее подобающим образом. Правда это не будет реальный ЕЕПРОМ. И в этом вся квинт-эссенция...
Ровно как с адресацией бит, которой, как оказалось, нет и не было...

ЗЫ. Дело не в том, на чем держится мир, а в понимании тех сущностей, которые Вы рекламируете, НИЖЕ уровня их абстрагирования. Это очень важно при использовании абстракций. Иначе ветер будет дуть, потому что качаются деревья....

Добавлено after 9 minutes 55 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804757#p3804757"]с той же легкостью, с которой вы используете оператор присваивания[/uquote]
Мы не обсуждали критерии "легкости", как и не обсуждали проблему АСМ вс Си. Это Вы пытаетесь свести все к этому демагогическому выяснению. Мы говорим о переменной, как термине и сущности в АСМе.
Поскольку это абстракция, то она может быть использована в АСМе , как и в Си.
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Столько писнИ про названия. А ведь слегка продвинутому ассемблерщику до езды, переменная или нет. Хотя... электронам тоже всё равно, какого цвета изоляция на проводе. Есть дельта U,- поехали. Однакож коричневый- фаза, красный- плюс. Перепутай- работать будет, только на руку получишь фазу от желто- зелёного провода.
Я всё-всё узнAю и стану профессором.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25518
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="dgrett",url="/forum/viewtopic.php?p=3804783#p3804783"]до езды[/uquote]
Кому "до езды", то ни разу не продвинут... :wink: :tea:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Мы говорим о переменной, как термине и сущности в АСМе.
переменная, как термин и сущность не существует в языке программирования, называемом ассемблр.

любая абстракция имеет область применимости. абстракция "переменная", существующая на уровне ЯВУ, при нисхождении к уровню ассемблера превращается в абсолютно не абстрактную "область памяти". ассемблеру не требуется "переменная", чтобы прекрасно существовать уже лет 60, пожалуй...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804789#p3804789"]переменная, как термин и сущность не существует[/uquote]
Еще раз 20 повторите эту догму. Будет примерно на 1 фемптопроцент убедительнее...
Правда товарисчи из Микрочипа ничего об этом, вероятно, не знают и потому в MPLAB X обозвали вкладку контроля за темчегонет как Variables :)))

Изображение
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

возвращаясь к упомянутой ранее книжке про ООП в ассемблере, поясню своё мнение несколько иным примером - из области ООП.

в ООП мы уходим от понятия переменной к понятию экземпляр класса, соответственно от понятия тип переменной к понятию класса. на уровне языка для манипуляций с этими абстракциями имеются соответствующие средства. но на уровне ассемблера экземпляр класса - не более чем область памяти, в начале которой есть VMT, а потом обычные данные. при работе с этой областью памяти в ассемблерном модуле мы же не оперируем понятием "экземпляр класса"!? в ассемблере нет для этого соответствующих понятий, мы обходимся тем, что в ассемблере есть: байты и мнемоники для работы с ними. даже понятие структуры в ассемблере достаточно туманно...

надеюсь, теперь моя позиция более четко прорисована? ну нет в ассемблере некоторых понятий, и что? не стоит их насильственно туда втюхивать!

Добавлено after 2 minutes 37 seconds:
КРАМ писал(а):обозвали вкладку контроля за темчегонет как Variables
мда... т.е. если на заборе написано "дрова", то за забором они обязательно лежат? аргумент, чо...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Не, забор сам по себе дрова :)
Я всё-всё узнAю и стану профессором.
Друг Кота
Аватара пользователя
Сообщения: 25518
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804800#p3804800"]если на заборе написано...[/uquote]
Тут, видите ли зависит от того, кто написал на заборе, что написал и с какой целью...
Так ведь и с УК можно поспорить... :tea:
Однако, как выяснилось, я не столь уж маргинален... А если учесть практику моей профессиональной деятельности, то даже и не оригинален.

На том и закончим этот беспредметный спор, где Вы, КАК ОБЫЧНО, не желаете слушать и понимать собеседника, а тупо трандычите один раз заученное, как пономарь... :dont_know:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Тут, видите ли зависит от того, кто написал на заборе, что написал и с какой целью...
просто эти ваши Variables - проявление IDE, а не языка программирования. я вполне понимаю логику разработчиков IDE, которые не плодят сущности без надобности и помещают в окно что-то "близкое по смыслу". тем более что наверняка сама по себе IDE предназначена именно для отладки ЯВУ, с возможностью просмотра ассемблерных мнемоник... как это и принято в IDE. и тут все логично - смотрим на переменные из ЯВУ, а в ассемблере они всего лишь байты в ОЗУ.
КРАМ писал(а):Вы, КАК ОБЫЧНО, не желаете слушать и понимать собеседника, а тупо трандычите один раз заученное, как пономарь...
неужели вы действуете иначе? смотрите, сколько аргументов я вам привел - даже ООП! и все только для того, чтобы доказать свою ТЗ. а от вас, увы, услышал два варианта доказательств "я так считаю" и "потому что я так сказал" :)))

спор мы можем окончить... не вопрос. только уверен, что ваши ассемблерные "переменные" так и невозможно присвоить командами ассемблера (команды составляют язык, и речь о них, а не о подпрограммах-функциях), не говоря уже о том, чтобы их складывать и/или перемножать (разумеется, я не о "переменных" нативного размера). и как бы вы ни пыжились, все останется так, как было 60 лет до этого: в ассемблере только области памяти, а не переменные, и метки, обозначающие их начало.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804817#p3804817"]услышал два варианта доказательств "я так считаю" и "потому что я так сказал"[/uquote]
Невозможно что либо объяснить человеку, который слышит и слушает только себя. Поэтому я и завершил дебаты. Вы продолжаете говорить о чем то о своем, СОВЕРШЕННО ИЗ ДРУГОЙ ОПЕРЫ. Ну и ладненько. Это Ваш путь и Ваш выбор.

Добавлено after 6 minutes 28 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3804817#p3804817"]а в ассемблере они всего лишь байты в ОЗУ.[/uquote]
Нет, в ассемблере они имеют ровно такую же размерность и отображение, как и в Си. Сколько выделили в памяти, такая у них и размерность. Можно даже настроить (уже вручную, естественно) и специальные типы для отображения, например, fractional со стандартным и нестандартным расположением точки, а так же знаковостью.
Но это в догон. Чисто для информации. Для тех, кто ел устрицы. Из минтая. :wink:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

истинным поклонникам ассемблера снова порекомендую обратить свой взор на avr-as (gnu-as) с его мощной (хоть и несколько устаревшей) системой макросов. не жалкой пародии а-ля "препроцессор Си" из avrasm2, а настоящих макросов, которые РЕАЛЬНО помогают писать УДОБНО и ЛЕГЧЕ.

я уже писал в этой теме, но напомню снова.

давно мне потребовалось сделать для ассемблера AVR некое подобие команд ENTER и LEAVE из системы команд i80x86. ENTER сохраняет в стек все "рабочие" регистры, а LEAVE, соответственно, восстанавливает их из стека - незаменимо для обработчиков прерывания.

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

макрос ENTER принимал в произвольном порядке до 32 регистров в качестве параметров, которые и сохранял в стек. а макрос LEAVE без параметров (!!!) восстанавливал в нужном порядке эти регистры из стека. единственное ограничение - эти макросы не могли быть вложенными, но кому придет в голову внутри обработчика прерывания дважды сохранять рабочие регистры?!

в итоге обработчик прерываний выглядит примерно так:

Код: Выделить всё

int_timer_overflow:
   ENTER  r0, r2, r16
   ...
   LEAVE
   reti
слово состояния, само собой, сохранялось в стеке автоматом

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

вот это на самом деле полезные фичи, избавляющие от копипастинга "входа/выхода в/из обработчика", и, главное, избавляющих от необходимости следить за порядком восстановления их из стека.

вот наличие системы макросов, которые позволяют все это сделать, и делают ассемблер по-настоящему удобным, а не все эти "переменные" и т.п... это баловство одно.

Добавлено after 8 minutes 6 seconds:
КРАМ писал(а):Невозможно что либо объяснить человеку, который слышит и слушает только себя. Поэтому я и завершил дебаты.
КРАМ, вам невозможно объяснить что-либо ровно по этой самой причине. тем более что вы даже не снисходите до того, чтобы как-то доказывать свою точку зрения. догматизм в эталонном виде.
КРАМ писал(а):Нет, в ассемблере они имеют ровно такую же размерность и отображение, как и в Си
да ну?! то есть если у вас в Си объявлена переменная extern long var1; а в ассемблерном модуле вы напишите public var1: .byte 2 (или как там у вас принято по синтаксису), это будет одно и то же? или у вас настолько продвинутый ассемблер, что умеет находить связь с сишными заголовками и проверять типы и размер "областей памяти"?
КРАМ писал(а):Для тех, кто ел устрицы. Из минтая.
не знаю, из какого говна устрицы ели вы, но никогда "можно" не доказывало, что "нужно". и вряд ли когда такое будет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3804826#p3804826"]да ну?! то есть если у вас в Си объявлена переменная extern long var1; а в ассемблерном модуле вы напишите public var1: .byte 2 (или как там у вас принято по синтаксису), это будет одно и то же?[/uquote]
Да, если в Си будет uint32_t, а в АСМе .space 4, то в отображении будет 32-битная переменная. Знаковость, естественно, АСМу не ведома, но ее можно настроить в среде вручную.
Это в АСМ30/АСМ16. В MPASM аналогично, но синтаксис res 4.
Строго говоря, при компиляции из Си в АСМ, при отсутствии в Си экзотических типов, код получается идентичный прямому написанию на АСМе - чисто шаблонная трансляция. От того в Си и применяется оптимизация, что суть и есть костыль. И после приличной оптимизации уже никакой обфускации не нужно - она неотделимым бонусом идет к про версии компиля... :music:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Вы не заметили, что я для Си говорил о long, а для асма о 2 байтах.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3804798#p3804798"]товарисчи из Микрочипа ничего об этом, вероятно, не знают и потому в MPLAB X обозвали вкладку контроля за темчегонет как Variables[/uquote]
Боюсь спросить, а вкладка имеет отношение к АССЕМБЛЕРУ, или это всё же надстройка IDE для удобства программирования на ассемблере? Кстати, может подскажете где в ассемблере есть КОМАНДА присвоения переменной в памяти значения, или может команда сложения двух ячеек/переменных? Если принять во внимание одно ограничение - что эти переменные находятся в регистрах то да, такие команды есть. Но с памятью на ассембере так не работают, чтобы сложить две переменные, находящиеся в памяти нужно реализовывать алгоритм из нескольких команд, задействуя регистры. При этом понятие "переменная" находится на уровень выше ассемблерного кода - в голове программиста. Для ассемблера же существует только такие понятия как регистр и массив памяти с побайтовым(пословным) доступом.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15663
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ладно...
Возьмите тогда за основу кейловское описание компилятора ассемблерадля mcs51 (ни ПИКам ни АВРкам!)
там и линкер и библиотекарь и макросы....
В упор я там в оглавлении переменных не наблюдаю...
Есть раздел
expressions and OPERATORS, есть метки, операторы, директивы, комментарий...
А "переменная" в составе мнемоники команды - это оператор или операнд.
Хотя в принципе в комментарии упрощенно мы чаще обобщенно пишем "переменная".
8)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

BOB51 писал(а):Хотя в принципе в комментарии упрощенно мы чаще обобщенно пишем "переменная".
в комментариях, как и на заборе, писать можно, что угодно

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

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

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

исходя из этой классификации в ассемблере нет переменных в "общем виде", хотя можно назвать таковыми элементарные регистры и байтовые ячейки ОЗУ, все-таки для этого изначально в ассемблере были приняты совершенно иные наименования.

главное, что вселяет в меня уверенность в моей правоте, это то, что моя классификация прекрасно укладывается в рамки любого языка программирвоания - от брайнфака до смоллтока! а значит, классификация моя не противоречива и логична. и ею можно объяснять многое непонятное, в т.ч. и в ассемблере. а вот ув.КРАМ страдает тем, что любые противоречия в собственных рассуждениях отметает, как его лично не интересующие.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение BOB51 »

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

variable <label>[=<expr>,....,<label>[=<expr>] ]

и звучит это как
"Директивой объявляются переменные, используемые в выражениях MPASM.
Директива VARIABLE определяет переменную, которая является функциональным аналогом SET.
Отличием является то, что в директиве VARIABLE не требуется указывать конкретные значения при объявлении.
...."

а в базовом ассемблере у АВР(mcs51) директива SET также мною была "загнана в ящик", так как имеет неудобства в работе с C51asm под MCS51. Посему ... не используемое "было задвинуто и позабыто" - но оное таки существует.

Так что все правы со СВОЕЙ ТОЧКИ ЗРЕНИЯ.
:beer:
Последний раз редактировалось BOB51 Вт мар 10, 2020 21:01:32, всего редактировалось 1 раз.
Ответить

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