Jag har kommenterat så att det förhoppningsvis går att förstå hur den fungerar. Men fungerar gör den.
Kanske det hjälper någon annan med behov.
Kod: Markera allt
;**************Test**************************
DIV_X_Y
			; Dividerar TEMPX8/TEMPY8 resultat i RESULT8
			; Register:
			; TEMPX8		; Täljaren
			; TEMPY8		; Nämnaren
			; RESULT8		; Resultat
			; IDX16		; Basindex
	MOVF  	TEMPY8,F					; Uppdaterar Z-flagga i STATUS
	BTFSC 	STATUS,Z 					; 
	RETURN							; Om nämnaren är noll så ...
	CLRF  	RESULT8					; Rensa resultatregistret
	MOVLW  	1
	MOVWF  	IDX16						; Ladda in 1 i IDX16
SHIFT_IT8
	BTFSC  	TEMPY8,7					; Skifta nämnaren och basindex vänster
	GOTO  	DIVU8LOOP					; tills MSb i nämnaren är satt
	BCF   	STATUS,C					; Nolla C
	RLF   	IDX16,F						; Rotera basindex vänster
	BCF   	STATUS,C					; Nolla C
	RLF   	TEMPY8,F					        ; Rotera nämnaren vänster
	GOTO  	SHIFT_IT8					; På igen
DIVU8LOOP
	MOVF  	TEMPY8,W					; Lägg in den modifierade nämnaren i W
	SUBWF  	TEMPX8,	F				; Dra ifrån den modifirade nämnaren från täljaren
	BTFSC   STATUS,C					; Om reultatet blir ...
	GOTO   	COUNT8					; ... positivt, lägg basindex till resultatet
	ADDWF   TEMPX8,	F				; ... negativt, lägg den modifierade nämnaren till täljaren
	GOTO  	FINAL8
COUNT8
	MOVF  	IDX16,W					; Positivt, lägg basindex till resultatet
	ADDWF  	RESULT8,	F
FINAL8								; Rotera tillbaka nämnare och basindex
	BCF   	STATUS,C					; Nolla C
	RRF   	TEMPY8,F					        ; Rotera tillbaka nämnaren
	BCF   	STATUS,C					; Nolla C
	RRF   	IDX16,F						; Rotera tillbaka basindex
	BTFSS   STATUS,C					; När 1:an i basindex åker ut i C så är vi färdiga
	GOTO   	DIVU8LOOP					; Fortsätt tills basindex = 1
	RETURN							; Klart
;**************!Test*************************
				