Цитата
Но процессор(и ассемблер) то их отличает
ну и что? архитектуры отличаются
очень очень сильно.
Вот основные отличия C51:
1. Все арифметические действия производятся только с регистром Acc (в AVR с любым из 32х регистров).
2. Нет базово-индексной адресации (в AVR есть - Z+Const), только базовая (@DPTR, @R0)
3. Есть множество прямоадресуемых бит и команды проверки конкретного бита (в AVR такого нет)
4. Двух-уровневый приоритетный контроллер прерываний (в AVR одноуровневый)
5. 4-х режимные таймеры, идеология работы которых сильно отличается от таймеров в AVR.
6. Квазидвунаправленные порты (одновременно и ввод и вывод) в AVR такого нет..
7. Невидимая для прямой адресации область RAM, которая пересекается с адресным пространством SFR
8. Скудный набор арифметичеких команд, т.к. C51 задумывался как битовый процессор (нет даже команды сравнения), поэтому трансляция кода на AVR приведет к неоптимальному использованию команд AVR, что в свою очередь в разы раздует код программы.
Короче говоря, написать кросс-ассемблер такой как Вы хотите - реально, но он будет настолько неоптимально использовать возможности AVR, что целесообразность его использования сведется практически к нулю. Для чипов до 16k памяти программ (ПП) проще вручную (зная алгоритм программы) портировать ассемблерный код C51 на AVR, для чипов же с больше 16k ПП программы обычно пишут на C и проблем с портированием не должно быть вообще.