Обсуждаем контроллеры компании Atmel.
Ответить

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

Вт мар 10, 2020 11:47:36

когда-то давно мне попадалась в руки книжка "ООП на ассемблере" - выкинул

Дело в том, что у разных людей разное базовое образование и разные специальности. А программирование, как техническое умение, стоит в эмбеде обособлено.
То есть подходы к абстракциям языка у разных специалистов очень разные. Типичная рекомендация классического программиста - писать абсолютно переносимый код, что требует отказаться вообще от всех аппаратных фич контроллеров, включая УАРТы и И2Ц напополам с эСПиАй. То есть свои навыки с мейнфреймов они тупо переносят на эмбед. Глупость невероятная. Полное непонимание внутреннего содержания абстракций, которыми они оперируют. Весь код нижнего уровня в универсальных машинах является узко специальным и никуда не переносимым. Это и дает переносимость верхнего уровня путем отказа от ряда аппаратных фич, которые не удалось корректно абстрагировать. Для универсальных машин - терпимо. Для встраиваемых систем - категорически нет.

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

Вт мар 10, 2020 11:50:27

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

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

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

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

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

Вт мар 10, 2020 11:55:54

Если "переменная" как "ячейка с данными"

Переменная В ОБЩЕМ СЛУЧАЕ - это ОБЛАСТЬ памяти, а не ячейка. Эта область не может быть меньше минимально адресуемой разрядности. И все.
Способы обработки данных в инструкциях никак не ограничивают разрядность переменных. Факт неатомарной обработки области памяти не отменяет сущности переменной. Ее целостность поддерживается данной ей программистом алгоритмической ролью. Если алгоритм полагает обработку 4 байт как флоата, то значит эта переменная и есть флоат. А сколько для этой обработки потребуется инструкций - не имеет значения.

Добавлено after 1 minute 53 seconds:
чтобы говорить о чем-то, что есть или чего нет, надо определиться с терминологией

Вот я и предлагаю с ней определиться и не таскать НОРМЫ одного языка в другой. Термин и его нормирование - это РАЗНЫЕ ПОНЯТИЯ. И не надо их мешать в кучу.

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

Вт мар 10, 2020 12:00:59

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

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

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

Вт мар 10, 2020 12:03:02

ПЕРЕМЕННАЯ в ассемблере, как сущность, как раз является примером такого поведения.

Это с какого перепуга? Рассматривая алгоритм для ассемблерной реализации кода я не вношу ограничений в ФИЗИЧЕСКУЮ реализацию устройства. А методы классического программирования этим грешат.
Да, в ассемблерном коде отсутствуют многие ограничения, позволяющие не совершать ошибки. Но, во первых, причем тут терминология, которая НА СВОЕМ УРОВНЕ позволяет систематизировать написание кода, что само по себе уменьшает число ошибок? А во вторых, никто не препятствует использовать соглашения Си в АСМе с целью улучшения читабельности и повышению эффективности исполняемого бинарника. Тот факт, что нет автоматики реализуемой компилятором Си, не говорит о том, что абстракции Си не могут быть применены в АСМе. Включая сопоставимую терминологию.

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

Вт мар 10, 2020 12:04:09

Ассемблер оперирует как с областью памяти, так и с ячейками вплоть до отдельных битов.
Причем не всегда это область памяти.
Частенько и область регистров (в том числе РСФ). Хотя... оные вроде тоже "специфическая оперативная память"...
Флаг-бит в общем случае также можно назвать "именованной областью памяти"...
8)

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

Вт мар 10, 2020 12:10:07

видимо потому, что вы перетаскиваете ТЕРМИН, наделяя его новым смыслом.

Каким еще новым? Самым что ни на есть классическим.
И причем тут ОБЛАСТЬ данных АСМа? Мы сейчас говорим не об области данных, а о внутреннем разбиении этой области на сущности, которые с точностью до неразличимости являются переменными.
И я не намерен спорить с адептом чего бы то ни было. Ибо ЛЮБОЙ адепт - это перекошенное сознание.

Добавлено after 3 minutes 30 seconds:
вплоть до отдельных битов.
Причем не всегда это область памяти.

Всегда область памяти. Причем оперативной. И никогда не оперирует битами, поскольку они не адресуемы нативно. Ну за редким исключением типа bit banding и то криво.
Мы говорим о переменных, а не вообще о числах, которые могут быть константами.

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

Вт мар 10, 2020 12:13:33

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

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

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

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

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

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

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

хорошо ли это? ;)

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

Вт мар 10, 2020 12:15:32

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

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

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

Вт мар 10, 2020 12:17:08

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

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

Вт мар 10, 2020 12:20:49

ЭТО НЕ ТЕМА АССЕМБЛЕРА ДЛЯ АВР!!!
ЭТО МОЙ РАЗДЕЛ!!!
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
ФЫРШШШ!!!
:music:
:beer:

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

Вт мар 10, 2020 12:26:34

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

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

Добавлено after 3 minutes 57 seconds:
нативное манипулирование битами (именно с индивидуальной адресацией) реализовано было давным давно в ассемблере MCS51

