8 Bit Division

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#1
19.06.2019, 17:32

Hier mal ein Beispiel für eine 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.

Code:
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

Es handelt sich hier um eine Integerdivision. Das Ergebnis kann hier deshalb immer nur ganzzahlig sein. Fließkommadivisionen müssen anders behandelt werden.

Gruß
Uni
-----

Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste