лабораторные работы / lab3
.docБАЛАКОВСКИЙ ИНСТИТУТ ТЕХНИКИ, ТЕХНОЛОГИИ И УПРАВЛЕНИЯ
ФАКУЛЬТЕТ ИНЖЕНЕРНО-СТРОИТЕЛЬНЫЙ
КАФЕДРА УПРАВЛЕНИЕ И ИНФОРМАТИКА В ТЕХНИЧЕСКИХ СИСТЕМАХ
ЛАБОРАТОРНАЯ РАБОТА № 3
по дисциплине:
МИКРОПРОЦЕССОРНЫЕ УСТРОЙСТВА СИСТЕМ УПРАВЛЕНИЯ
Выполнение арифметических операций
Выполнили: ст. гр. УИТ-51
Гродсков С.В.
Заикин А.С..
Мосницкий В.В.
Гусинцев В.А.
Кравчук С.Н.
Принял:
Мефедова Ю.А._________
«___»________________2005 г.
2005
Цель работы: изучение способов оРеганизации и исследование программ сложения и вычитания.
1 Перечень команд сложения и вычитания МП КР580ИК80:
Мнемокод |
Наименование команды |
Описание операций |
ADD R |
Сложение содержимого регистра и А-регистра. |
(A) ← (A) + (R) |
ADD М |
Сложение содержимого ячейки памяти и А-регистра. |
(A) ← (A) + ((HL)) |
ADI B2 |
Сложение непосредственных данных и содержимого А-регистра. |
(A) ← (A) + (В2) |
ADC R |
Сложение содержимого регистра и А-регистра с переносом. |
(A) ← (A) + (R) + (CY) |
ADC М |
Сложение содержимого ячейки памяти и А-регистра с переносом. |
(A) ← (A) + ((HL)) + +(CY) |
ACI B2 |
Сложение непосредственных данных и содержимого А-регистра с переносом. |
(A) ← (A) + (В2) +(CY) |
SUB R |
Вычитание содержимого регистра из А-регистра. |
(A) ← (A) – (R) |
SUB M |
Вычитание содержимого ячейки памяти из А-регистра. |
(A) ← (A) – ((HL)) |
SUI B2 |
Вычитание непосредственных данных из содержимого А-регистра. |
(A) ← (A) – (В2) |
SBB R |
Вычитание содержимого регистра из А-регистра с заемом. |
(A) ← (A) – (R) – (CY) |
SBB M |
Вычитание содержимого ячейки памяти из А-регистра с заемом. |
(A) ← (A) – ((HL)) – (CY) |
SBI B2 |
Вычитание непосредственных данных из содержимого А-регистра с заемом. |
(A) ← (A) – (В2) – (CY) |
2 Программа сложения массива однобайтных чисел с получением двухбайтного результата. Слагаемые должны быть расположены в последовательных адресах памяти. Входные параметры: адрес первого слагаемого, записанный в регистрах Н, L, и число слагаемых, записанное в регистр В. Выходные параметры: сумма, старший байт записан в регистре С, а младший – в аккумуляторе А.
Адрес
|
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
21 00 0В |
MAIN |
LXI Н,0В00 |
Записать в Рег. H, L адрес первого слагаемого |
0803 |
06 05 |
|
MVI B, 03 |
Записать в Рег В кол-во слагаемых |
0805 |
CD 0908 |
|
CALL ADDB |
Вызвать подпрограмму сложения |
0808 |
CF |
|
RST 1 |
Прервать выполнение программы |
0809 |
AF |
ADDB |
XRA A |
Очистить аккумулятор |
080A |
4F |
|
MOV C, A |
Очистить счетчик переносов |
080B |
86 |
CNT |
ADD M |
Прибавить к содержимому аккумулятора число из массива слагаемых |
080C |
D2 1008 |
|
JNC TRM |
Если переноса нет, то идти на TRM |
080F |
0C |
|
INR C |
Увеличить содержимое Рег С на 1 |
0810 |
23 |
TRM |
INX H |
Указать на следующий адрес слагаемого |
0811 |
05 |
|
DCR B |
Уменьшить содержимое счетчика слагаемых |
0812 |
C2 0B 08 |
|
JNZ CNT |
Если не все слагаемые, то идти на CNT |
0815 |
C9 |
|
RET |
|
Рисунок 1 – Схема алгоритма подпрограммы сложения
В результате сложения чисел 2,1 и 4, записанных соответственно в 0В00, 0В01и 0В02 получили следующий результат: в регистре С – 00, в регистре А – 07.
3 Программа сложения двух многобайтных чисел, представляет собой модель математического сопроцессора, выполняющего операции с многобайтными числами. Перед выполнением два многобайтных числа должны быть записаны по адресам 0В00-0В02 и 0В04-0В06. В регистр С заносится число байт обоих чисел. Результат –начиная с 0В00-0В03.
Адрес
|
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
21 00 0B |
MAIN |
LXI H, 0B00 |
Запись в Рег H, L адреса младшего байта первого слагаемого |
0803 |
0E 02 |
|
MVI C, 03 |
Записать в Рег С кол-во байт слагаемых |
0805 |
A7 |
|
ANA A |
Сброс флага СF |
0806 |
11 04 0B |
|
LXI D, 0B04 |
Запись в Рег D, E адреса младшего байта второго слагаемого |
0809 |
AF |
|
XRA A |
Очистить аккумулятор |
080A |
47 |
|
MOV B, A |
Очистить Рег B |
080B |
7E |
SUM |
MOV A,M |
Косвенная загрузка аккумулятора по регистровой паре HL |
080C |
47 |
|
MOV B,A |
Пересылка значения аккумулятора в Рег В |
080D |
1A |
|
LDAX D |
Косвенная загрузка аккумулятора по регистровой паре DE |
080E |
88 |
|
ADC B |
Сложение с учетом флага переноса |
080F |
77 |
|
MOV M,A |
Запись в память |
0810 |
23 |
|
INX H |
Инкремент адреса байта первого слагаемого |
0811 |
13 |
|
INX D |
Инкремент адреса байта второго слагаемого |
0812 |
0D |
|
DCR C |
Уменьшение числа слагаемых |
0813 |
C2 0B 08 |
|
JNZ SUM |
Переход, если не 0 |
0814 |
CF |
|
RST |
Конец |
В результат сложения чисел 2A411116 и F4FB0216, записанных соответственно в 0В00-0В02 и 0В04-0В06 получили следующий результат: в 0В00 –0В4 – 002D3D05.
Рисунок 2 – Блок-схема алгоритма программы сложения двух многобайтных чисел.
4 Программа нахождения разности чисел, имеющих одинаковую длину. Входные параметры: регистр С – длина чисел, регистры H, L – адрес младшего байта вычитаемого, регистры D, E – уменьшаемого. Числа записываются в последовательных адресах памяти. Результат заносится на место вычитаемого.
Адрес
|
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
21 |
MAIN |
LXI H, 0B00 |
Запись в Рег H, L адреса младшего байта вычитаемого |
0801 |
00 |
|
|
|
0802 |
0B |
|
|
|
0803 |
11 |
|
LXI D, 0B30 |
Запись в Рег D, E адреса младшего байта уменьшаемого |
0804 |
30 |
|
|
|
0805 |
0B |
|
|
|
0806 |
0E |
|
MVI C,02 |
Загрузить в Рег С кол-во байт |
0807 |
05 |
|
|
|
0808 |
CD |
|
CALL SUBB |
Вызов подпрограммы вычитания |
0809 |
0C |
|
|
|
080A |
08 |
|
|
|
080B |
CF |
|
RST1 |
|
080C |
A7 |
SUBB |
ANA A |
Сброс флага С |
080D |
7E |
LABEL |
MOV A,M |
Косвенная загрузка аккумулятора по регистровой паре HL |
080E |
47 |
|
MOV B,A |
Пересылка значения аккумулятора в Рег В |
080F |
1A |
|
LDAX D |
Косвенная загрузка аккумулятора по регистровой паре DE |
0810 |
98 |
|
SBB B |
Вычитание с переносом |
0811 |
77 |
|
MOV M,A |
Запись в память |
0812 |
23 |
|
INX H |
Следующий байт вычитаемого |
0813 |
13 |
|
INX D |
Следующий байт уменьшаемого |
0814 |
0D |
|
DCR C |
|
0815 |
C2 |
|
JNZ LABEL |
|
0816 |
0D |
|
|
|
0817 |
08 |
|
|
|
0818 |
C9 |
|
RET |
|
Рисунок 3 – Блок-схема алгоритма программы нахождения разности чисел, имеющих одинаковую длину.
Уменьшаемое – 389316 (в 0В30-0В31), вычитаемое – 25D6 (в 0В00-0В01), результат – 12BD (в 0В00-0В01).