Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.23 Mб
Скачать

Словесний опис алгоритму

  1. N=0;

  2. Аналізуємо N біт другого множника.

  3. Якщо поточний біт рівний 1, то п.3, якщо рівний 0, то п.5.

  4. Зсуваємо перший множник.

  5. Результат додаємо до попередньої суми.

  6. N = N + 1

  7. Якщо поточний розряд останній, то п. 8, якщо менше 7 то п.2.

  8. Кінець.

Приклад множення чисел

  1. Переводимо множник 1 в доповняльний код, наприклад -7:

інвертуємо інкрементуємо(+1 до молодшого розряду)

dec 7 248 -7 (249)

hex 0 7 F 8 F 9

bin 0000 0111 --> 1111 1000 --> 1111 1001

  1. Хід множення з коментарями:

-14 1111 1001

*

14 0000 1110

0000 0000початкова сума

1 1111 0010 — Перший крок, результат множення на 2-й розряд (зсув множеного на 1 розряд вліво)

1 1110 0100 — Другий крок, результат множення на 3-й розряд (зсув множеного на 2 розряд вліво)

1 1100 1000 — результат множення на 4-й розряд (зсув множеного на 3 розряд вліво)

сума: 1001 1110 — результат 158 (256-158 = 98) -7*14 = -98

9 Eрезультат 9E (FF-9E+1 = 62)

Блок-схема

Запис початкових даних

Додання

до

суми

Аналіз

біту

Другого множника

Зсув першого множника

т ак ні

так ні

Код програми

org 100h

lxi SP,210h

mvi A,-7

sta 200h

sta 205h

mvi A, 14

sta 201h

mvi C, 1

mvi B, 8

checkBit:

lda 201h

ana C

mvi A, 0

ral

mvi A, 0

mov A, C

ral

mov C, A

jz ralQ

lda 205h

add E

mov E, A

push D

ralQ:

mvi A, 0

ral

mvi A, 0

lda 205h

ral

sta 205h

dcr B

jnz checkBit

nop

hlt

Зміст файлу lr5.prn

0100 ORG 100h ;перехід на початкову адресу 100h

0103 311002 LXI SP,210H ;встановити верхівку стеку в 200h

0103 3EF9 MVI A,-7

0105 320002 STA 200H ;множник1 в пам'ять

0108 320502 STA 205H ;копія для зсуву

010B 3E0E MVI A, 14

010D 320102 STA 201H ;множник2 в пам'ять

010B 0E01 MVI C, 1 ;регістр С встановити в 1 (використовується для перевірки біта)

010D 0608 MVI B, 8 ;регістр В встановити в 8 (використовується для циклу)

CHECKBIT: ;мітка перевірки біта

010F 3A0102 LDA 201H ;зчитуємо множене

0112 A1 ANA C ;перевірка поточного біту (0-7)

0113 3E00 MVI A, 0

0115 17 RAL ;очищення Акумулятора і біту переносу

0116 3E00 MVI A, 0

0118 79 MOV A, C

0119 17 RAL ;зсув вліво регістру С для перевірки наступного біту

011A 4F MOV C, A

011B 7B MOV A, E ;сума з Е в Акумулятор

011C CA2A01 JZ RALQ ;якщо поточний біт 0, то перехід тільки для зсуву

0123 3A0502 LDA 205H

0126 83 ADD E ;сума попереднього результату і наступного біту

0127 5F MOV E, A

0128 D5 PUSH D ;запис проміжного результату в стек

0129 D5 PUSH D

RALQ:

012A 3E00 MVI A, 0 ;

012C 17 RAL ;очищення Акумулятора і біту переносу

012D 3E00 MVI A, 0 ;

012F 3A0002 LDA 205H

0132 17 RAL ;зсув множеного вліво

0133 320002 STA 205H

0136 05 DCR B

0137 C20F01 JNZ CHECKBIT ;перехід до перевірки наступного біту, якщо не кінець циклу

010F 00 NOP ;”холоста” операція процесора