Міністерство освіти і науки України
Національний університет "Львівська політехніка"
Кафедра САПР
Звіт
про виконання лабораторної роботи № 5
на тему: " ОПЕРАЦІЇ МНОЖЕННЯ ТА ДІЛЕННЯ ЦІЛИХ БЕЗЗНАКОВИХ ТА ЗНАКОВИХ ЧИСЕЛ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А)"
з курсу: "Архітектура комп’ютерів"
1. МЕТА РОБОТИ
Вивчити алгоритми виконання операцій множення та ділення цілих беззнакових і цілих знакових чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набути практичних навиків складання та налагоджування програм з використанням цих алгоритмів.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Набір команд арифметичних операцій чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А) не має команди множення або ділення над двома операндами. Тому для реалізації прикладних задач, де необхідно виконати дані арифметичні дії, застосовуються алгоритми що використовують закладений набір команд у МП КР580ВМ80А.
2.1 Арифметична операція множення
Найпростіший алгоритм множення цілих двійкових чисел без знака полягає у накопиченні множеного, яке виконується m раз, де m - значення множника. Якщо, наприклад, 8-бітний множник знаходиться в акумуляторі, 8-бітне множене - в регістрі С, а регістри B,Н і L-очищені, тоді подальша програма формує 16-бітний добуток в регістровій парі Н L :
MULT_1: DCR A ; Декремент множника
JZ EXIT ; Вихід на кінець програми
DAD B ; Накопичення множеного
JMP MULT_1 ; Повторювати до завершення
EXIT: HLT ; Кінець роботи програми.
Основний недолік безпосереднього накопичення множника або множеного, що робить його непрактичним, полягагє в недостатньо високій швидкодії виконання операції множення.
Більш поширений спосіб грунтується на аналізі розрядів множника представленого у двійковій формі запису з подальшим накопиченням множеного і зсувам проміжних результатів суми або множника. Даний алгоритм ефективніший в порівнянні з безпосереднім накопиченням завдяки можливому зменшенні кількості додавань. Наприклад, а) безпосереднє множення цілих знакових чисел (+3)*(+5), б) множення цілих знакових чисел (-3)*(+5) без накопичення нульових часткових добутків:
а) 0011 (+3) б) 1101 (-3)
* 0101 *(+5) * 0101 *(+5)
0011 1101
0000 1101
0011 10 0 0 0 1
0000 (-15 в доповнюючому коді)
0001111
Алгоритм множення без накопичення нульових часткових добутків реалізується циклічним процесом, на кожному кроці якого:
- аналізується черговий біт множника;
- в залежності від його значення відбувається додавання множеного до попередньої суми (біт=1) або не відбувається (біт=0) відбувається додавання множеного до попередньої суми часткових добутків.
- відбувається зміна взаємного положення множеного і суми.
Добуток n - бітних співмножників має довжину не більше 2n біт. Існують різноманітні варіанти реалізації даного способу, які визначаються тим, починаючи з яких цифр (розрядів) старших чи молодших аналізується множник, і що зсувається - множене чи сума часткових добутків. Наприклад,
а) множення (+5)*(+3) без додавання часткових добутків, починаючи з старших розрядів множника, б) множення (-5)*(+3) без додавання часткових добутків, використовуючи зсув суми часткових добутків починаючи з молодших розрядів множника:
а) 0101 (+5) б) (-5)*(+3) =(1011)*(0011)
* 0011 (+3)
0101 00000000 ; початкова сума
0101 +1011 ; (1)
0001111 10110000 ( ; зсув суми добутків
11011000
+ 1011 ; (1)
110001000 ( ; зсув суми добутків
11000100 ( ; зсув (0)
11100010 ( ; зсув (0)
Результат операції множення: (91) 11110001
Використання набору арифметико-логічних команд МП КР580ВМ80А ефективно для реалізації алгоритму множення, в якому множене або сума часткових добутків зсуваються вліво. Зсув вправо і 8-розрядне додавання виконуються тільки в акумуляторі А, а використання команди DAD RP виконує 16-розрядне додавання і її форма DAD H еквівалентна зсуву 16-бітного вмісту реістрової пари HL вліво на один біт з передачею старшого біта в прапорець перенесення.
Наведені алгоритми виконують операцію множення для цілих беззнакових чисел. Коли співмножники представлені в доповнюючому коді, тобто маєм виконати добуток над знаковими цілими числами, тоді формально виконання операції множення полягає в реалізації такого правила:
- за знаками співмножників утворити і тимчасово зберегти знак добутку;
- утворити абсолютні значення співмножників і перемножити їх ;
- з врахуванням знака добутку представити результат у доповнюючому коді.
Однак, на практиці застосовують спеціальні алгоритми множення знакових чисел. Так, спосіб знакового множення вимагає, щоб множник завжди був додатній. Тоді, в залежності від набору знаків множеного і множника: (+)*(+)=(+) ; множник додатній
(-)*(+)=(-) ; множник додатній
(+)*(-)=(-) ;множник від'ємний
(-)*(-)=(+) ; множник від'ємний
виконуєм перетворення множеного і множника у випадках в), г) у доповнюючий код для одержання додатнього множника. Виконання алгоритму знакового множення розглянемо на конкретному прикладі (-13)*(+7):
10011
* 00111 ; починаєм з молодших розрядів
0000000000 ; початкова сума
+10011
1001100000 ( ; зсув суми добутків після кожного додавання
1100110000
+10011
10110010000 ( ; зсув суми добутків після кожного додавання
1011001000
+10011
10100101000 ( ; зсув суми добутків після кожного додавання
1010010100 ( ; зсув без додавання нульовий біт множника
1101001010 ( ; зсув без додавання нульовий біт множника
1110100101 ; добуток в доповнюючому коді рівнний 91.
Найбільш поширеним і ефективним при реалізації множення цілих знакових чисел є алгоритм Бута (Booth's Algorithm). В ньому не враховується значення знаків множеного і множника. В основу визначення добутку покладено правила аналізу переходів від одного розряду множника до наступного, при цьому якщо біти змінюються:
- з 0 на 1 виконуєм віднімання множеного від попередньої суми (додаєм,
перетворивши множене в доповнюючий код);
- з 1 на 0 виконуєм додавання множеного (в даному коді) до попередньої
суми.
- з 0 на 0 виконуєм зсув вправо з врахуванням вмісту старшого розряду;
- з 1 на 1 виконуєм зсув вправо з врахуванням вмісту старшого розряду.
Наприклад, 11101 (-3) 1101 (-3)
* 00101 * (+5) *1011 * (-5)
(-15) (+15)
0000000000 0 ( 0(1(0(1( 0 00000000 1(0(1(1( 0
+00011 (0,1) +0011 (0,1)
0001100000 ( ; зсув суми 00110000 ( ; зсув суми
0000110000 00011000 ( (1,1)
+11101 (1,0) 00001100
1111010000 ( ; зсув суми +1101 (1,0)
1111101000 11011100 ( ; зсув суми
+00011 (0,1) 11101110
0001001000 ( ; зсув суми +0011 (0,1)
0000100100 100011110 ( ; зсув суми
+11101 (1,0) 00001111 ; результат
1111000100 ( ; зсув суми
1111100010 ( ; зсув суми
1111110001 ; результат (-15)
Після кожного додавання/віднімання проводим зсув часткової суми на один розряд вправо з врахуванням її значення старшого розряду. Тобто, якщо в старшому розряді біт рівний 0 або 1, то при зсуві вправо в старший розряд записується відповідно аналогічний біт.
2.2 Арифметична операція ділення
Операція ділення обернена по відношенню до операції множення і реалізується подібними циклічними діями. Позначимо через X-ділене, Y-дільник і Z=X/Y - частка, вважаючи їх цілими беззнаковивми числами. При діленні цілих чисел прийнято як додатковий результат формувати ще й залишок R. Для операцій ділення є характерним випадок ділення на нуль (Y=0).
Найпростіший безпосередній спосіб ділення цілих двійкових чисел без знака полягає у відніманні дільника від діленого з накопиченням доки отриманий залишок буде менший дільника (Y>R). Наприклад, 8-бітне ділене знаходиться в регістрі В, 8-бітний дільник у регістрі D регістр H і C очищені, програма формує 8-бітну частку у регістрі C і залишок в регістрі А:
DIV_1: MOV A, D
CPI 0h
JNZ DIV
MVI H, EEh
JMP END
DIV: MOV A,B
CYCLE: SUB D
JC L1
INC C
JMP CYCLE
L1: ADD D
END: HLT
Основний недолік способу безпосереднього діленяя, який робить його непрактичним, полягає в недостатньо високій швидкодії програми.
Простіший варіант виконується за правилом віднімання -зсув. Оскільки частку можна отримати тільки починаючи зі старших розрядів, то можливі випадки використання - зі зсувом залишка вліво і зі зсувом дільника вправою. Другий випадок на практиці не використовується через необхідність мати регістри частки і дільника подвійної довжини.
При діленні цілих чисел отримують частку і залишок також у вигляді цілих чисел, причому знак залишку співпадає зі знаком діленого. Коли ділене і дільник представлеені в доповнюючому коді (від'ємні числа), то стандартний прийом виконання операції ділення вимагає:
- по знакових бітах діленого і дільника утворити і тимчасово зберегти знак частки Z =X ( Y і залишку R;
- утворити абсолютні значення діленого і дільника і виконати алгоритм ділення;
- з врахуванням знаків частки Z і залишку R представити, при необхідності, результат в доповнюючому коді.
Найбільшого застосування знайшли алгоритми ділення з відновленням і без відновлення залишку. Процес ділення за алгоритмом з відновленням залишку виконує циклічно повторювану послідовність дій. В першому повторені циклу - ділене, а в наступних повтореннях циклу - залишок зсуваються на один розряд вліво і після цього з нього віднімається дільник. У випадку, одержаного нового залишку, як додатнє число, то в черговий розряд частки (починаючи зі старшого розряду) записується одиниця (1), в протилежному випадку - в розряд частки записується нуль (0), а до залишку дадається дільник. Тобто, відновлюється попередній зсунутий залишок. Дії повторюються циклічно n раз (n - число розрядів дільника). В результаті отримуєм частку, а останній залишок буде результуючим залишком операції ділення.
Алгоритми ділення без відновлення залишку, при від'ємному залишку діленого і дільника, не додає дільник Y для відновлення одержаного залишку. Виключення в алгоритмі операції відновлення залишку зменшує час проходження циклів, однак необхідність в алгоритмі визначення типу належної виконанню операції (додавання або віднімання) нівелює цю перевагу. Крім цього, необхідно в алгоритмі виконувати віднімання при першому проходженні циклу і відновлення кінцевого залишку в останньому цикліпри формуванні частки, що потребує додаткових затрат. Тому при програмній реалізації алгоритму ділення для МПС рекомендують вибирати спосіб обчислення з відновленням залишку.
Ділення цілих знакових чисел організується складніше, ніж множення. ЦЕ пояснюється тим, що в залежності від знаків операндів і проміжнихї результатів, по-перше, окремі розряди частки необхідно формувати різними способами, а по-друге, дільник необхідно необхідно або віднімати від залишку діленого, або додавати до нього.
Тому рекомендують виконувати попереднє перетворення доповнюючих кодів операндів діленя в прямі коди і після одержання від'ємного результату формувати його прямий код.
Індивідуальне завдання. Варіант №23
Виконати операцію множення цілих знакових чисел 17*(-8) за алгоритмом множення цілих знакових чисел. Результат записати у пам’ять.
Блок-схема алгоритму виконання завдання:
-
+
-
+
- +
-
+ -
-
+
-
+
Текст програми:
ORG 100H
LXI SP,200H
MVI A,17
STA 300H
MVI A,-8
STA 301H
LDA 300H
LXI H,302H
CALL CHECK
LDA 301H
LXI H,303H
CALL CHECK
LDA 302H
ORI 00000000B
LDA 300H
CNZ CONVERT
STA 300H
LDA 303H
ORI 00000000B
LDA 301H
CNZ CONVERT
STA 301H
LDA 301H
MOV E,A
LDA 300H
CALL MULTAE
LDA 302H
ORI 00000000B
CNZ CONVERTHL
LDA 303H
ORI 00000000B
CNZ CONVERTHL
SHLD 304H
HLT
CHECK:
PUSH PSW
ANI 10000000B
MOV M,A
POP PSW
RET
CONVERT:
PUSH B
PUSH PSW
XRI 11111111B
INR A
MOV B,A
POP PSW
MOV A,B
POP B
RET
CONVERTHL:
PUSH PSW
MOV A,H
XRI 11111111B
MOV H,A
MOV A,L
XRI 11111111B
MOV L,A
INX H
POP PSW
RET
MULTAE:
LXI H,0
MVI D,0
LOOP:
ORA A
JZ EXIT
RAR
JNC NOADD
DAD D
NOADD:
XCHG
DAD H
XCHG
JMP LOOP
EXIT:
RETОпис тексту програми:
ORG 100H
LXI SP,200H
MVI A,17
STA 300H
MVI A,-8
STA 301H
LDA 300H
LXI H,302H
CALL CHECK
LDA 301H
LXI H,303H
CALL CHECK
LDA 302H
ORI 00000000B
LDA 300H
CNZ CONVERT
STA 300H
LDA 303H
ORI 00000000B
LDA 301H
CNZ CONVERT
STA 301H
LDA 301H
MOV E,A
LDA 300H
CALL MULTAE
LDA 302H
ORI 00000000B
CNZ CONVERTHL
LDA 303H
ORI 00000000B
CNZ CONVERTHL
SHLD 304H
HLT
CHECK:
PUSH PSW
ANI 10000000B
MOV M,A
POP PSW
RET
CONVERT:
PUSH B
PUSH PSW
XRI 11111111B
INR A
MOV B,A
POP PSW
MOV A,B
POP B
RET
CONVERTHL:
PUSH PSW
MOV A,H
XRI 11111111B
MOV H,A
MOV A,L
XRI 11111111B
MOV L,A
INX H
POP PSW
RET
MULTAE:
LXI H,0
MVI D,0
LOOP:
ORA A
JZ EXIT
RAR
JNC NOADD
DAD D
NOADD:
XCHG
DAD H
XCHG
JMP LOOP
EXIT:
RET
Карта пам’яті
Адреси
Дані
Коментарі
DEC
HEX
DEC
HEX
BIN
768
769
770
771
772
773
300
301
302
303
304
305
17
-8 / 8
0
128
120
255
11
F8 / 08
00
80
78
FF
00010001
11111000 / 00001000
00000000
10000000
01111000
11111111
Множене
Множник / перетворений множник
Знак множеного("+"=00h, "-"=80h)
Знак множника ("+"=00h, "-"=80h)
Результат множення 17*(-8)=-136
Старший байт результату
Результати виконання програми
C0Z0M0E0I0 A=00 B=0000 D=0000 H=0000 S=0100 P=0100 LXI SP,0200
C0Z0M0E0I0 A=00 B=0000 D=0000 H=0000 S=0200 P=0103 MVI A,11
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0000 S=0200 P=0105 STA 0300
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0000 S=0200 P=0108 MVI A,F8
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0000 S=0200 P=010A STA 0301
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0000 S=0200 P=010D LDA 0300
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0000 S=0200 P=0110 LXI H,0302
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0302 S=0200 P=0113 CALL 0159
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0302 S=01FE P=0159 PUSH PSW
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0302 S=01FC P=015A ANI 80
C0Z1M0E1I0 A=00 B=0000 D=0000 H=0302 S=01FC P=015C MOV M,A
C0Z1M0E1I0 A=00 B=0000 D=0000 H=0302 S=01FC P=015D POP PSW
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0302 S=01FE P=015E RET
C0Z0M0E0I0 A=11 B=0000 D=0000 H=0302 S=0200 P=0116 LDA 0301
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0302 S=0200 P=0119 LXI H,0303
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0303 S=0200 P=011C CALL 0159
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0303 S=01FE P=0159 PUSH PSW
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0303 S=01FC P=015A ANI 80
C0Z0M1E0I1 A=80 B=0000 D=0000 H=0303 S=01FC P=015C MOV M,A
C0Z0M1E0I1 A=80 B=0000 D=0000 H=0303 S=01FC P=015D POP PSW
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0303 S=01FE P=015E RET
C0Z0M0E0I0 A=F8 B=0000 D=0000 H=0303 S=0200 P=011F LDA 0302
C0Z0M0E0I0 A=00 B=0000 D=0000 H=0303 S=0200 P=0122 ORI 00
C0Z1M0E1I0 A=00 B=0000 D=0000 H=0303 S=0200 P=0124 LDA 0300
C0Z1M0E1I0 A=11 B=0000 D=0000 H=0303 S=0200 P=0127 CNZ 015F
C0Z1M0E1I0 A=11 B=0000 D=0000 H=0303 S=0200 P=012A STA 0300
C0Z1M0E1I0 A=11 B=0000 D=0000 H=0303 S=0200 P=012D LDA 0303
C0Z1M0E1I0 A=80 B=0000 D=0000 H=0303 S=0200 P=0130 ORI 00
C0Z0M1E0I0 A=80 B=0000 D=0000 H=0303 S=0200 P=0132 LDA 0301
C0Z0M1E0I0 A=F8 B=0000 D=0000 H=0303 S=0200 P=0135 CNZ 015F
C0Z0M1E0I0 A=F8 B=0000 D=0000 H=0303 S=01FE P=015F PUSH B
C0Z0M1E0I0 A=F8 B=0000 D=0000 H=0303 S=01FC P=0160 PUSH PSW
C0Z0M1E0I0 A=F8 B=0000 D=0000 H=0303 S=01FA P=0161 XRI FF
C0Z0M0E0I0 A=07 B=0000 D=0000 H=0303 S=01FA P=0163 INR A
C0Z0M0E0I0 A=08 B=0000 D=0000 H=0303 S=01FA P=0164 MOV B,A
C0Z0M0E0I0 A=08 B=0800 D=0000 H=0303 S=01FA P=0165 POP PSW
C0Z0M1E0I0 A=F8 B=0800 D=0000 H=0303 S=01FC P=0166 MOV A,B
C0Z0M1E0I0 A=08 B=0800 D=0000 H=0303 S=01FC P=0167 POP B
C0Z0M1E0I0 A=08 B=0000 D=0000 H=0303 S=01FE P=0168 RET
C0Z0M1E0I0 A=08 B=0000 D=0000 H=0303 S=0200 P=0138 STA 0301
C0Z0M1E0I0 A=08 B=0000 D=0000 H=0303 S=0200 P=013B LDA 0301
C0Z0M1E0I0 A=08 B=0000 D=0000 H=0303 S=0200 P=013E MOV E,A
C0Z0M1E0I0 A=08 B=0000 D=0008 H=0303 S=0200 P=013F LDA 0300
C0Z0M1E0I0 A=11 B=0000 D=0008 H=0303 S=0200 P=0142 CALL 0175
C0Z0M1E0I0 A=11 B=0000 D=0008 H=0303 S=01FE P=0175 LXI H,0000
C0Z0M1E0I0 A=11 B=0000 D=0008 H=0000 S=01FE P=0178 MVI D,00
C0Z0M1E0I0 A=11 B=0000 D=0008 H=0000 S=01FE P=017A ORA A
C0Z0M0E1I0 A=11 B=0000 D=0008 H=0000 S=01FE P=017B JZ 0189
C0Z0M0E1I0 A=11 B=0000 D=0008 H=0000 S=01FE P=017E RAR
C1Z0M0E1I0 A=08 B=0000 D=0008 H=0000 S=01FE P=017F JNC 0183
C1Z0M0E1I0 A=08 B=0000 D=0008 H=0000 S=01FE P=0182 DAD D
C0Z0M0E1I0 A=08 B=0000 D=0008 H=0008 S=01FE P=0183 XCHG
C0Z0M0E1I0 A=08 B=0000 D=0008 H=0008 S=01FE P=0184 DAD H
C0Z0M0E1I0 A=08 B=0000 D=0008 H=0010 S=01FE P=0185 XCHG
C0Z0M0E1I0 A=08 B=0000 D=0010 H=0008 S=01FE P=0186 JMP 017A
C0Z0M0E1I0 A=08 B=0000 D=0010 H=0008 S=01FE P=017A ORA A
C0Z0M0E0I0 A=08 B=0000 D=0010 H=0008 S=01FE P=017B JZ 0189
C0Z0M0E0I0 A=08 B=0000 D=0010 H=0008 S=01FE P=017E RAR
C0Z0M0E0I0 A=04 B=0000 D=0010 H=0008 S=01FE P=017F JNC 0183
C0Z0M0E0I0 A=04 B=0000 D=0010 H=0008 S=01FE P=0183 XCHG
C0Z0M0E0I0 A=04 B=0000 D=0008 H=0010 S=01FE P=0184 DAD H
C0Z0M0E0I0 A=04 B=0000 D=0008 H=0020 S=01FE P=0185 XCHG
C0Z0M0E0I0 A=04 B=0000 D=0020 H=0008 S=01FE P=0186 JMP 017A
C0Z0M0E0I0 A=04 B=0000 D=0020 H=0008 S=01FE P=017A ORA A
C0Z0M0E0I0 A=04 B=0000 D=0020 H=0008 S=01FE P=017B JZ 0189
C0Z0M0E0I0 A=04 B=0000 D=0020 H=0008 S=01FE P=017E RAR
C0Z0M0E0I0 A=02 B=0000 D=0020 H=0008 S=01FE P=017F JNC 0183
C0Z0M0E0I0 A=02 B=0000 D=0020 H=0008 S=01FE P=0183 XCHG
C0Z0M0E0I0 A=02 B=0000 D=0008 H=0020 S=01FE P=0184 DAD H
C0Z0M0E0I0 A=02 B=0000 D=0008 H=0040 S=01FE P=0185 XCHG
C0Z0M0E0I0 A=02 B=0000 D=0040 H=0008 S=01FE P=0186 JMP 017A
C0Z0M0E0I0 A=02 B=0000 D=0040 H=0008 S=01FE P=017A ORA A
C0Z0M0E0I0 A=02 B=0000 D=0040 H=0008 S=01FE P=017B JZ 0189
C0Z0M0E0I0 A=02 B=0000 D=0040 H=0008 S=01FE P=017E RAR
C0Z0M0E0I0 A=01 B=0000 D=0040 H=0008 S=01FE P=017F JNC 0183
C0Z0M0E0I0 A=01 B=0000 D=0040 H=0008 S=01FE P=0183 XCHG
C0Z0M0E0I0 A=01 B=0000 D=0008 H=0040 S=01FE P=0184 DAD H
C0Z0M0E0I0 A=01 B=0000 D=0008 H=0080 S=01FE P=0185 XCHG
C0Z0M0E0I0 A=01 B=0000 D=0080 H=0008 S=01FE P=0186 JMP 017A
C0Z0M0E0I0 A=01 B=0000 D=0080 H=0008 S=01FE P=017A ORA A
C0Z0M0E0I0 A=01 B=0000 D=0080 H=0008 S=01FE P=017B JZ 0189
C0Z0M0E0I0 A=01 B=0000 D=0080 H=0008 S=01FE P=017E RAR
C1Z0M0E0I0 A=00 B=0000 D=0080 H=0008 S=01FE P=017F JNC 0183
C1Z0M0E0I0 A=00 B=0000 D=0080 H=0008 S=01FE P=0182 DAD D
C0Z0M0E0I0 A=00 B=0000 D=0080 H=0088 S=01FE P=0183 XCHG
C0Z0M0E0I0 A=00 B=0000 D=0088 H=0080 S=01FE P=0184 DAD H
C0Z0M0E0I0 A=00 B=0000 D=0088 H=0100 S=01FE P=0185 XCHG
C0Z0M0E0I0 A=00 B=0000 D=0100 H=0088 S=01FE P=0186 JMP 017A
C0Z0M0E0I0 A=00 B=0000 D=0100 H=0088 S=01FE P=017A ORA A
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=01FE P=017B JZ 0189
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=01FE P=0189 RET
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=0200 P=0145 LDA 0302
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=0200 P=0148 ORI 00
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=0200 P=014A CNZ 0169
C0Z1M0E1I0 A=00 B=0000 D=0100 H=0088 S=0200 P=014D LDA 0303
C0Z1M0E1I0 A=80 B=0000 D=0100 H=0088 S=0200 P=0150 ORI 00
C0Z0M1E0I0 A=80 B=0000 D=0100 H=0088 S=0200 P=0152 CNZ 0169
C0Z0M1E0I0 A=80 B=0000 D=0100 H=0088 S=01FE P=0169 PUSH PSW
C0Z0M1E0I0 A=80 B=0000 D=0100 H=0088 S=01FC P=016A MOV A,H
C0Z0M1E0I0 A=00 B=0000 D=0100 H=0088 S=01FC P=016B XRI FF
C0Z0M1E1I0 A=FF B=0000 D=0100 H=0088 S=01FC P=016D MOV H,A
C0Z0M1E1I0 A=FF B=0000 D=0100 H=FF88 S=01FC P=016E MOV A,L
C0Z0M1E1I0 A=88 B=0000 D=0100 H=FF88 S=01FC P=016F XRI FF
C0Z0M0E1I0 A=77 B=0000 D=0100 H=FF88 S=01FC P=0171 MOV L,A
C0Z0M0E1I0 A=77 B=0000 D=0100 H=FF77 S=01FC P=0172 INX H
C0Z0M0E1I0 A=77 B=0000 D=0100 H=FF78 S=01FC P=0173 POP PSW
C0Z0M1E0I0 A=80 B=0000 D=0100 H=FF78 S=01FE P=0174 RET
C0Z0M1E0I0 A=80 B=0000 D=0100 H=FF78 S=0200 P=0155 SHLD 0303
C0Z0M1E0I0 A=80 B=0000 D=0100 H=FF78 S=0200 P=0158 HLT
*Execution halted
Висновок: на даній лабораторній роботі я вивчив алгоритми виконання операцій множення та ділення цілих беззнакових і цілих знакових чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набув практичних навиків складання та налагоджування програм з використанням цих алгоритмів.