§ Краткое описание
На вход подается DE и BC, на выходе получается результат HL:DE.Скорость выполнения этой процедуры не фиксирована и зависит от количества бит в BC. Чем меньше единичных бит - тем быстрее работает процедура за счет того, что пропускается сложение 32-х битных чисел, находящихся в памяти.
§ Программный код
1; ---------------------------------------------------------------------- 2; Умножение DE на BC (16 bit) 3; HL:DE-результат 4; ---------------------------------------------------------------------- 5 6mult32r: defw 0, 0 7mul16u: push bc 8 push af 9 10 ld a, 16 11 ld hl, $0000 12 ld (mult32r), hl 13 ld (mult32r+2), hl 14 15 ; Пересчитать 16 бит (максимум) 16mul16ul: push af 17 ld a, b 18 or c 19 ; Не считать старшие незначимые разряды 20 jr z, mul16ule 21 22 ; Проверка следующего бита 23 srl b 24 rr c 25 jr nc, mul16us 26 27 ; Сложить RES32 += HL:DE 28 push bc 29 push de 30 push hl 31 ex de, hl 32 ld bc, (mult32r) 33 add hl, bc 34 ld bc, (mult32r+2) 35 ex de, hl 36 adc hl, bc 37 ld (mult32r), de 38 ld (mult32r+2), hl 39 pop hl 40 pop de 41 pop bc 42 43 ; Умножение HL:DE на 2 44mul16us: sla e 45 rl d 46 adc hl, hl 47 pop af 48 dec a 49 jr nz, mul16ul 50 51 ; Выгрузка результата 52mul16uls: ld hl, (mult32r+2) 53 ld de, (mult32r) 54 pop af 55 pop bc 56 ret 57mul16ule: pop af 58 jr mul16uls