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

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 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 (или как там у вас принято по синтаксису), это будет одно и то же? или у вас настолько продвинутый ассемблер, что умеет находить связь с сишными заголовками и проверять типы и размер "областей памяти"?
КРАМ писал(а):Для тех, кто ел устрицы. Из минтая.
не знаю, из какого говна устрицы ели вы, но никогда "можно" не доказывало, что "нужно". и вряд ли когда такое будет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 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 для удобства программирования на ассемблере? Кстати, может подскажете где в ассемблере есть КОМАНДА присвоения переменной в памяти значения, или может команда сложения двух ячеек/переменных? Если принять во внимание одно ограничение - что эти переменные находятся в регистрах то да, такие команды есть. Но с памятью на ассембере так не работают, чтобы сложить две переменные, находящиеся в памяти нужно реализовывать алгоритм из нескольких команд, задействуя регистры. При этом понятие "переменная" находится на уровень выше ассемблерного кода - в голове программиста. Для ассемблера же существует только такие понятия как регистр и массив памяти с побайтовым(пословным) доступом.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15788
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Сообщение ARV »

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

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

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

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

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

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15788
Зарегистрирован: Вт мар 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 раз.
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Alexeyslav писал(а):Это не трава, а тот же самый способ задания констант что и ваш. Только более безопасный. Ваша константа в инклуднике даже в таком виде является магической - это просто плохая практика написания кода, которая предрасполагает к ошибкам по невнимательности
Угу. Если это моя константа. Я же утверждаю, что так должны были сделать нормальные разработчики тех самых наборов описаний оборудования, которые мы включаем по .include для конкретного камня. А эти курили траву. :)

И вообще, на фига было обозначать биты их номерами? Сделали бы, как все нормальные люди, hex-маску, и не морочили головы народу. То есть, конечно, командам SBI/CBI, которые позволяют манипулировать отдельными битами регистров ввода-вывода, нужен именно номер бита, но кто мешал добавить псевдофункцию, допустим, BITNO, подобно LOW и HIGH для половинок слова. То есть, нормальные разработчики сделали бы примерно так

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

;--------------------------------------------
; Кусочек из содержимого 1200def.inc
.EQU   ACD     =0x80
.EQU   ACO     =0x20
.EQU   ACI     =0x10
.EQU   ACIE    =0x08

.EQU   ADIany  =0x00
.EQU   ADI10   =0x02
.EQU   ADI01   =0x03
;--------------------------------------------

И мы бы писали так:

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

.include <1200inc.def>
; мой код

; ...............

          LDI   R16,AD01 | ACD  ; запретим аналоговый компаратор и сделаем прерывания от него по переключению выхода компаратора из 0 в 1
          OUT   ACSR,R16

; .................

          CBI   ACSR,bitno(ACD)   ; включим аналоговый компаратор

; ..................

          SBI   ACSR,bitno(ACI)   ; Разрешим прерывания от аналогового компаратора.  


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

Мне бы пришлось писать эти псевдофункции для каждой команды SBI/CBI, но, учитывая, что эти команды применяются достаточно редко, это мелочи. Зато мне не пришлось бы набирать непосредственные операнды для команд LDI из дурацких сдвигов единиц или нулей на какое-то число разрядов, заданное символически, что встречается во много раз чаще, и каждый раз вызывает злобное раздражение.
Последний раз редактировалось afz Вт мар 10, 2020 21:10:06, всего редактировалось 1 раз.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Друг Кота
Аватара пользователя
Сообщения: 15788
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это особенности риск - упрощенной системы команд.
Для набора отсутствующего функционала используются макросы.
Заводим в них недостающие частоупотребимые микропрограммы и работаем.
8)
Касательно *.inc файлов - их также люди пишут.
Помимо прочего появляются модифицированные кристаллы а в применяемом пользователем конкретном компиляторе набор *.inc файлов ОСТАЕТСЯ СТАРЫЙ.
Учитесь редактировать эти файлы самостоятельно согласно даташита на конкретный кристалл!
:wink:
Использование набора команд и алгоритмов подразумевает опыт работы (и весьма полезные навыки при работе с разными МК и компиляторами).
Со временем никакого раздражения не наблюдается.
:beer:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

