ATMEGA 8 и ATMEGA168 совместимость?

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Starichok51 »

shonty писал(а):Хотя если самому определить, то типа brbs (1<<bit_T) совсем неплохо выглядит
совсем плохо выглядит.
в этих командах (br..) указывается номер бита, а не число.
BOB51, SHOW - нет такой команды.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение BOB51 »

Подправил уже - с мобилки с "ИИ подсказчиком" еще не то выскочить может.
Оно ж правильно ГАД ЖЕтами называется.
:twisted:
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение shonty »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4676873#p4676873"]
shonty писал(а):Хотя если самому определить, то типа brbs (1<<bit_T) совсем неплохо выглядит
совсем плохо выглядит.
в этих командах (br..) указывается номер бита, а не число.[/uquote]

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

.equ bit_T =6
.equ bit_Z =0
в таком случае чем отличается

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

brbs (1<<bit_T), ...
brbs (1<<bit_Z), ...
от

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

brbs 6, ...
brbs 0, ...
?
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение COKPOWEHEU »

[uquote="Adrift",url="/forum/viewtopic.php?p=4676850#p4676850"]LDD Rd, Z+q ?[/uquote]
Да, что-то вроде этого. Вроде, с этой командой были какие-то проблемы. То ли не поддерживалась на каких-то камнях. Но, может, уже что-то путаю.
BOB51 писал(а):Чего ещё не хватает то?
Адресации относительно SP, например. Или неудачное решение в avr-gcc использовать в качестве zero то ли r0, то ли r1, в которые mul результат складывает. Но ладно, это уже придирки.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Just_Fluffy »

COKPOWEHEU писал(а):Ну вот когда в чужом коде встречается brlo или brsh, это же понятнее, чем brbs 0 и brbc 0.
При том что обе компилятся в одну и ту же команду
BRLO : 1111 00kk kkkk k000

BRBS : 1111 00kk kkkk ksss

тут kkkkkkk - смещение перехода -64...+63
sss номер бита SREG

Поэтому ж и говорю, что утверждение атмелов про 131 Powerful Instructions – Most Single-clock Cycle Execution - чисто фикция для удобства программистов, потому ж и весело.
А так команд там меньше сотни.

Та же фигня с BSET и SEx, BCLR и CLx...

И какую мнемонику поставит дизассемблер вместо машинного кода - ведомо только авторам дизассемблера.... Скорее всего, расширенную, именно, что б было легче читать.
Белая и Пушистая
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение BOB51 »

COKPOWEHEU
Фокусы со стеком у АВРок требуют весьма большого внимания.
Как и система прямого указания адреса (бит0) в отношении данных или команд (местоположения однобайтовых данных или адресов точек входа в программу).
Тут и карандашик с листочком бумаги не помешает и распечатки по системе команд/документации на МК (список разрешенных команд для АВРок обычно в даташите обязательно указывается)
8)
Just_Fluffy
Для пользователя ассемблера в принципе все равно, чем С=1 проверять для перехода -
BRBS C,k
BRCS k
BRLO k
но вот компилятор Си обрабатывает сначала текстовую строку - а там разница в мнемониках команд в зависимости от типа проверки условий может иметь значение - возможно в том и кроется "множественность"...
:roll:
Последний раз редактировалось BOB51 Ср янв 29, 2025 15:35:28, всего редактировалось 1 раз.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Adrift »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4676893#p4676893"]Да, что-то вроде этого. Вроде, с этой командой были какие-то проблемы.[/uquote]
Такой инструкции нет у AVR с Reduced Core, там где только 16 регистров, но у них многих инструкций нет(MOVW/ADIW/MUL/LPM...).
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение COKPOWEHEU »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676894#p4676894"]При том что обе компилятся в одну и ту же команду[/uquote]
Так я ж не от балды именно эти команды назвал :)
Just_Fluffy писал(а):А так команд там меньше сотни.
Все же 106, если скрипт не ошибся.
BOB51 писал(а):Как и система прямого указания адреса
О чем речь? Об адресации по байтам/словам во флеши что ли?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение BOB51 »

