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

;**************************  C8_10  ******************************

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

; формата 8 в двоично-десятичное (код 8421) число формата 3*4.

; Входной параметр: (С) - двоичное число.

; Выходной параметр: (Н,L) - эквивалентное двоично-десятичное число

; (3 цифры).

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

C8_10: 

LXI   H, 0

; Обнуление текущей суммы

MVI   B, 8

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

; Сдвиг двоичного числа влево

CYCLE:

MOV   A, C

RLC

MOV   C, A

; Двоично-десятичное удвоение суммы с учетом переноса

MOV   A, L

ADC   L

DAA

MOV   L, A

MOV   A, H

ADC   H

DAA

MOV   H, A

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

DCR   B

JNZ   CYCLE

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

RET

;**************************  C16_10   *****************************

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

; формата 16 в двоично-десятичное (код 8421) число формата 5*4.

; Входной параметр: (В,С) - двоичное число.

; Выходные параметры: (А,Н,L) - эквивалентное двоично-десятичное число

; (5 цифр).

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

; Обнуление текущей суммы (С,Н,L)

C16_10: 

XRA   A

MOV   H, A

MOV   L, A

MOV   D, B

MOV   E, C

; (D,E) - исходное число

MOV   C, A

MVI   B, 16

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

; Сдвиг двоичного числа влево

CYCLE:

XCHG

DAD   H

XCHG

; Двоично-десятичное удвоение суммы с учетом переноса

MOV   A, L

ADC   L

DAA

MOV   L, A

MOV   A, H

ADC   H

DAA

MOV   H, A

MOV   A, C

ADC   C

DAA

MOV   C, A

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

DCR   B

JNZ   CYCLE

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

MOV   A, C

RET

;**************************  C10_8******************************

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

; без знака формата 2*4 в двоичное число формата 8.

; Входной параметр: (А) - двоично-десятичное число.

; Выходной параметр: (А) - эквивалентное двоичное число.

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

; Выделение старшей (СТЦ) и младшей (МЛЦ) цифр числа

C10_8: 

MOV   В, A

ANI   0FH

MOV   C, A

; (С) - МЛЦ

MOV   А, B

ANI   0F0H

RRC

MOV   В, A

; (В) = СТЦ*8

; Двоичное сложение: СТЦ*(8+2)+МЛЦ

RRC

RRC

; (А) = СТЦ*2

ADD   B

; (А) = СТЦ*(8+2)

ADD   C

; (А) = СТЦ*10+МЛЦ

RET