Программы умножения двоичных чисел
| ;**************************** 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).
Ссылка на скачивание - внизу страницы.