ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
135241 Топик полностью
leon_ (16.10.2008 01:32, просмотров: 287) ответил MBedder на Добавил в свой пост вариант leon'а для signed int и увековечил в "Исходниках" -->
а если еще и коэффициент знаковый, тогда так: 
;
********************************************************************
; Умножение знаковых и беззнаковых целых 16-битных переменных
; на постоянный коэффициент k = -0.50000..0.49998 без применения float
; (например, для масштабирования значений АЦП).
;********************************************************************

;--------------------------------------------------------------------
; Scales unsigned int r5r4 by signed r17r16 value presented as fractional (0x8000 = -0.50000, 0x7FFF = 0.49998)
;
; Any registers can be used as operands
; Result stored in r9r8
; 15 program words, 18 clocks + ret
;
; (c) 2008 MBedder
;
scale16uu:
        clr     r2

        mulsu   r17,r5
        movw    r8,r0

        mul     r4,r16
        mov     r7,r1

        mul     r5,r16
        add     r7,r0
        adc     r8,r1
        adc     r9,r2

        mulsu   r17,r4
        sbc     r9,r2
        add     r7,r0
        adc     r8,r1
        adc     r9,r2

        ret
;--------------------------------------------------------------------

;--------------------------------------------------------------------
; Scales signed int r19r18 by signed r17r16 value presented as fractional (0x8000 = -0.50000, 0x7FFF = 0.49998)
;
; Only r16..r23 registers can be used as operands due to the MULSU command limitations
; Result stored in r9r8
; 16 program words, 19 clocks + ret
;
; (c) 2008 leon_
;
scale16su:
        clr     r2

        muls   r19,r17
        movw    r8,r0

        mul     r18,r16
        mov     r7,r1

        mulsu   r19,r16
        sbc     r9,r2
        add     r7,r0
        adc     r8,r1
        adc     r9,r2

        mulsu   r17,r18
        sbc     r9,r2
        add     r7,r0
        adc     r8,r1
        adc     r9,r2

        ret
;--------------------------------------------------------------------