hola,
fijate en este, es el q yo uso y funciona, de algun lado lo he sacado
la primera parte es como se hace para llamarlo y luego la rutina en si misma
claro q es para 2 bytes(16bits) , pero no debe ser muy dificil ampliarla a mas
yo la usaba para el f877 y luego creo haberla adaptado para el f452.
movfw GncH
movwf H_byte
movfw GncL
movwf L_byte
call B2_BCD
B2_BCD
bcf STATUS,0 ; clear the carry bit
movlw .16
movwf count
clrf R0
clrf R1
clrf R2
loop16
rlf L_byte, F
rlf H_byte, F
rlf R2, F
rlf R1, F
rlf R0, F
decfsz count, F
goto adjDEC
RETLW 0
adjDEC
;lfsr 0 , R2
movlw low(R2)
movwf FSR0L
movlw high(R2)
movwf FSR0H
call adjBCD
; lfsr 0 , R1
movlw low(R1)
movwf FSR0L
movlw high(R1)
movwf FSR0H
call adjBCD
; lfsr 0 , R0
movlw low(R0)
movwf FSR0L
movlw high(R0)
movwf FSR0H
call adjBCD
goto loop16
adjBCD
movlw 3
addwf INDF0,W
movwf temp
btfsc temp,3 ; test if result > 7
movwf INDF0
movlw 30
addwf INDF0,W
movwf temp
btfsc temp,7 ; test if result > 7
movwf INDF0
RETLW 0
Suerte