«Умножение целых двоичных чисел без знак формата 8*8=16»
Метод умножения: 8 циклов сдвигов множителя и текущей суммы частичных произведений влево.
Входные параметры: (С) – множитель (Х), (Е) – множимое (У).
Выходной параметр: (H,L) – произведение, используются все регистры, сохраняются (С), (Е).
адрес
| машинный
код
| метка
| мнемокод
| примечание
| загрузка сомножителей
|
| 0E XX
|
| MVI C,XX
| Загрузка множителя (Х)
|
| 1E YY
|
| MVI E,YY
| Загрузка множимого (У)
|
| CD5008
|
| CALL Y8N
| вызов программы умножения
|
| FF
|
| RST 7
| Переход к программе «Монитор»
| обнуление регистров произведения
|
| AF
| Y8N
| XRA A
| Обнуление А, CY=0
|
|
|
| MOV H,A
| Обнуление H
|
| 6F
|
| MOV L,A
| Обнуление L
|
|
|
| MOV D,A
| Обнуление D
| проверка сомножителей на 0
|
|
|
| ADD E
| (A)ß(A)+(E)
|
| C8
|
| RZ
| Возврат, если Y =0
|
| AF
|
| XRA A
| Обнуление А, CY=0
|
|
|
| ADD C
| (A)ß(A)+(C)
|
| C8
|
| RZ
| Возврат, если X=0
|
|
|
| MOV H,C
| Загрузка множителя в (H)
| 085A
|
|
| MVI B,8
| Загрузка счетчика циклов
| сдвиг множителя и суммы частичных произведений влево
| 085C
|
| M1
| DAD H
| (H,L)ß(H,L)+(H,L)
| 085D
| D26108
|
| JNС M2
| Переход на M2, если разряд Х=0 (CY)=0
| сложение множимого с текущей суммой частичных произведений
|
|
|
| DAD D
| (H,L)ß(H,L)+(D,E)
| проверка конца цикла
|
|
| M2
| DCR B
| (B)ß(B)-1
|
| C25C08
|
| JNZ M1
| Переход на М1, если Z=0
|
| C9
|
| RET
| возврат в основную программу
|
|