Z80 – 8 Bit Division
Der Z80 hat leider auch keinen Befehl für eine Division. Zwar kann man mit Bit-Shifting einiges bewirken, die Möglichkeiten sind aber begrenzt. Also muss eine kleine Routine her. Hier eine 8 Bit-Division der Form BC=HL/E (Also Register HL durch Register E, Ergebnis in Register BC). Die Routine bedient sich der einfach Subtraktion.
1 2 3 4 5 6 7 8 9 10 11 |
Divide: ; Diese Routine führt eine Division der Form BC=HL/E durch ld a,e ; Den Divisor auf 0 prüfen, wenn 0, dann Ende (Division durch 0) or a ; --> Übertragsbit (carry) ist leer. ret z ; Es liegt Division durch 0 vor ld bc,-1 ; BC soll das Ergebnis enthalten ld d,0 ; Register D auf 0, Registerpaar DE enthält jetzt den Divisor DivLoop: ; DE von HL abziehen bis zum Überlauf sbc hl,de ; da das Carry-Bit nicht gesetzt ist, funktioniert SBC wie SUB inc bc ; BC um eins hochzählen jr nc,DivLoop ; Solange das Carry-Bit nicht gesetzt ist, wird die Schleife wiederholt ret |