; Division 16b/8b

lhld num    ; Lade numerator in RegHL
lda denom   ; Lade Denominator in RegB
mov b, a
mvi c, 10h ; Setze Schleifenzähler auf 15
xra a       ; Setze RegA = 0
lxi de, 0h  ; Setze Ergebnis = 0

loop:
  dad hl    ; Addiere hl+hl = 2hl = linksshift in carry
  ral       ; Hole carry in RegA
  cmp b     ; Passt denom in RegA?
  xchg      ; Lege Ergebnis in RegHL
  jc nosub  ; denom > RegA -> keine Subtraktion
    sub b
    dad hl  ; Linksshift Ergebnis +
    inx hl  ; 1 in Ergebnis schieben
    jmp next
  nosub:
  dad hl    ; Linksshift Ergebnis
            ; = 0 in Ergebnis schieben
  next:
  xchg      ; Lege num zurück in RegHL
  dcr c
jnz loop

hlt

org 100h

; Normales Divisionsbeispiel
;num: dw 5555h ; Numerator
;denom: db 7h  ; Denomerator
              ; -> C30h

; Beispiel mit Überlauf
num: dw 0FEDCh ; Numerator
denom: db 0BAh ; Denomerator
               ; -> 15h

end