А хайтековские сорцы уже не котируются? Вот например умножение float
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =L.A.= 05 февраля 2005 г. 20:54
В ответ на: Нехилая разница. А сорцы не опубликуете? отправлено undefined 05 февраля 2005 г. 20:23

; Copyright (C) 1997 HI-TECH Software

; Single Precision IEEE Floating point arithmetic routines for PIC
; Multiplication done here


#include "double.h"

global flmul,flmul_x
FNCALL flmul,flunpack1
FNCALL flmul,flunpack2
FNCALL flmul_x,flunpack1
FNCALL flmul_x,flunpack2

;
; Multiply the float in ctemp by the float on the stack and return
; the result in ctemp

flmul:
put_errata_nop
clrf FSR0L
clrf FSR0H
flmul_x:
put_errata_nop
call flunpack1
call flunpack2
clrf prod
clrf prod+1
clrf prod+2
clrf prod+3
movlw 7 ;initialize counter
movwf cntr
mup1:
bcf STATUS,CY
rrcf mant2+2 ;shift multiplier down one bit
rrcf mant2+1
rrcf mant2+0
bnc nobit ;is bit 0 set?
movf mant1,w ;add multiplicand to product
addwf prod
movf mant1+1,w
addwfc prod+1
movf mant1+2,w
addwfc prod+2
movf mant1+3,w
addwfc prod+3
nobit:
bcf STATUS,CY
rlcf mant1+0 ;shift multiplicand up one bit
rlcf mant1+1
rlcf mant1+2
rlcf mant1+3
decfsz cntr ;decrement counter
goto mup1 ;loop if more

movlw 17 ;re initialize counter
movwf cntr
goto mup3
mup11:
bcf STATUS,CY
rrcf prod+3 ;shift product down one bit
rrcf prod+2
rrcf prod+1
rrcf prod+0
mup3:
bcf STATUS,CY
rrcf mant2+2 ;shift multiplier down one bit+2
rrcf mant2+1
rrcf mant2+0
bnc mup2 ;don't add if carray set
movf mant1,w ;add multiplicand to product
addwf prod
movf mant1+1,w
addwfc prod+1
movf mant1+2,w
addwfc prod+2
movf mant1+3,w
addwfc prod+3
mup2:
decfsz cntr ;loop if more
goto mup11
movlw -(127+7) ;get exponent adjustment
addwf exp2,w ;add RHS exponent
addwf exp1 ;add LHS exponent
rrcf signs,w ;get sign of RHS in bit 0
xorwf signs ;xor with LHS sign
one:
movf prod+0,w ;copy product to mant1
movwf mant1+0
movf prod+1,w
movwf mant1+1
movf prod+2,w
movwf mant1+2
movf prod+3,w
movwf mant1+3
goto flnorm1 ;normalize

end


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru