O.K.

Kurze Eiführung:
Das ist ein Unterprogramm der mit call Hex_Dec aufgerufen wird. Es gibt 4 Register mit 32 Bits, sie müssen (wegen FSR) so wie im Code nacheinander liegen (die absolute Adressen sind nicht wichtig). In erstes Register "A" wird die bin Zahl eingeschrieben und im "D" befindet sich die umgewandelte dec Zahl. A3 und D3 sind MSB und A0 und D0 sind LSB. Die "B" und "C" sind Hifsregister. Wachrscheinlich nicht alle aufgelisteten Register (ausser A,B,C,D und Flags) sind nötig, aber ich habe es bloss aus meinem Programm schnell kopiert. Schau mal bitte, was in dem Unterprogramm vorkommt. Ich Glaube, dass alle DTmpX, FTmp und TTmp nicht und Unterprogramm Copy DC auch nicht, aber das ist ein Teil grösseres Programms und kann noch kleiner gemacht werden.

MfG
Code:
#define	_RP0	STATUS,RP0
#define	_C	STATUS,C
#define	_Z	STATUS,Z
#define	_DC	STATUS,DC
#define	_Fcra	Flags,0
#define	_Fcrp	Flags,1
#define	_Fdca	Flags,2
#define	_Ferr	Flags,3
A3		EQU	0x20
A2		EQU	0x21
A1		EQU	0x22
A0		EQU	0x23
B3		EQU	0x24
B2		EQU	0x25
B1		EQU	0x26
B0		EQU	0x27
C3		EQU	0x28
C2		EQU	0x29
C1		EQU	0x2A
C0		EQU	0x2B
D3		EQU	0x2C
D2		EQU	0x2D
D1		EQU	0x2E
D0		EQU	0x2F
Flags		EQU	0x30
DTmp1		EQU	0x31
DTmp2		EQU	0x32
DTmp3		EQU	0x33
DTmp4		EQU	0x34	
ATmp		EQU	0x35
FTmp		EQU	0x36
HTmp		EQU	0x37
RTmp		EQU	0x38
TTmp		EQU	0x39 

Hex_Dec    	call	CClr			;Hex>A, D>Dec
		call	DClr
		movlw	1
		movwf	C0
		movlw	0x20			;32 bit Hex > 32 bit Dec (8 digits)
		movwf	HTmp
HexDecL	btfsc	A0,0
		call	AddDC
		call	CopyCB
		call	AddCB
		call	ARotRb
		decfsz	HTmp,1
		goto	HexDecL
		return
CClr		clrf	C0
		clrf	C1
		clrf	C2
		clrf	C3
		return
DClr		clrf	D0
		clrf	D1
		clrf	D2
		clrf	D3
		return
CopyCB	movf	C0,0
		movwf	B0
		movf	C1,0
		movwf	B1
		movf	C2,0
		movwf	B2
		movf	C3,0
		movwf	B3
		return
CopyDC	movf	D0,0
		movwf	C0
		movf	D1,0
		movwf	C1
		movf	D2,0
		movwf	C2
		movf	D3,0
		movwf	C3
		return
AddCB		movlw	B0			;C+B>C
		movwf	FSR
		goto	AddR
AddDC		movlw	C0			;D+C>D
		movwf	FSR
AddR		bcf	_Ferr			;add two register
		bcf	_Fcrp
		movlw	4			;4 bytes long
		movwf	ATmp
AddRL		bcf	_Fdca
		bcf	_Fcra
		movf	INDF,0
		movwf	RTmp
		movlw	4
		addwf	FSR,1
		btfss	_Fcrp
		goto	AddRN
		movlw	1
		addwf	INDF,1
		call	DecCor
AddRN		movf	RTmp,0
		addwf	INDF,1
		call	DecCor
		btfss	_Fdca
		goto	AddCor1
		movlw	6
		addwf	INDF,1
AddCor1	btfss	_Fcra
		goto	AddCor2
		movlw	0x60
		addwf	INDF,1
		btfsc	_C
		bsf	_Fcra
AddCor2	movf	INDF,0
		andlw	0xF0
		sublw	0xA0
		btfss	_Z
		goto	AddCor3
		movf	INDF,0
		andlw	0x0F
		clrf	INDF
		addwf	INDF,1
		bsf	_Fcra
AddCor3	bcf	_Fcrp
		btfsc	_Fcra
		bsf	_Fcrp
		movlw	5
		subwf	FSR,1
		decfsz	ATmp,1
		goto	AddRL
		btfsc	_Fcra
		bsf	_Ferr
		return
DecCor	btfsc	_DC			;decimal correction (equ DAW)
		bsf	_Fdca
		btfsc	_C
		bsf	_Fcra
		movf	INDF,0
		andlw	0x0F
		sublw	9
		btfss	_C
		bsf	_Fdca
		movf	INDF,0
		andlw	0xF0
		sublw	0x90
		btfss	_C
		bsf	_Fcra
		return
ARotRb	movlw	A3			;rotate A register 1 bit right
		movwf	FSR			
RRotRb	movlw	4			;rotate 4 bytes
		movwf	ATmp
		bcf	_Fcrp
		btfsc	A0,0
		bsf	_Fcrp
RRotRbL	bcf	_Fcra
		btfsc	INDF,0
		bsf	_Fcra
		bcf	_C
		btfsc	_Fcrp
		bsf	_C
		rrf	INDF,1
		bcf	_Fcrp
		btfsc	_Fcra
		bsf	_Fcrp
		incf	FSR,1
		decfsz	ATmp,1
		goto	RRotRbL
		return