Rvisando por alli encontre esta dirccion:
http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/apartir de alli modifique una libreria que encontre de una libreria para 8 BIT lo modifique para 16 y 32 bit
estas es para 16 BIT:
H_Byte ; Parte Baja Binaria
L_Byte ; Parte Alta Binaria
temp_BCD ; Registro Temporal
R0 ; Valor BCD de Salida 1
R1 ; Valor BCD de Salida 2
R2 ; Valor BCD de Salida 3
ENDC
BIN_a_BCD_16BIT
bcf STATUS, C
clrf Conta1
bsf Conta1, 4
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 ContaBCD, F
goto a_dec
Return
a_dec
movlw R2
movwf FSR
call a_bcd
movlw R1
movwf FSR
call a_bcd
movlw R0
movwf FSR
call a_bcd
goto loop16
a_bcd
movf INDF
movlw 0X03
addwf INDF, W
movwf temp_BCD
btfsc temp_BCD, 3
movwf INDF
movlw 0X30
addwf INDF, W
movwf temp_BCD
btfsc temp_BCD, 7
movwf INDF
Return
Y esta seria para 32 BIT:
CBLOCK
ContaBCD
HA_Byte ; Parte Baja Binaria A
LA_Byte ; Parte Alta Binaria A
HB_Byte ; Parte Baja Binaria B
LB_Byte ; Parte Alta Binaria B
temp_BCD ; Registro Temporal
R0 ; Valor BCD de Salida 1
R1 ; Valor BCD de Salida 2
R2 ; Valor BCD de Salida 3
R3 ; Valor BCD de Salida 4
R4 ; Valor BCD de Salida 5
R5 ; Valor BCD de Salida 6
R6 ; Valor BCD de Salida 7
R7 ; Valor BCD de Salida 8
ENDC
BIN_a_BCD_32BIT:
bcf STATUS, C
movlw 0X20
movwf ContBCD
clrf R0
clrf R1
clrf R2
clrf R3
clrf R4
clrf R5
clrf R6
clrf R7
loop32:
rlf LA_Byte ,F ; Parte Baja Binaria B
rlf HA_Byte ,F ; Parte Alta Binaria B
rlf LB_Byte ,F ; Parte Baja Binaria A
rlf HB_Byte ,F ; Parte Alta Binaria A
rlf R7, F
rlf R6, F
rlf R5, F
rlf R4, F
rlf R3, F
rlf R2, F
rlf R1, F
rlf R0, F
decfsz ContaBCD, F
goto a_dec
Return
a_dec:
movlw R7
movwf FSR
call a_bcd
movlw R6
movwf FSR
call a_bcd
movlw R5
movwf FSR
call a_bcd
movlw R4
movwf FSR
call a_bcd
movlw R3
movwf FSR
call a_bcd
movlw R2
movwf FSR
call a_bcd
movlw R1
movwf FSR
call a_bcd
movlw R0
movwf FSR
call a_bcd
goto loop32
a_bcd:
movf INDF
movlw 0X03
addwf INDF, W
movwf temp_BCD
btfsc temp_BCD, 3
movwf INDF
movlw 0X30
addwf INDF, W
movwf temp_BCD
btfsc temp_BCD, 7
movwf INDF
Return
END
Espero les Sirva.