Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по МП[1].doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
513 Кб
Скачать
☆

5.3.3. Умножение

Умножение двух восьмибитных чисел без знака может быть выполнено несколькими способами. Например, путем повторного сложения или применения операции регистрового сдвига.

Повторное умножение обеспечивает простейшую, но самую медленную форму умножения. Например, произведение 20×3А может быть получено путем прибавления 20 к содержимому аккумулятора (предварительно обнуленному) 3А раз.

Используя операции сдвига, можно получить более быстрое умножение. Отметим еще особенность умножения двоичных чисел:

011 = 3

×

110 = 6

000

011

011_____

Х0010=18

При умножении множителя на соответствующий разряд множителя будет получен либо множитель, либо нуль.

Итак, алгоритм умножения будет включать в себя следующие операции:

  1. Проверка бита множителя, начиная с младшего разряда: если 1, то прибавить множенное к старому байту промежуточного результата (при проверке самого последнего бита множителя значение промежуточного результата равен С); если бит множителя равен 0, то переход к пункту 2:

  2. Сдвиг всего двухбайтового промежуточного результата вправо на 1 бит.

Повторение пунктов 1 и 2 необходимо производить до тех пор, пока не будут проверены все 8 бит множителя.

Далее проведена программа умножения RUL T, обеспечиваются рассмотренного алгоритма с учетом следующих начальных условий:

- регистр Е содержит старший байт результата умножения (промежуточного и окончательного);

- регистр С перед началом подпрограммы содержит множитель, ?????байт результата умножения;

- регистр D содержит ???

Сдвиг шестнадцатибитного промежуточного результата выполняемая двумя командами RAR по следующей схеме:

в начале сдвиг регистра С

затем сдвиг регистра Е

MULT : MVI B, 0 ; обнуление старшего байта результата

MVI E, 9 ; установка счетчика бит

MULT0: MOV A, C ; множитель в аккумулятор

RAR ; сдвиг множителя и младшего байта результата

MOV C, A ; хранение результата

DCR E ; счетчик бит = 0?

JZ DONE ; если да, то конец

MOV A, B ; иначе старший байт результата →А

JNS MULT1; младший бит множителя = 0? Если да, то переход по MULTE

ADD D ; прибавление множимого к старшему байту результата

MULTE: RAR ; сдвиг старшего байта результата

MUV B, A ; хранение старшего байта результата

JMP MULT0; ?????

DONE : RET

Рассмотрим пример выполнения программы MULT при умножении двух чисел 2AR×3CH=9D8H.

Исходное состояние: (B)=00000000 (старший байт результата);

(С)=00111100=3СН (множитель, по окончании умножить – младший байт результата).

(D)=00101010=2AH (множимое).

Изменение содержимого регистров записан в табл.5.1.

Таблица 5.1.

Номер

цикла

Операция

Содержимое (В)

Флаг С после 2го сдвига

(С)

Флаг С после 1го сдвига

1

2

3

4

5

6

7

8

9

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

ADD

RAR

0 000000

0000000

0 000000

0000000

0 0101010

00010101

0 0111111

00011111

0 1001001

00100100

0 1001110

00100111

0 0100111

00010011

0 0010011

00001001

00001001

0

0

0

1

1

0

1

1

0 0011110

0 0001111

0 0000111

0 0000011

1 0000001

1 1000000

0 1100000

1 0110000

11011000

0

0

1

1

1

1

0

0

0