О! Класс! ;О) щас скину чего-нить арифметицского. Для начала попроще.
;ATmega's
;unsigned 16X16, 16 cycles
.def mul1l =r6
.def mul1h =r7
.def mul2l =r8
.def mul2h =r9
.def resll =r10
.def resml =r11
.def resmh =r12
.def reshh =r13
.def zero_reg =r2
mul mul1h,mul2h
movw resmh,r0
mul mul1l,mul2l
movw resll,r0
mul mul1h,mul2l
add resml,r0
add resmh,r1
adc reshh,zero_reg
mul mul1l,mul2h
add resml,r0
adc resmh,r1
adc reshh,zero_reg
;------------------------------------
;покалеченый вариант от Александра Труша, реализаццыя то-ли Ньютоновского, то-ли биноминального алгоритма. Покалечил под 32->16 ~380-410 тактов. Любой АВР.
.def mask =r17
.def count =r18
.def work_l =r14
.def work_h =r15
.def dist_l =r12
.def dist_h =r13
.def src_l =r19
.def src_m =r20
.def src_mh =r21
.def src_h =r22
sqrt32: ldi mask,1
ldi count,16
sub work_h,work_h
sub work_l,work_l
sub dist_l,dist_l
sub dist_h,dist_h
sqrt24_1: cpi src_h,64
cpc work_l,dist_l
cpc work_h,dist_h
brcs sqrt24_2
subi src_h,64
sbc work_l,dist_l
sbc work_h,dist_h
sqrt24_2: rol dist_l
rol dist_h
eor dist_l,mask
lsl src_l
rol src_m
rol src_mh
rol src_h
rol work_l
rol work_h
lsl src_l
rol src_m
rol src_mh
rol src_h
rol work_l
rol work_h
dec count
brne sqrt24_1
cp dist_l,work_l
cpc dist_h,work_h
adc dist_l,src_m
adc dist_h,src_m
ret
порыцца по закромам нада. Видел у себя МАС сколько-то на сколько-то. Короче, оперделицца с тестами нада.
ИМХО, 16Х16, 24Х24, SQR32, SQR24, 32/16, МАС[200tap]10р датые-22р коэфф(чтобы в 40 бит поместицца). Ну плывучку мона. Правда, я для себя её пишу без соблядения ГОСТов на форматы данных, бо из МКшки наружу оно тока на индикаторе светицца, а мне гемору меньше.
Мона линейную аппроксимаццыю какой-нить функцыи(можно линию зашыть для проверки, чтобы типа d45f->d45f) по таблицце размерностью 2^N, для 16р аргумента. Ну, короче, товарищщи поправят. ;О)