Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Если изначально в мнемоники заложена одна команда mov с закорючками, то я просто пишу
макро ПОДАЙ собачка, звучок
mov r16, звучок
out собачка, r16
усё
И один единственный макрос будет работать для
ПОДАЙ PORTB, 5
ПОДАЙ PORTC, voice_code_in_ram_cell
ПОДАЙ PORTD, Y+6
С небольшим усложнением макроса можно будет r16 применять для вида голоса в памяти или константы, а если уже в регистре - то прямо из него выбрасывать и не ставить лишнюю команду.
Если всё в мнемонике, то мне придётся писать горсть почти одинаковых макросов с разными именами.
Если и в мнемонике, и в закорючках, то я по карйней мере могу по закорючкам определить метод адресации и подставить нужную мнемонику.
По-хорошему, так иногда для оптимального макроса хочется знать - числовое выражение в аргументе абсолютное (и тогда по его значению что-то выбрать) или перемещаемое.
Грубо говоря - если команда add с константой длиннее команд inc/dec, то для перемещаемых значений и значений, больших по модулю, чем 1 - генерировать add, для +1/-1 inc/dec, для 0 - вообще ничего.
Или для AVR регистровых пар W(r25:r24), X, Y, Z - или поставить команду adiw для малых абсолютных значений или разбить на две с отдельными регистрами и hi8/lo8 для болших абсолютных или перемещаемых. А если нельзя определить - перемещаемое ли, то всегда две команды надо ставить.
Но этого хочется, если много пишешь на ассемблере. Если небольшие подпрограммы или меленькие проектики, да ещё и изредка - то можно и плюнуть.
Составить ответ | Вернуться на конференцию
Ответы