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

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

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

Делимое DE, делитель BC; DE - ответ, HL - остаток.
1; Вход:  DE - что делить, BC - на что делить
2; Выход: DE - ответ, HL - остаток
3
4div16u:     push    af
5            push    de
6            exx
7            pop     hl
8            exx
9            ld      hl, $0000
10            ld      d, h
11            ld      e, l
12            ld      a, 16
13div16ul:    push    af
14            exx
15            add     hl, hl
16            exx
17            adc     hl, hl
18            sla     e                   ; Сдвиг DE (результата)
19            rl      d
20            inc     e                   ; Выставить 1 по умолчанию
21            xor     a                   ; CF = 0
22            sbc     hl, bc              ; HL = HL - BC
23            jr      nc, div16us         ; HL < BC ? Если нет, пропуск
24            add     hl, bc              ; Восстановить HL
25            dec     e                   ; Убрать 1 -> 0
26div16us:    pop     af
27            dec     a
28            jr      nz, div16ul
29            pop     af
30            ret