Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ТСА.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
914.94 Кб
Скачать

5.1.2.Умножение чисел.

Известно несколько алгоритмов умножения чисел. При одном из них умножение можно заменить многократным сложением, например: 14 * 3 = 14 + 14 + 14. Существенный недостаток этого способа – значительная длительность процесса сложения. При другом алгоритме умножение осуществляется столбиком. Этот алгоритм применим для умножения двоичных чисел, например:

0110

= 6

0011

= 3

0110

0110

0000

0000

0010010

= 18

При вычислении результата по второму способу необходимо осуществлять многократное суммирование со сдвигом влево множимого при одновременной проверке содержимого разрядов множителей, начиная со стороны его младшего разряда. При этом если в очередном разряде множителя записана 1, то множимое прибавляется к сумме и сдвигается влево на 1 разряд, а если в разряде записан 0 – произойдет только сдвиг множимого. Сдвиг множимого влево можно заменить сдвигом суммы вправо. По этому принципу работает программа умножения двух однобайтных чисел с получением двухбайтного результата Прогр.  5 .9 (см. ниже).

Входными параметрами программы Прогр.  5 .9, алгоритм которой приведен ниже, на Рис.  5 .4, являются следующие регистры: регистр D – множимое, регистр E – множитель. Результат записывается в регистровую пару BC.

Прогр. 5.9. Программа умножения двух однобайтных чисел с получением двухбайтного результата.

MVI D, A1h

;Запись в D множимого.

MVI E, 9Bh

;Запись в E множителя.

LXI B, 0000h

;Очистить регистры B и C.

MVI L, 08h

;Загрузка счетчика.

LAB_1 :

MOV A, E

;Множитель в Акк.

RAR

;Сдвиг анализируемого бита в триггер C.

MOV E, A

;Возврат в E сдвинутого множителя.

JNC LAB_2

;Если бит множителя равен нулю, то идти на LAB_2.

MOV A, B

;Загрузка в Акк. старшей частичной суммы.

ADD D

;Прибавление к нему множимого.

MOV B, A

;Возврат в B старшей частичной суммы.

LAB_2 :

MOV A, B

;Загрузка в Акк. старшей частичной суммы.

RAR

;Сдвиг старшей частичной суммы вправо (младший бит в C).

MOV B, A

;Возврат в B старшей частичной суммы.

MOV A, C

;Загрузка в Акк. младшей частичной суммы.

RAR

;Сдвиг младшей частичной суммы вправо (C в старший бит).

MOV C, A

;Возврат в C младшей частичной суммы.

DCR L

;Декрементация счетчика.

JNZ LAB_1

;Если разряд не последний, то идти на LAB_1.

HLT

;Выход из программы.

Рис. 5.4. Алгоритм работы программы умножения двух однобайтных чисел с получением двухбайтного результата.