Добавлено after 9 minutes 40 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3804937#p3804937"]А "переменная" в составе мнемоники команды - это оператор или операнд.
Хотя в принципе в комментарии упрощенно мы чаще обобщенно пишем "переменная".[/uquote]
Значит все таки пишите... А раз пишите, то пользуетесь этой сущностью.
Нехорошо, батенька... Очень нехорошо...
Становитесь в угол за такой оппортунизм. :)))
Милостивые господа-законники на пустом месте. Вам не надоело гнать пургу? Или Вы и впрямь не в состоянии понять элементарное? Или коронавирус вас одолел до мозжечка? :facepalm:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Или Вы и впрямь не в состоянии понять элементарное?
за всех не поручучь, но за себя могу сказать: в состоянии.

только как же тебя понять, коли ты не говоришь ничего? © :)))

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

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

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

Мой уютный бложик... заходите!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 19100
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

КРАМ писал(а):Проблема с ЕЕПРОМом не в том, что код содержит более одной инструкции, а в том, что оный ЕЕПРОМ в принципе не расположен в поле определения переменных
а чем "именованная область" в ОЗУ отличается от "именованной области" в ЕЕПРОМе?
а абсолютно ни чем!
если ты утверждаешь, что в ОЗУ есть переменные, тогда переменные точно также есть в ЕЕПРОМе.
КРАМ писал(а):Но можно пользоваться и копией, назвав ее подобающим образом
если скопировал ты данные из ЕЕПРОМа в ОЗУ, то и там в AVR не сможешь ими пользоваться напрямую, так как ни сложить, ни вычесть и никакую другую операцию со своей мнимой "переменной" в ОЗУ ты сделать не сможешь, пока не скопируешь ее в регистр.
НЕТ в ассемблере переменных, а твоя "именованная область данных" всего лишь твоя умозрительная конструкция.
попробуй, как в Си, написать в ассемблере X + Y,
где X и Y - именованные области данных в ОЗУ.
и посмотри, что тебе ответит компилятор на твои "переменные" ...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Добавлено after 1 minute 50 seconds:
Starichok51 писал(а):то и там в AVR не сможешь ими пользоваться напрямую
и не только в AVR, а вообще в любом ассемблере (за небольшим исключением системы команд i80x86)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

BOB51 писал(а):Это особенности риск - упрощенной системы команд.
Нет, это особенности мышления отъявленного паскалянта, не видевшего ничего, кроме Паскаля на писюке. И не видевшего ни одного приличного макроассемблера. Да, под современные "большие" процессоры на асме особо не попрограммируешь - что под писюк, что под АРМ - и задачи для них, обычно, такие, что без языка высокого уровня не обойдешься, и требуется взаимодействие с большим количеством "чужого" софта - с операционкой, с библиотеками чужих программ и т.п. Соответственно, и ассемблеры для них не особо показательные. А вот на старых системах были шикарные макроассемблеры - что на Системе-360/370, что на PDP-11. Посмотрели бы, как это делается "по-взрослому", а потом и сочиняли асм для своего АВР...

И вообще, если на АВР-ке задача перестаёт влезать в 8-ю Мегу, пора задумываться о смене платформы. А перестанет влезать в 32-ю Мегу - однозначно надо переходить на что-то, вроде STM32. Собственно, не считая мелких тинек, единственное преимущество АВР-ок перед STM32 - это возможность 5-вольтового питания. В частности, возможность кормить их напрямую от литиевых аккумуляторов. STM-кам от 4.2 В свежезаряженного аккумулятора точно поплохеет, а для АВР-ок (особенно тех, которые с буквой А) это штатный режим.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

Сообщение ARV »

