Предочистка используемых программой регистров РОН и ОЗУ это обязательная стандартная процедура - но её исполнение зависит от конкретных требований программы. Кроме того требуется привести в начальное состояние и некоторые из регистров спец функций (зависит от аппаратной начинки кристалла и статуса содержимого как при включении питания, так и при всех видах перезапуска устройства).
тут я тоже делаю хитро. во флеши у меня тоже есть данные - небольшие таблицы и несколько строковых данных (имена параметров для вывода их на экран). все эти данные у меня находятся в начале флеши, чтобы для доступа к ним ZH тоже был равен нулю. поэтому и для ОЗУ и для данных во флеши мне достаточно загрузить адрес только в ZL.
BOB51 писал(а):
Нуль можно и в варианте константы определить.
константу ты в команду СРС не поставишь.
shonty писал(а):
все регистры в ноль
нет в этом необходимости, я делаю очистку только тех регистров, которые на старте программы долны быть равны нулю. а их у меня обычно не так уж много.
BOB51 писал(а):
Предочистка используемых программой регистров РОН и ОЗУ это обязательная стандартная процедура
я выше только что сказал, что это и нахер не нужно делать. очистить только то, что должно быть "чистым".
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Это хорошо, если используется модель АВР. Но ведь возможно и иное переназначение регистров файла под наиболее удобную модель распределения регистров... это все таки "чистый ассемблер". К примеру тот же "быстрый стек" под отдельные подпрограммы в младшей части регистрового банка...
Чистых ассемблеров не бывает, все прибиты гвоздями к архитектуре.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Имелась ввиду разница между GNU-adsembler( )под GCC и avrasm без Си Касательно архитектуры - ядро то остаётся АВРкино, но стиль использования регистров регистрового файла может заметно отличаться при разных базовых моделях. У нас ведь не один аккумулятор как "по классике", а всё из имеющихся с полным функционалом. Да ещё и столько же " чуток ограниченных в возможностях применения" - именно в том и особенность МК, которой очень редко пользуются. (Или вообще не замечают). Насчёт CPC... Зависит от контекста - по функционалу у СРС Rd, Rd имеем rd-rr-c но Rd сохранён неизменным И SBCI Rd, k при Rd=rd-k-c, где к =0-255, но Rd будет изменён по результату. Да сама команда работает только с R31-R16... При том флаги установятся одинаково.
ты указал команду с регистром, а не с константой. а СРС, как я уже сказал, с константой не работает. а пример SBCI не актуален - буква "I" явно указывает работу с константой.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Есть то и CPI Rd, k , но в ней не учитывается флаг C . Собственно аналогия CP Rd, Rr и CPI Rd, k... Ошибка исправлена. CPC дополнительно учитывает предыдущее состояние флага С - ежли таковое критично, то ближайшей неполной аналогией можно считать SBCI при учете того, что она и содержимое регистра изменить может, если С=1 при константе =0, а СРС только по флагам пройдется. Интересненько однако...
Код:
LDI R16,0 REPS: SEC SBCI R16,0 RJMP REPS
... и что будет?... надо посмотрямс из спортивна интересу...
Ага, получилось R16 = 0хFF при С=1 а последующий шаг с 0xFF в R16 дал R16 = 0xFE и С = 0...
Последний раз редактировалось BOB51 Пт дек 13, 2024 16:54:16, всего редактировалось 1 раз.
Имелась ввиду разница между GNU-adsembler( )под GCC и avrasm без Си Касательно архитектуры - ядро то остаётся АВРкино, но стиль использования регистров регистрового файла может заметно отличаться при разных базовых моделях.
я и говорю - не надо отличий без необходимости от того, что принято в GCC. если вы выработаете привычку делать свои ассемблерные штуки по соглашениям, принятым в GCC, вам потом будет элементарно оформить их в нужном стиле - чисто косметические правки, алгоритм не будет затронут, - и использовать их в проекте на Си. и другим будет полезнее. какой регистр вы задефайните под константу НОЛЬ - принципиально вам разницы нет, но для "совместимости" лучше выбрать регистр R1, как в GCC. А R0, если я не ошибаюсь, применять как временный операнд, т.е. регистр, значение которого в любой момент может быть испорчено без последствий. ну и остальное тоже... я могу напутать, поэтому лучше изучить соответствующие доки на предмет "кошерного" назначения регистров.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Так это вопрос совместимости с GCC - если в таком смысле, конечно удобнее для транзитных работ по стандартным схемам с использованием одного аккумулятора. Да и фокусы со стеком GCC явно не допускает. А вот в прикладном плане для ассемблерных проектов это не факт... Если только в самом GCC подобный подход не закладывался. К примеру можно запустить несколько абсолютно автономно вертящихся задач на основе прерываний и аппаратных ресурсов. При условии, что у основной программы доступ ко всем псевдоавтономным через массив данных и флаги в ОЗУ. К примеру контроллер динамической индикациии кнопок на одном из таймеров и приемепередатчик плюс программа обработки. Понятно, что все выполняется последовательно во времени через единое АЛУ, но каждый "самостоятельный" модуль имеет свой независимый набор регистр-аккумуляторов, а общее ОЗУ уже как бы в режиме ПДП для этих модулей (через механизм флагов запросов/квитирования). Собственно как вариант использования ресурсов вполне возможно... Или несколько критичных регистров при прерывании хранить на в обычном стеке push/pop, а использовать альтернативный блок регистров с помощью movw...
Вам надо сделать словарик вашего слэнга, потому что понять вас выше моих сил... Какие стеки, какие аккумуляторы, почему индивидуальные?! Чем меньше извращений, тем проще, удобнее и понятнее, а если совместимо с чем-то другим - вдвойне хорошо.
Но дело, конечно, ваше... Avrasm настолько убогое говнище, что я вообще не понимаю, зачем его использовать, если есть avr-as, часть тулчейна avr-gcc. Даже древний 51-й ассемблер на пару порядков удобнее и мощнее... Гнутый асм ничем не хуже, уверяю вас!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Это точно... (насчёт слэнга)... Увы... Порой в том проблемы - так я ж и не возражаю... Относительно компилятора... Каждый надо заново прорабатывать. По традиции (и начальной широкой доступности в любительской практике) базовыми были avrasm от аврстудии, c51asm от той же атмел и mpasm от микрощипьего мплаба - вот я из них и слепил "нечто усредненное" по употреблению. Это правда не исключает и менее распространённых на сегодня, но "устаревших" для "старой классики" (580/Z80). А вот дальше уже таки сложнее - время своё берёт... (со склерозом в компании)
BOB51, а ты из спортивна интересу попробуй в исходнике написать CPI Rd, Rr. и посмотри, что тебе на это скажет компилятор. это будет гораздо интереснее, чем проверять работу SBCI...
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
BOB51, а ты из спортивна интересу попробуй в исходнике написать CPI Rd, Rr. и посмотри, что тебе на это скажет компилятор. это будет гораздо интереснее, чем проверять работу SBCI...
А зачем делать то, что в систему команд не заложено ?... Команды CPI Rd, Rr в системе команд AVR не существует - какой смысл ее обсуждать то?
Другое дело макрос с такими параметрами создать и использовать - это не возбраняется. А порой даже весьма эффективно (особо с учетом перенаименования регистров).
OKF Я спросил - интересно кому - выложу "на посмотреть", не интересно - удаляюсь в свою котуинку (тем более там это все уже было). Смысла то повторяться никакого нету - каждый делает то, что дает необходимый ему результат с теми ресурсами, которые ему доступны.
нет в этом необходимости, я делаю очистку только тех регистров, которые на старте программы долны быть равны нулю. а их у меня обычно не так уж много.
Да так и есть.. Очистка регистров, рАвно как и очистка ОЗУ - один из необязательных "ритуалов" ))
Но я обращаюсь к этому коду, когда забываю как работать с регистрами как с памятью.
По поводу "слэнга". Так вроде мы все тут художники свободные.. Кому-то пейзажи, кому-то натюрморты.. ну а кто-то экзотическими направлениями балуется.. Что ж с того
Avrasm настолько убогое говнище, что я вообще не понимаю, зачем его использовать, если есть avr-as, часть тулчейна avr-gcc. ... Гнутый асм ничем не хуже, уверяю вас!
Роман, простите мою глупость, но как могут отличаться ассемблеры для одной платформы? Система ж команд одинаковая... Или вы имеете ввиду мощность и плюшки препроцессора? (про себя скажу, что писала на чистом асме в четвертой авр-студии, когда изучала архитектуру АВРок. Потом уже седьмая студия и ассемблерные вставки в Си. На голом асме давно не пишу.)
Язык - в смысле системы команд не отличается. А вот компиляторы по своему правописанию и возможностям могут весьма сильно отличаться даже без всякого "отношения к Си"... По крайней мере я с тремя вариантами для 51й весьма плотненько занимался - от AD2500, встроенный в mcu8051ide и c51asm - исходники даже в простых проектах могут заметно отличаться для потребления каждого из них.
Just_Fluffy, извиняюсь что встряю. Ассемблеры для команд одинаковы, возможности (удобства) разные. Кроме команд есть ещё и директивы, есть ещё и макросредства. Я вам пример приведу, что бы было понятно. У меня был проект на z80. Дожил до 2012-го года (с 1994-го). Изначально транслировал m80 от небезизвестного Microsoft(с). 81-го года выпуска! Но это же стыдоба в наше время использовать ТАКОЕ старьё! Да ладно бы под CP/M. Эмуляторов много. Но из трансляторов ничего более современного не нашел. То там затык, то там не может, не хватает средств... Правда, исходник был не мал, 36000 строк. В итоге, подёргался и успокоился. Я к тому что ассемблеры разные и возможности тоже.
Сейчас этот форум просматривают: Google [Bot] и гости: 615
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения