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

;*************************  C16_10F  *****************************

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

; фиксированной перед старшим разрядом запятой формата 16 в двоично; десятичное число с фиксированной запятой ( ,Р1Р2Р3Р4Р5) формата 5*4.  

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

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

; Используется подпрограмма M16_10F.

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

; Последовательное умножение исходного числа на 10

C16_10F: 

CALL   M16_10F

PUSH   PSW

; Сохранение цифры Р1

CALL   M16_10F

PUSH   PSW

; Сохранение цифры Р2

CALL   M16_10F

PUSH   PSW

; Сохранение цифры Р3

CALL   M16_10F

PUSH   PSW

; Сохранение цифры Р4

CALL   M16_10F

MOV   L, A

; (L) - цифра Р5

; Упаковка цифр результата в регистры

POP   PSW

; Восстановление цифры Р4

RLC

RLC

RLC

RLC

ORA   L

MOV   L, A

; (L) - цифры Р4, Р5

POP   PSW

; Восстановление цифры Р3

MOV   H, A

; (H) - цифра Р3

POP   PSW

; Восстановление цифры Р2

RLC

RLC

RLC

RLC

ORA   H

MOV   H, A

; (H,L) - цифры Р2Р3Р4Р5

POP   PSW

; Восстановление цифры Р1

RET

; (А) - цифра Р1

;****************************  M16_10F  **************************

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

; с фиксированной перед старшим разрядом запятой

; формата 16 на основание десятичной системы: 10.   

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

; Выходные параметры: (A) - целая часть произведения (двоично; десятичная цифра), (В,С) - дробная часть произведения.

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

; Подготовка регистров

M16_10F:

MOV   H, B

MOV   L, C

; (H,L) - число с ФЗ

MOV   D, B

MOV   E, C

; (D,E) - число с ФЗ

XRA   A

MOV   B, A

MOV   C, A

; (В,С) = 0

; Сдвиг числа с ФЗ влево на 1 разряд в (В,H,L)

DAD   H

ADC   B

MOV   B, A

; (В,H,L) - (число с ФЗ)*2

; Сдвиг числа с ФЗ влево на 3 разряда в (С,D,E)

XCHG

; (H,L) - число с ФЗ

DAD   H

; Первый сдвиг

MOV   A, C

RAL

MOV   C, A

DAD   H

; Второй сдвиг

MOV   A, C

RAL

MOV   C, A

DAD   H

; Третий сдвиг

MOV   A, C

RAL

MOV   C, A

XCHG

; (С,D,E) - (число с ФЗ)*8

; Сложение сдвинутых чисел: умножение на 10

DAD   D

MOV   A, B

ADC   C

; (А,H,L) - (число с ФЗ)*10

MOV   B, H

MOV   C, L

; (В,С) - дробная часть

RET

; (А) - целая часть