Отцы! Я сейчас впервые задумался над одной проблемой: кожу устройство на основе Atmega128, которое выводит на большой матричный экран неважно как строки текста. Эти строки текста хранятся в ПЗУ микроконтроллера. Функцию я за полчаса накодил, которая попиксельно рисует буквы на основе байт переданной в качестве параметра строки. Гемор в другом. Над чем я туплю - над тупостью ассемблера. Говорят, самый красивый ассемблер у MOTOROLA68, я лично давно полюбил (вплоть до написания многозадачной оси, грузящейся с диска FAT12) ассемблер Intel 386, но вот Atmel-овый ассемблер дразнится похожестью на i386, но разработчиком подложено рад свиней: 1.Зачем компилятор в каждой .db старается обеспечить четное количество байт? (А точнее - что за чертовщина, фу-у-у, противно.) 2.Зачем нету никаких директив типа offset, которые бы позволяли получать адреса данных в памяти? Это чтобы можно было написать: mess1: .db "Hello world",$0 mess2: .db "Привет администратор!",$0 mess3: .db "Завершение работы veendouz...",$0 п потом заюзать это так: lds r16,offset mess1 lds r17,offset mess2 lds r18,offset mess3 call drawwindow..... Если я слеп - прозрите меня пожалуйста, а то отечественная mp3-плееростроительная промышленность так и будет в стакане барахтаться.
Для выравнивания, вестимо. Не все процессоры так лояльно относятся к этому вопросу как x86. Компилятору за это нужно спасибо сказать, а не ругать Значит mess1 и будет адресом строки.
Если уж проводить аналогию до конца с 386, то lds - в принципе не предназначена для чтения из памяти програм. Вам поможет косвенная адресация через x,y,z регистры. LPM Rd,Z+ Кстати, мне кажется, что более приближенный ассм к 086, это мсц51. По крайней мере нет такой херни, что код для 1-USARTа (атмеги128) не работает для 0-USARTа (атмеги8)...