Программы умножения двоичных чисел. Сдвиг множителя и текущей суммы частичных. Обнуление текущей суммы частичных произведений (ЧП), страница 3

;****************************  D16_8 ****************************

; Подпрограмма деления целых двоичных чисел без знака

; формата 16:8=(16,8).

; Входные параметры: (Н,L) - делимое, (С) - делитель.

; Выходные параметры: (D,E) - частное, (Н) - остаток.

;****************************************************************

D16_8: 

MVI   B, 8

; Счетчик циклов

XRA   A

ADD   C

; (А) - делитель

; Нормализация делителя: устранение левых нулей

CYCLE1:

RAL

INR   B

JNC   CYCLE1

; Если выдвинутый разряд = 0

RAR

MOV   C, A

; (С) - нормализованный делитель

DCR   B

; Сохранение величины сдвигов делителя

MOV   A, B

SBI   B

PUSH   PSW

; Нормализация делимого: устранение левых нулей

CYCLE2:

XRA   A

ADD   H

; (А) - СТБ  делимого

JM   PER2

; Если старший разряд = 1

DAD   H

; Сдвиг делимого влево

DCR   B

JMP   CYCLE2

; Зацикливание

PER2:

LXI   D, 0

; Обнуление частного

; Вычитание делителя из делимого, (А) - СТБ делимого

SUB   C

INX   D

; Установка разряда частного = 1

JNC   PER3

; Если разность > 0

DCX   D

; Сброс разряда частного = 0

ADD   C

; Восстановление делимого

PER3:

MOV   H, A

; Проверка счетчика циклов на 0

XRA   A

ADD   B

JZ   EXIT

; Если счетчик = 0

; Сдвиг влево частного (D,E) и остатка (Н,L)

CYCLE:

XCHG

DAD   H

XCHG

DAD   H

MOV   A, H

; (А) - СТБ остатка

JC   PER4

; Если переполнение остатка

; Вычитание делителя из остатка

SUB   C

JNC   PER5

; Если разность > 0

; Разность < 0, восстановление остатка

ADD   C

MOV   H, A

JMP   PER6

; Переполнение остатка, установка разряда частного = 1

PER4:

SUB   C

; Вычитание делителя

PER5:

MOV   H, A

INX   D

; Разряд частного = 1

; Проверка конца цикла

PER6:

DCR   B

JNZ   CYCLE

; Зацикливание

; Коррекция остатка: сдвиг вправо

EXIT:

POP   PSW

; (А) - счетчик сдвигов

RZ

; Если счетчик = 0

MOV   C, A

XRA   A

ADD   H

; (А) - остаток

CYCLE3:

RAR

DCR   C

JNZ   CYCLE3

; Зацикливание

MOV   H, A

RET