No era necesaria la explicación, pero gracias.

Voy a usar la subrutina de 16bits en HEXA a 24bits en BCD para sacar datos a un LCD. EL usuario no entendería una temperatura de AF°C... es necesario ponérsela en decimal: 175°C.
La subrutina que pasa 8bits de HEXA a 16 en BCD es la siguiente:
;
; EJEMPLO 1.9
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación
;
;Convierte el valor binario presente en posición 0x10 en BCD. El resultado se deposita
;en las variables Buffer_H y Buffer_L.
List p=16F84a ;Tipo de procesador
include "P16F84a.INC" ;Definiciones de registros internos
Binario equ 0x10 ;Valor binario inicial
Buffer_H equ 0x11 ;Parte alta del resultado
Buffer_L equ 0x12 ;Parte baja del resultado
Temp_1 equ 0x13 ;Registro temporal
org 0x00 ;Vector de Reset
goto Inicio
org 0x05 ;Salva el vector de interrupción
Inicio movf Binario,W ;Carga el valor binario inicial
clrf Buffer_L
clrf Buffer_H ;Inicia registros de trabajo
BIN_BCD_1 addlw 0xf6 ;Resta 10 mediante suma de complemento a 2.
btfss STATUS,C ;Hay Carry?
goto BIN_BCD_3 ;NO.
movwf Temp_1 ;SI.Guardar en registro temporal.
incf Buffer_L,F ;Incrementar byte bajo, guardarlo y enviar...
movf Buffer_L,W ;..copia al ==> W...
xorlw b"00001010" ;..0Ah xor W.
btfss STATUS,Z ;Buffer_L es igual a 10 ??
goto BIN_BCD_2 ;NO.
clrf Buffer_L ;SI. Poner Buffer_L a 0
incf Buffer_H,F ;Incrementar Buffer_H
BIN_BCD_2 movf Temp_1,W ;Recuperar el dato.
goto BIN_BCD_1 ;Continuar la operación.
BIN_BCD_3 addlw H"0A" ;TEMPO + 0Ah
swapf Buffer_L,F ;

:0> <==> <7:4> y ==> Buffer_L
iorwf Buffer_L,F ;W OR Buffer_L ==> Buffer_L
Stop nop ;Poner breakpoint de parada
nop
end ;Fin del programa fuente
Si pones, por ejemplo, 0xff en el registro Binario, en los registros Buffer_H y Buffer_L aparecerá 0x02 y 0x55 respectivamente.
Si quieres compila este programa y comprueba los cambios.
Si llegas a encontrar una subrutina que pase los 16 hexas a 24 decimales pues por favor avísame.