
- •Введение
- •1. Краткие теоретические сведения по ассемблеру мп к1801вм1
- •1.1. Регистровая модель
- •1.2. Адресное пространство
- •1.3. Методы адресации
- •1.3.1. Методы прямой адресации
- •1.3.2. Методы косвенной адресации
- •1.3.3. Методы адресации, использующие в качестве рон r7
- •2. Алгоритмы сортировки
- •2.1. Оценка алгоритма сортировки
- •2.2. Классификация алгоритмов сортировки
- •2.3. Сортировка пузырьком
- •3. Определение четности чисел
- •3.1. Определение чисел кратных двум
- •3.2. Определение числа единиц в числе
- •4. Определение кратности любому числу
- •5. Определение модуля числа
- •6. Многословное умножение
- •Заключение
- •Приложения Приложение 1. Оформление отчета по курсовой работе
- •Результаты работы программы
- •Приложение 2. Список команд
- •Приложение 3. Эмулятор Ersatz-11
6. Многословное умножение
В процессе выполнения курсовой работы появляется необходимость умножать операнды с разрядностью, более 1 слова.
Это возможно реализовать, например суммированием одного из множителей столько раз, сколько задается вторым множителем.
Однако, можно воспользоваться алгоритмом умножения в столбик и разработать программу, работающую аналогичным образом.
Рассмотрим пример. Умножим два слова на одно.
Еще один пример. Умножение двух двухсловных множителей.
Схематично обозначено: W – слова, составляющие множители, Р – произведения промежуточные, С – переносы, S – итоговое произведение.
Выходом команды MUL является 32- (или 16- (для нечетных регистров) разрядное слово, которое записывается в регистры, указываемые в команде. Следовательно трактовать схемы можно следующим образом:
C10 P10 = W10 * W20 произведение младших слов (W#0) умножаемых слов (W1, W2) содержиться в C10 – старшая часть произведения, P10 – младшая часть произведения.
Аналогично для С2.
С3# – переносы от арифметического суммирования промежуточных произведений.
Код программы, реализующий умножение по данному алгоритму достаточно прост.
Допустим: 400, 402 - 1е слово; 404, 406 - 2е слово; 410, 412, 414, 416 – произведение.
Адрес |
Метка |
Мнемокод |
Комментарий |
1000 |
|
MOV 400, R0 |
Умножаем младшее слово 2-го множителя |
|
|
MOV 402, R2 |
на 1-й множитель |
|
|
MUL 404, R0 |
|
|
|
MUL 404, R2 |
|
|
|
MOV R1, 410 |
R1 - младшее слово произведения |
|
|
ADD R0, R3 |
Получение 1-го произведения |
|
|
ADC R2 |
|
|
|
MOV R3, 412 |
Сохранение 1-го произведения в память |
|
|
MOV R2, 414 |
|
|
|
MOV 400, R0 |
Умножаем старшее слово 2-го множителя |
|
|
MOV 402, R2 |
на 1-й множитель |
|
|
MUL 406, R0 |
|
|
|
MUL 406, R2 |
|
|
|
ADD R0, R3 |
Получение 2-го произведения |
|
|
ADC R2 |
|
|
|
ADD R1, 412 |
Получение итогового произведения |
|
|
ADC 414 |
|
|
|
ADC 416 |
|
|
|
ADD R3, 414 |
|
|
|
ADC 416 |
|
|
|
ADD R2, 416 |
|
|
|
MOV 416, R0 |
Декоративная надстройка для |
|
|
MOV 414, R1 |
эмулятора Ersatz-11 |
|
|
MOV 412, R2 |
|
|
|
MOV 410, R3 |
|
|
|
HALT |
Остановиться |
Авторы надеятся, что увеличение или уменьшение разрядности множителей на основе предложенных алгоритма и кода не составит для студентов особого труда.