Об их самых...
Таблица смещений к вектору к примеру 8 битовая или прямой 16 битовый указатель адреса.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Starichok51 »

shonty писал(а):в таком случае чем отличается
тем, что в случае
brbs (1<<bit_T)
число равно 64, а не 6.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Just_Fluffy »

COKPOWEHEU писал(а):Все же 106, если скрипт не ошибся.
131 команда
из них brbs, brbc, bset, bclr имеют по 8 синонимов каждая.
Итого 131 - 32 = 99.
Там еще есть повторяющиеся команды, CLR Reg совпадает с EOR Reg, Reg, SER Reg - это тот же LDI Reg, 0xFF
Т.е. уже 131-32-2 = 97...

Вроде еще что то было....
Белая и Пушистая
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение COKPOWEHEU »

Это вы про какой МК? А то у них же разные наборы команд. Скажем, elpm редко встречается, о существовании las, lat я узнал только из тестового дизасма.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение shonty »

Starichok51 писал(а):тем, что в случае
brbs (1<<bit_T)
число равно 64, а не 6
да, это я погорячился :dont_know:

brbs bit_T, ...
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Starichok51 »

Just_Fluffy писал(а):131 команда
я у себя в справочнике вместе со синонимами насчитал 116 строк.
но там для команд LD (LDD) и ST (STD) 6 строк и фактически имеется по несколько команд:
во-первых, для разных регистровых пар,
во-вторых, с постинкрементом и с предекрементом и с прибавлением смещения.
итого для X 6 команд и для Y и Z по 8 команд.
но у меня почему-то в сумме получается 132 (110 + 6 + 8 + 8 = 132), а не 131.

Добавлено after 19 minutes 27 seconds:
Just_Fluffy, я еще нашел синонимы:
SBR и ORI,
CBR и ANDI с комплиментом числа для CBR.

Добавлено after 3 minutes 27 seconds:
хотя строго говоря, вторая пара не является синонимами, так как комплимент берется "внутри" процессора.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение COKPOWEHEU »

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

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

echo "" | awk '{for(i=0; i<256*256; i++)printf(".byte %i, %i\n", (i/256%256), (i%256))}' > a.S && avr-as a.S && avr-objdump a.out -D -m avr | tail -n +8 | sed 's/[^\t]*\t[^\t]*\t\([0-9a-z.]*\).*/\1/' | sort -u | tee cmds.txt | wc -l && rm a.out a.S
107
Заодно проверил ваши пары. sbr, cbr нет. ld, ldd единственный раз (ожидаемо). Интересно, что нет и brbc/brbs, вместо них "именованные" brne, brlo, ...
CBR и ANDI с комплиментом числа для CBR.
хотя строго говоря, вторая пара не является синонимами, так как комплимент берется "внутри" процессора.
Все же не внутри процессора, а внутри ассемблера. В процессоре хранится уже как andi с инвертированной маской.

Добавлено after 4 minutes 11 seconds:
Собственно, вот прямое доказательство andi / cbr:

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

$ echo -e "andi r16, ~(1<<2)\n cbr r16, (1<<2)" > a.S && avr-as a.S && avr-objdump a.out -S | tail -n 2 && rm a.S a.out
   0:   0b 7f           andi    r16, 0xFB       ; 251
   2:   0b 7f           andi    r16, 0xFB       ; 251
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Just_Fluffy »

COKPOWEHEU, Starichok51, команды я смотрю в описаниях МК в даташитах
Тня2313 - 120 Powerful Instructions
Тня85 - 120 Powerful Instructions
мега8 - 130 Powerful Instructions
мега32 - 131 Powerful Instructions
мега328 - 131 Powerful Instructions
мега128 - 133 Powerful Instructions

Starichok51, LD вообще интересные...

