§ Краткое описание

Эта процедура достаточно универсальна и позволяет без проблем делить целочисленные 16 битные значения с остатком.

§ Программный код

Делимое DE, делитель BC; DE - ответ, HL - остаток.
; Вход:  DE - что делить, BC - на что делить
; Выход: DE - ответ, HL - остаток

div16u:     push    af
            push    de
            exx
            pop     hl
            exx
            ld      hl, $0000
            ld      d, h
            ld      e, l
            ld      a, 16
div16ul:    push    af
            exx
            add     hl, hl
            exx
            adc     hl, hl
            sla     e                   ; Сдвиг DE (результата)
            rl      d
            inc     e                   ; Выставить 1 по умолчанию
            xor     a                   ; CF = 0
            sbc     hl, bc              ; HL = HL - BC
            jr      nc, div16us         ; HL < BC ? Если нет, пропуск
            add     hl, bc              ; Восстановить HL
            dec     e                   ; Убрать 1 -> 0
div16us:    pop     af
            dec     a
            jr      nz, div16ul
            pop     af
            ret