Source file: /~heha/Mikrocontroller/avr-inc.zip/divu4u2.i90

;"Normale" Division 32bit / 16bit = 16bit Rest 16bit
;Registeraufteilung günstig für MulDiv (Zusammensetzung mit mulu2u2)
;h#s 01/06
#ifndef DIVU4U2_I90
#define DIVU4U2_I90
;Quelle: 32-bit-Dividend, 16-bit-Divisor
;Ziel: 16-bit-Quotient, 16-bit-Divisionsrest

;	r3:r2 R r5:r4 = divu4u2 (r5:r4:r3:r2, r1:r0)	vzl.

.include "makros.i90"

divu4u2:
;PE: R5:R4:R3:R2 = Zähler
;    R1:R0 = Nenner, Divisor (bleibt erhalten)
;PA: R3:R2 = Ergebnis
;    R5:R4 = Rest
;VR: R2-R5, r16
;Ta: 200 (12 µs @ 16 MHz)
	ldi	r16,16
div_loop:
	lslw	r3,r2		;Null einschieben
	rolw	r5,r4
	brcs	div_sub		;Bei Überlauf immer subtrahieren
	cp	r4,r0
	cpc	r5,r1		;High-Teil mit Nenner vergleichen
	brcs	div_nosub	;Wenn High-Teil < Nenner, dann nicht subtr.
div_sub:
	sub	r4,r0
	sbc	r5,r1
	inc	r2		;LSB im Divisionsergebnis setzen
div_nosub:
	djnz	r16,div_loop
	ret

#endif//DIVU4U2_I90
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded