Программы умножения двоичных чисел
;**************************** M8_8 ***************************** |
||
; Подпрограмма умножения целых двоичных чисел без знака ; формата 8*8=16. ; Входные параметры: (А) - множитель, (Е) - множимое. ; Выходной параметр: (Н,L) - произведение. |
||
;**************************************************************** |
||
M8_8: |
MOV H, A |
; (Н) - множитель |
; Обнуление регистров (D), (L) |
||
MVI D, 0 |
||
MVI L, 0 |
||
MVI B, 8 |
; Счетчик циклов |
|
; Сдвиг множителя и текущей суммы частичных ; произведений (ЧП) влево |
||
CYCLE: |
DAD H |
|
JNC PER |
; Если разряд множителя = 0 |
|
; Сложение множимого с текущей суммой ЧП |
||
DAD D |
||
; Проверка конца цикла |
||
PER: |
DCR B |
|
JNZ CYCLE |
; Зацикливание |
|
RET |
;*************************** M16_8 ***************************** |
||
; Подпрограмма умножения целых двоичных чисел без знака ; формата 16*8=24. ; Входные параметры: (А) - множитель, (D,Е) - множимое. ; Выходные параметры: (А,Н,L) - произведение. |
||
;**************************************************************** |
||
M16_8: |
LXI H, 0 |
; Обнуление суммы частичных ; произведений (ЧП) |
LXI B, 8 |
; (В)=0, (С)=8 - счетчик циклов |
|
; Сдвиг текущей суммы ЧП и множителя влево |
||
CYCLE: |
DAD H |
|
ADC A |
||
JNC PER |
||
; Сложение множимого с текущей суммой ЧП |
||
DAD D |
||
ADC B |
||
; Проверка конца цикла |
||
PER: |
DCR C |
|
JNZ CYCLE |
; Зацикливание |
|
RET |
;************************** M16_16***************************** |
||
; Подпрограмма умножения целых двоичных чисел без знака ; формата 16*16=32. ; Входные параметры: (В,С) - множитель, (D,Е) - множимое. ; Выходные параметры: (В,С,Н,L) - произведение. ; Используется подпрограмма M16_8. |
||
;**************************************************************** |
||
; Обнуление текущей суммы частичных произведений (ЧП) |
||
M16_16: |
XRA A |
|
MOV H, A |
||
MOV L, A |
||
; Умножение множимого на МЛБ множителя |
||
MOV A, C |
||
PUSH B |
; Сохранение множителя |
|
CALL M16_8 |
; (A,H,L) - произведение 1 (ПР1) |
|
; Сохранение ПР1 |
||
XTHL |
; Сохранение СРБ, МЛБ ПР1 ; (H,L) - множитель |
|
PUSH PSW |
; Сохранение СТБ ПР1 |
|
; Умножение множимого на СТБ множителя |
||
MOV A, H |
; (А) - СТБ множителя |
|
CALL M16_8 |
; (A,H,L) - произведение 2 (ПР2) |
|
; Сложение сдвинутых на 8 разрядов ПР1 и ПР2 |
||
MOV B, A |
; (В) - СТБ ПР2 |
|
POP PSW |
; (А) - СТБ ПР1 |
|
ADD H |
||
MOV C, A |
; (С) - сумма СТБ ПР1 и СТБ ПР2 |
|
JNC PER2 |
||
INR B |
; Учет переноса в СТБ |
|
PER2: |
MOV H, L |
; (Н) - МЛБ ПР2 |
MVI L, 0 |
||
POP D |
; (D,E) - СРБ, МЛБ ПР1 |
|
DAD D |
||
RNC |
||
INX B |
; Учет переноса в СТБ |
|
RET |
;************************** M16_16F **************************** |
||
; Подпрограмма умножения дробных двоичных чисел без знака с ФЗ ; формата ,16 ´ ,16 = ,16 . ; Входные параметры: (В,С) - множитель, (D,E) - множимое. ; Выходные параметры: (В,С) - произведение. ; Используется подпрограмма M16_16. |
||
;**************************************************************** |
||
M16_16F: |
CALL M16_16 |
; (В,С,Н,L) - произведение |
; Округление СТБ,СРБ произведения |
||
MOV A, H |
||
RAL |
||
JNC PER |
||
INX B |
||
PER: |
RET |
; (В,С) - произведение |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.