§ Краткое описание
На вход подается DE и BC, на выходе получается результат HL:DE.Скорость выполнения этой процедуры не фиксирована и зависит от количества бит в BC. Чем меньше единичных бит - тем быстрее работает процедура за счет того, что пропускается сложение 32-х битных чисел, находящихся в памяти.
§ Программный код
; ---------------------------------------------------------------------- ; Умножение DE на BC (16 bit) ; HL:DE-результат ; ---------------------------------------------------------------------- mult32r: defw 0, 0 mul16u: push bc push af ld a, 16 ld hl, $0000 ld (mult32r), hl ld (mult32r+2), hl ; Пересчитать 16 бит (максимум) mul16ul: push af ld a, b or c ; Не считать старшие незначимые разряды jr z, mul16ule ; Проверка следующего бита srl b rr c jr nc, mul16us ; Сложить RES32 += HL:DE push bc push de push hl ex de, hl ld bc, (mult32r) add hl, bc ld bc, (mult32r+2) ex de, hl adc hl, bc ld (mult32r), de ld (mult32r+2), hl pop hl pop de pop bc ; Умножение HL:DE на 2 mul16us: sla e rl d adc hl, hl pop af dec a jr nz, mul16ul ; Выгрузка результата mul16uls: ld hl, (mult32r+2) ld de, (mult32r) pop af pop bc ret mul16ule: pop af jr mul16uls