Даладна... :))) :))) :)))
Я начинаю сомневаться в Ваших кондициях... То есть Вы утверждаете, что в MCS51 дешифратор адреса сделан на каждый бит? :facepalm: Причем тут АСМ? Если инструкция реализует за несколько циклов то, что будет имитировать адресацию битов, причем тут нативность? Разве дело в формальном количестве инструкций? Разве в MCS51 есть однобитная арифметика? Вы вообще о чем?

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

Вт мар 10, 2020 12:28:23

Именно так - НА КАЖДЫЙ БИТ.
Причем половина тех битов в области СОЗУ, а половина в области РСФ!
: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)

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

Вт мар 10, 2020 12:36:25

Я последний раз писал для MCS48 еще в 90 году. Поэтому возможно что то забыл... Или в 48-м этого не было.
Но дешифратор на биты - это какой то кошмар топологии... Вероятно поэтому про него сразу забыли впредь.
Сейчас нет времени вспомнить...
ЗЫ. Какая это нахрен битовая арифметика? Это обычная аппаратная маска с битом переноса. Такое даже сейчас есть во многих платформах, но это не значит, что можно физически адресовать каждый бит.

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

Вт мар 10, 2020 12:44:06

Sorry
Может в данном топике дискутирующим будет интересен для рассмотрения и обсуждения такой проект ассемблера для AVR. (не мой проект)
Форт-ассемблер для AVR

P.S. Корни этого ассемблера протянулись из одного инструментария Среда для программирования и внутрисхемной отладки AVR и др

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

Вт мар 10, 2020 12:46:52

КРАМ
Нет, не забыли.
У АВРок также имеется битовый "рудимент", причем весьма удобный - флаг Т в SREG.
А также сопровождающие работу с оным флагом команды
BLD Rd,b (MOV Rd.b,T)
BST Rr,b (MOV T,Rr.b)
ну и
BRBC s,re
BRBS s,re
CLT
SET
BRTS re
BRTC re
BCLR s
BSET s
где s это номер бита в SREG (для Т = 6)
Да и операции с битами минимум флаг - регистра (и еще там имеются - сходу не вспомнить, ибо довольно сложно-навороченно со свойствами, зависящими от размещения в адресном пространстве ОЗУ/РСФ)
8)

Ужшш. извините, но у 51й действительно битовая адресация.
В ассемблере для описания того специально выделенные директивы имеются:
DBIT <expr> - резервирование <expr> неинициализированных бит в битовом сегменте
<simbol> BIT <expr> - определение имени прямоадресуемого бита
BSEG [AT <expr>] - определение (начала) битовой секции.
И там не маска, а именно "битовый процессор" (то надо в документации копаться, чтоб цитатки представить).
:beer:
Последний раз редактировалось BOB51 Вт мар 10, 2020 13:03:47, всего редактировалось 1 раз.

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

Вт мар 10, 2020 12:57:50

включая и аппаратно - зависимые ресурсы?
МК ведь не только ядро, там и моножество подлых АППАРАТНЫХ модулей запихнуто.

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

Добавлено after 5 minutes 9 seconds:
КРАМ
Нет, не забыли.
У АВРок также имеется битовый "рудимент"

Вопрос только в том, как адресуется этот самый s... :)
Номер бита в команде не может говорить об адресуемости бита. Этот номер бита сам должен быть переменной-указателем.

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

Вт мар 10, 2020 13:05:31

Номер бита не переменная, а константа.
А вот сам бит - это может быть и переменная.
8)

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

Вт мар 10, 2020 13:19:01

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

то есть ровно то, о чем я и говорю: в ассемблере нет реализации "стандартной" поддержки "переменных". тот факт, что вы можете написать АЛГОРИТМ (подпрограмму), которая выполнит эту задачу, отнюдь не делает "обычное" понятие ПЕРЕМЕННОЙ частью ЯЗЫКА ассемблера!

КРАМ писал(а):внутренняя логика моего АСМ кода ничем не противоречит сущностям Си и элементарно встраивается как часть общего кода для трансляции?
при чем тут сущности Си? а сущностям питона или Алгола с Фортраном противоречит? встраивание "сущностей" обеспечивается простым соглашением о передаче параметров, или "интерфейсом", за которым может быть что угодно. и ни о какой ПОДДЕРЖКЕ на уровне ЯЗЫКА это не говорит - это уровень поддержки "программиста".

КРАМ писал(а):Разве в MCS51 есть однобитная арифметика? Вы вообще о чем?
на уровне мнемоник ассемблера - да, есть.
КРАМ писал(а):это не значит, что можно физически адресовать каждый бит
не каждый, а только любой из выделенной под это области. разве это что-то меняет В АССЕМБЛЕРЕ? грубо говоря, битоадресуемая область ОЗУ всего 32 байта (не помню, сколько точно).

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

и свойство копируемости данных - это базовое свойство любой переменной, встроенное В ЯЗЫК ПРОГРАММИРОВАНИЯ, равно как и свойство "замещения данных" в ней (с ограничениями в виде побочных ветвей).

не называть же, в самом деле, переменными ячейки ОЗУ и регистры ядра микроконтроллера/процессора?! данные не ограничиваются по размерности только нативными для платформы величинами, а переменные обязаны уметь "вмещать" в себя (со всеми остальными свойствами) любые данные.

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

Вт мар 10, 2020 13:31:46

Номер бита не переменная, а константа.
А вот сам бит - это может быть и переменная.
8)

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