Вроде как 2 бита определяют регистровую пару, а другие 2 бита - определяют инкремент и декремент....
Но для регистровых пар Y и Z без инкремента/декремента еще 1 бит отличается от аналогичного для пары Х.

1001 000d dddd 1100 LD R,X ddddd - reg 0..31
1001 000d dddd 1101 LD R,X+ ddddd - reg 0..31
1001 000d dddd 1110 LD R,-X ddddd - reg 0..31

1000 000d dddd 1000 LD R,Y ddddd - reg 0..31
1001 000d dddd 1001 LD R,Y+ ddddd - reg 0..31
1001 000d dddd 1010 LD R,-Y ddddd - reg 0..31

1000 000d dddd 0000 LD R,Z ddddd - reg 0..31
1001 000d dddd 0001 LD R,Z+ ddddd - reg 0..31
1001 000d dddd 0010 LD R,-Z ddddd - reg 0..31

Теоретически, эти команды могли бы сгруппироваться в одну машинную команду с 2+2 битами параметров, но этот нолик все портит ))))
Но, если посмотреть на команды чтения с константным смещением - то все становится на свои места. Когда этот бит равен нулю - это указание, что нужно из команды взять константу смещения...
10q0 qq0d dddd 1qqq LDD R,(Y+q) ddddd - reg 0..31, qqqqqq - shift 0..63
10q0 qq0d dddd 0qqq LDD R,(Z+q) ddddd - reg 0..31, qqqqqq - shift 0..63
1000 000d dddd 1000 LD R,Y ddddd - reg 0..31
1000 000d dddd 0000 LD R,Z ddddd - reg 0..31

Т.е. LD(LDD) группируется в две команды
- чтение без смещения + 2 параметра: регистровая пара и флаги инкремента/декремента
- чтение со смещением + 1 параметр: регистровая пара

А как их считать - как 1 коману, как 2 команды или как 6 или 8 - тут уже второй вопрос...
Ведь тут обратная ситуация - мнемоника одна - LD(LDD), а машинная команда выходит развесистая.... Даже по сути две команды, ибо 2 младших бита трактуются по разному в зависимости от двенадцатого бита.
Последний раз редактировалось Just_Fluffy Чт янв 30, 2025 09:58:39, всего редактировалось 3 раза.
Белая и Пушистая
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Starichok51 »

мнемоники две - LD и LDD - со смещением.
поэтому твоя запись
10q0 qq0d dddd 1qqq LD R,(Y+q) ddddd - reg 0..31, qqqqqq - shift 0..63
неправильная. должно быть
10q0 qq0d dddd 1qqq LDD R,(Y+q) ddddd - reg 0..31, qqqqqq - shift 0..63
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Just_Fluffy »

Starichok51, Да, ошиблась при копипасте. Но это только мнемоники.
Оно даже в даташите описано как одна команда - и LDD указана в скобках:
LD (LDD) – Load Indirect from Data Space to Register

Ну и LD R0, Y и LDD R0, Y+0 имеют один и тот же машинный код: 1000 0000 0000 1000
Т.е. это одна команда

Добавлено after 4 minutes 12 seconds:
поправила LD на LDD
Белая и Пушистая
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Starichok51 »

хорошо, согласен, что это получается одна команда.
то есть, если биты "пустые", то можно сказать, что прибавляется ноль.
а разница, видимо, только в работе компилятора.
для LD R0, Y он сразу загоняет нулевые биты на свои места. а процессор "тупо" прибавляет ноль.
а для LDD R0, Y+q загоняет число.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: ATMEGA 8 и ATMEGA168 совместимость?

Сообщение Just_Fluffy »

Starichok51, я думаю, что все гораздо прозаичней - LDD заставляет компилятор воспринимать второй аргумент как два - регистровую пару плюс константу.
А может это просто дань удобству программиста, как и размноженные в 8 раз другие команды, базирующиеся на битах регистра SREG.
Белая и Пушистая
Ответить

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