	LIST    p=16F628a
	#include "P16F628A.INC"

	CBLOCK  0x020		; Szabad RAM terület kezdete
		a1		; 1. változó
		a2
		a3
		b1		; 2. változó
		b2
		b3
		c1		; 3. változó
		c2
		c3
		d1		; összeg
		d2
		d3
	ENDC

	ORG	0
	goto	kezd

;------------------- a bővítése
kezd:	clrf	a3
	btfsc	a2,7
	comf	a3
;------------------- b bővítése
	clrf	b3
	btfsc	b2,7
	comf	b3
;------------------- c bővítése
	clrf	c3
	btfsc	c2,7
	comf	c3
;------------------- a+b->d
	movf	a3,w
	addwf	b3,w
        movwf   d3
;-------
	movf	a2,w
	addwf	b2,w
        movwf   d2
	btfsc	STATUS,C		; átvitel a 3. byte-ra
	incf	d3
;-------
	movf	a1,w
	addwf	b1,w
	movwf   d1
	btfss	STATUS,C		; átvitel a 2. byte-ra
	goto	ad2
	incf	d2
	btfsc	STATUS,Z		; d2=0 -> átvitel a 3. byte-ra
	incf	d3
;------------------- c+d->d
ad2:	movf	c3,w
	addwf	d3
;-------
	movf	c2,w
	addwf	d2
	btfsc	STATUS,C		; átvitel a 3. byte-ra
	incf	d3
;-------
	movf	c1,w
	addwf	d1
	btfss	STATUS,C		; átvitel a 2. byte-ra
	goto	ell
	incf	d2
	btfsc	STATUS,Z		; d2=0 -> átvitel a 3. byte-ra
	incf	d3
;------------------- d>=0 ?
ell:	btfsc	d3,7
	goto	neg
;------------------- d>$007fff ?
poz:	btfsc	d3,0
	goto	pszat
	btfss	d2,7
	goto	vege
;------------------- d=$7fff
pszat:	movlw	0xff
	movwf	d1
	movlw	0x7f
	movwf	d2
	goto	vege
;------------------- d<$ff8000 ?
neg:	btfss	d3,0
	goto	nszat
	btfsc	d2,7
	goto	vege
;------------------- d=$8000
nszat:	clrf	d1
	movlw	0x80
	movwf	d2
;-------------------
vege:	goto	vege
;-------------------

	END
