Лисья Нора

Оглавление


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

Эта процедура достаточно универсальна и позволяет без проблем делить целочисленные 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