Цитата(Turnaev Sergey @ Mar 1 2008, 20:55)

Намёк понял, уточняю:
Используя встроенные в AVRASM2 функции записать в память программ бинарные данные в HEX представлении.
Ну, так с лёту на GNU as это выглядит приблизительно так:
Код
.macro hexstr s
.set pair, 0
.irpc c, \s
.if pair == 0
.set val, 0x\c
.else
.byte val*16 + 0x\c
.endif
.set pair, 1 - pair
.endr
.endm
.text
hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"
.end
Фрагмент листинга.
CODE
15 .text
16 hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"
16 > .set pair,0
16 > .irpc c,0000000001C0C07E0100000001C63019839FE00001C0000
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0000 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0001 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0002 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0003 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x1
16 >> .else
16 0004 01 >> .byte val*16+0x1
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xC
16 >> .else
16 >> .byte val*16+0xC
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0005 C0 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xC
16 >> .else
16 >> .byte val*16+0xC
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0006 C0 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x7
16 >> .else
16 >> .byte val*16+0x7
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xE
16 >> .else
16 0007 7E >> .byte val*16+0xE
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x1
16 >> .else
16 0008 01 >> .byte val*16+0x1
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0009 00 >> .byte val*16+0x0
16 >> .endif
Ищите у аврасма похожие макроинструкции
Ай, аврасм, кажется, обижается на .db с одинм байтом (с нечётным количеством байт) - от себя 0 добавляет и цепочка .db нехороша.
Ну тогда надо гененрировать под .dw
Код
.macro hexstr s
.set index, 0
.set val, 0
.irpc c, \s
.set val, val*16 + 0x\c
.set index, index + 1
.if index == 4
.word val
.set index, 0
.set val, 0
.endif
.endr
.if index == 2
.byte val; это на случай нечётного количества байт
.endif ; нецелое количество байт (нечётное количество символов) игнорируем (не обрабатываем эту ошибку :-) )
.endm
.text
; hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"
hexstr "0123456789"
.end
Аналогично можно слепить макрос генерации чего угодно, хоть таблиц "данных в инактивированном формате" имени Амброзио.