КРАМ писал(а):А что, собственно, это меняет
если по-вашему это не меняет ничего, то нет разницы вот вообще никакой и между разными языками программирования вообще - от ассемблера не отличается ни паскаль, ни Си, ни даже php... так? подумаешь, идеология языков разная - программист-то все равно один и тот же...

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

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3805217#p3805217"]если по-вашему это не меняет ничего, то нет разницы[/uquote]
У Вас отвратительная манера вести спор. Вы постоянно подменяете предмет обсуждения.
Разница между языками высокого уровня никакого отношения к разнице между ассемблером и ЯВУ не имеет. Потому что ассемблер не относится к ЯВУ, во первых, и потому что ассемблер является связующим звеном между ЯВУ и загружаемым кодом, во вторых. То есть ассемблер так или иначе должен сублимировать абстракции того ЯВУ с которым он взаимодействует.
Поскольку написание на ассемблере связано с рядом известных сложностей, программист вынужден применять методы и абстракции ЯВУ. Причем не важно какого. Скажем того, который ему ближе и который он использует чаще всего помимо ассемблера.
Без этого код полученный на ассемблере будет безобразным во всех отношениях, а реализация на нем задач чуть более сложных, чем условное "мигание светодиодом", будет вызывать значительные проблемы.
К тому же есть еще один аспект. Это миграция с платформы на платформу.
Если программист понимает логику взаимодействия системы команд МК с ЯВУ, переход на другую платформу не вызовет никаких сложностей - нужно будет лишь найти и понять аналогичную логику в этой другой.
И оная логика ВСЕГДА СУЩЕСТВУЕТ, ибо система команд МК (начиная с некоторых пор, естественно) всегда адаптирована под компиляторы ЯВУ.

[uquote="ARV",url="/forum/viewtopic.php?p=3805217#p3805217"]если у меня нет велосипеда, это не означает, что я не смогу[/uquote]
Для примитивных задач не означает, а для чуть более сложных - очень вероятно, что к финишу Вас привезут вперед ногами... :tea:

ЗЫ. Немного флуда.
Место, которое на мой взгляд занимает 16-битная платформа Микрочипа (PIC24/dsPIC33), весьма примечательно тем, что она, В СИЛУ ЛИНЕЙНОСТИ АРХИТЕКТУРЫ, с одной стороны и наличию большого количества очень "взрослых" особенностей этой архитектуры, позволяет быть учебным полигоном для генетических "железячников", которые и являются основным эшелоном АСМистов. Лично я понял как правильно писать на АСМе лишь после того, как начал заниматься этими МК.
И лишь потом я взглянул на свои прежние "нетленки" в восьмибитниках другим взглядом. И ужаснулся... :)))
Последний раз редактировалось КРАМ Ср мар 11, 2020 09:04:21, всего редактировалось 1 раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

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

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

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

Сообщение BOB51 »

НУ И ПОЦАРАПС УСТРОИЛИ!
8)
Давайте начнем с того, что есть язык машинных команд и ПРЕПРОЦЕССОР КОМПИЛЯТОРА.
Где в абревиатуре машинной команды классического ассемблера имеется такая штука как "переменная"?
код операции, оператор, операнд.
источник данных - приемник данных.
метка - синоним адреса источника/приемника данных в соответствующем адресном пространстве.
непосредственные данные (данные, адрес, смещение относительно текущего адреса).
И ВСЁ.
Остальное добавляет препроцессор компилятора.
А оный чем более поздний тем понавороченнее в сторону ЯВУ
:beer:
И у каждого производителя компилятора свои дополнения/особенности для как можно большей разницы с "иным семейством" - абы посложнее пользователю оперативный переход "в стан врага" выполнить было.
:twisted:
Вспоминайте ка как писали и компилировали при помощи бумажна листочка и карандашика...
:wink:
Последний раз редактировалось BOB51 Ср мар 11, 2020 10:05:16, всего редактировалось 1 раз.
Ответить

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