ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
23301 Топик полностью
mse homjak (11.03.2005 00:06, просмотров: 1) ответил General на Для затравки
О! Класс! ;О) щас скину чего-нить арифметицского. Для начала попроще. 
;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р аргумента. Ну, короче, товарищщи поправят. ;О)