Дон ГТУ
Лабораторная работа № 3
АКГ-05
АУТПТЭК
Программирование арифметических задач на Ассемблере для микропроцессора К580
Цель лабораторной работы - рассмотреть особенности выполнения простейших арифметических операций над целыми числами без знака на микропроцессорных установках МИКРОЛАБ КР580ИК80 и ЭЛЕКТРОНИКА-580, познакомиться с программированием в машинных кодах и мнемокодах, научиться пользоваться средствами управления и клавиатурой устройств.
1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
1.1 Представление чисел
При программировании микро ЭВМ на МП БИС КР580ИК80 необходимо пользоваться способом представления чисел с фиксированной десятичной точкой. При этом знак числа и количество разрядов, занятых дробной частью числа, могут быть учтены при подготовке данных или программным путем.
Следует помнить, что коды команд, адреса и данные вводятся в микро ЭВМ числами в шестнадцатеричной системе счисления. Некоторой особенностью в лабораторных установках МИКРОЛАБ и ЭЛЕКТРОНИКА-580 является отображение чисел на дисплее (табл. I).
Для МП БИС КР580ИК80 можно представлять данные в виде двоично-десятичного числа, при этом каждый байт рассматривается как две тетрады (два полубайта), а каждая тетрада кодирует одну десятичную цифру.
Такое представление позволяет закодировать в одном байте десятичные числа от 0 до 99. Обратите внимание на то, что, используя для представления шестнадцатеричную систему счисления, в одном байте можно закодировать число от 0 до FF , что соответствует числам десятичной системы от 0 до 255.
Эти примеры показывают, что такое представление чисел более рационально: используется меньший объем памяти, сокращается программа.
Таблица 1- Представление чисел в различных системах счисления и отображение их на дисплее
Десятичная
система
счисления
|
Восьмеричная
система
счисления
|
Двоичная система счисления (по тетрадам)
|
Шестнадцате-ричная система счисления
|
Символы
на дисплее
|
0
|
0
|
0000
|
0
|
0
|
1
|
1
|
0001
|
1
|
1
|
2
|
2
|
0010
|
2
|
2
|
3
|
3
|
0011
|
3
|
3
|
4
|
4
|
0100
|
4
|
4
|
5
|
5
|
0101
|
5
|
5
|
6
|
6
|
0110
|
6
|
6
|
7
|
7
|
0111
|
7
|
7
|
8
|
10
|
1000
|
8
|
8
|
9
|
11
|
1001
|
9
|
9
|
10
|
12
|
1010
|
А
|
А
|
11
|
13
|
1011
|
В
|
B
|
12
|
14
|
1100
|
С
|
С
|
13
|
15
|
1101
|
D
|
D
|
14
|
16
|
1110
|
Е
|
E
|
15
|
17
|
1111
|
F
|
F
|
1.2
Арифметические
команды
Основной арифметической функцией является сложение двух чисел. Команда, имеющая мнемокод ADD Rд, складывает данные регистра Rд и аккумулятора (регистра А) и результат сложения запоминает в аккумуляторе.
- CARRY - регистра признаков. Разряд (флаг) переноса играет большую роль при выполнении микропроцессором арифметических операций и работает девятым разрядом аккумулятора. По флагу командами IC и INC можно осуществить переход. Применяется он так же при сложении чисел длиннее восьми разрядов, выполняя функции связи между двумя байтами записи числа.
О состоянии флага переноса, как и других флагов регистра признаков в МИКРОЛАБе может сообщить ячейка памяти с адресом 83ЕА, где флаги записываются в последовательности, приведенной на рисунке 1.1.
В «ЭЛЕКТР0НИКЕ-580» разряд С высвечивается на панели установки.
Рисунок 1.1 - Флаги № ШС КР580ИКБ0
Вычитание содержимого регистра Rд из содержимого аккумулятора производит команда SUB Rд. Например, команда SUB B вычитает из аккумулятора данные регистра В.
Команда вычитания использует флаг переноса как разряд заема. Если флаг переноса устанавливается после команды SUB Rд, значит, число в регистре Rд больше, чем в аккумуляторе.
После выполнения команды SUB Rд результат остается в аккумуляторе, вызов содержимого которого на индикатор регистра данных осуществляется адресом 83ЕВ в "МИКРОЛАБе" и клавишами REC, А в "ЗЛЕКТРОНИКЕ-580".
1.
3
Программа
сложения
двух
однобайтных
чисел
X
и
У
Задача состоит в том, чтобы, выполнив занесение однобайтных чисел в регистры А и Rд, сложить их и поместить результат сложения в аккумулятор.
Задайтесь числовыми значениями Х = 38, Y = А3 и начальным адресом программы, приняв его равным 8200.
Обратите внимание на то, что все приведенные числа записаны в шестнадцатеричной системе счисления.
Включите лабораторную установку и, пользуясь листингом программы, приведенным в табл. 2, запишите в память ЭВМ по указанным адресам коды команд.
Таблица 1.2 - Программа PRG 1 сложения двух однобайтных чисел
Адрес
|
Код команды
|
Метка
|
Мнемокод
|
Комментарий
|
8200
|
AF
|
PRG 1:
|
ХRА А
|
Очистить аккумулятор
|
8201
|
ЗЕ
|
|
MVI A, 38
|
Записать в аккумулятор
|
8202
|
38
|
|
|
число X
|
8203
|
06
|
|
MVI B, A3
|
Записать в регистр В
|
8204
|
A3
|
|
|
число У
|
8205
|
80
|
|
ADD 8
|
Сложить X и Y
|
8206
|
E7
|
|
RST 7
|
Прервать выполнение программы
|
Выполнив запись программы, установите начальный адрес и запустите программу. После её исполнения на дисплее установится запись: 8207 DB_ _, показывающая результат вычисления DB по адресу 8207.
Для получения разности двух чисел X и Y можно использовать программу PRG 1, заменив в ней по адресу 8205 код команды 80 (ADD B) кодом 90 (SUB В) команды вычитания содержимого регистра В из содержимого аккумулятора, разместив предварительно в регистрах В и А соответственно вычитаемое и уменьшаемое. Разность будет записана в аккумуляторе.
1.4 Сложение массива однобайтных чисел
Массив однобайтных шестнадцатеричных чисел, например, 31, АВ, 86, разместите в последовательных адресах памяти, например, 8250, 8251, 8252, 8253.
В качестве входных параметров для выполнения программы необходимо иметь адрес первого слагаемого, например, 8250, записанный в регистрах H, L, и число слагаемых - в регистре С. Выходным параметром будет являться сумма, старший байт которой записан в регистре В, а младший байт - в аккумуляторе.
Таблица 1.3 – Программа PRG 2 сложения массива однобайтных чисел
Адрес
|
Код
команды
|
Метка
|
Мнемоника
|
Комментарий
|
8200
8201
8202
|
21
50
82
|
PRG 2:
|
LXI H,8250
|
Загрузить в регистры HL, адрес первого слагаемого
|
8203
8204
|
0E
04
|
|
MVI C, 04
|
Загрузить в регистр С количество слагаемых
|
8205
|
AF
|
|
XRA A
|
Очистить аккумулятор
|
8206
|
47
|
|
MOV B, A
|
Очистить регистр В
|
8207
|
86
|
M1:
|
ADD M
|
Прибавить к содержимому аккумулятора число из массива слагаемых
|
8208
8209
820А
|
D2
0D
82
|
|
INC M2
|
Если переноса нет, то идти на М2
|
820В
820С
|
04
B7
|
|
INR B
ORA A
|
Увеличить содержимое регистра В на I
Очистить флаг переноса
|
820D
|
23
|
M2:
|
INX H
|
Указать на следующий адрес слагаемого
|
820E
|
0D
|
|
DCR C
|
Уменьшить содержимое регистра С на I
|
820F
8210
8211
|
C2
07
82
|
|
INZ
|
Если не все слагаемые, то идти на MI
|
8212
|
FF
|
|
RST 7
|
Прервать выполнение программы
|
Выполнение программы с именем PRG 2 начинается с команды загрузки регистровой пары HL, 16-битным числом 8250 (адрес первого слагаемого). После выполнения второй команды (адреса 820З, 8204) в регистре С запишется число 4 (число слагаемых). Командами 8205 и 8206 производится обнуление регистров А, В и регистра признаков.
Командой 8207 с меткой MI начинается первый цикл этапа суммирования. В результате выполнения этой команды в регистр А заносится первое слагаемое (число 31) по адресу 8250, записанное в регистровой паре HL.
Так как переполнения аккумулятора нет, по команде 8208 осуществляется переход на метку М2 (адрес команды 820С), и к содержимому регистровой пары HL прибавляется I. Теперь здесь записан адрес 8251 второго слагаемого.
После выполнения команды 820Е число слагаемых (содержимое регистра С) становится равным 3 и по команде 820F осуществляется переход на MI- начало следующего цикла этапа суммирования.
Во втором цикле в регистр А записывается сумма DC чисел 31 и АВ, флаг переноса не устанавливается, уменьшается число слагаемых регистра С до 2.
В третьем цикле в аккумулятор записывается 62 (младший байт суммы чисел DC и 86) и устанавливается флаг переноса С. По команде 8208 осуществляется переход по адресу 820В и в регистр В записывается I. Содержимое регистровой пары HL равно 8253, содержимое регистра С – I.
В четвертом цикле после выполнения команды 8207 в аккумулятор записывается 56, флаг переноса установлен, содержимое регистра В равно 2.
По команде 820(Е) содержимое регистра С становится равным 0, и команда 820F передает управление адресу 8212 - конец выполнения программы.
1.5 Вычитание одинаковых по длине чисел
Рассмотрите программу получения разности двух чисел X и Y, имеющих одинаковую длину. Листинг программы приведен в табл. 1.4.
Входными параметрами программы будут являться: длина чисел в байтах, записанная в регистре В, адрес младшего байта вычитаемого - в регистровой паре HL, адрес младшего байта уменьшаемого - в регистровой паре DE . Результат вычисления заносится в область памяти, отведенную под вычитаемое.
Положим X = А304 и Y = 7E2I,
B области памяти записывается по адресам
8250 - 04 (младший байт уменьшаемого);
8251 - A3 (старший байт уменьшаемого);
8252 - 21 (младший байт вычитаемого);
8253 – 7E (старший байт вычитаемого).
В регистре B записано 2 - длина чисел X и Y в байтах.
Таблица 1.4 – Программа PRG 3 вычитание чисел
Адрес
|
Код
команды
|
Метка
|
Мнемоника
|
Комментарий
|
8200
8201
|
06
02
|
PRG 3:
|
MVI B, 02
|
Загрузить счетчик длины числа
|
8202
8203
8204
|
I I
50
82
|
|
LXI D, X
|
Загрузить в регистры D, E адрес младшего байта уменьшаемого
|
8205
8206
8207
|
21
52
C2
|
|
LXI M, V
|
Загрузить в регистры H, L адрес младшего байта вычитаемого
|
8208
|
AF
|
|
XRA A
|
Очистить аккумулятор
|
8209
|
IA
|
M1:
|
LDAX D
|
Загрузить в аккумулятор уменьшаемое
|
820A
|
9E
|
|
SBB M
|
Вычесть из содержимого аккумулятора вычитаемое
|
820В
|
77
|
|
MOV M, A
|
Записать разность на место вычитаемого
|
820C
|
I3
|
|
INX D
|
Указать на следующий байт уменьшаемого
|
820D
|
23
|
|
INX H
|
Указать на следующий байт вычитаемого
|
820E
|
05
|
|
DCR B
|
Уменьшить содержимое счетчика длины числа
|
820F
8210
8211
|
02
09
82
|
|
INZ M1
|
Если не последний (старший) байт, то идти на MI
|
8212
|
FF
|
|
RST 7
|
Прервать выполнение программы
|
Обратите внимание на то, что по адресу 820А записана команда SBB. Она отличается от аналогичной команда SUB М тем, что из содержимого аккумулятора вычитается не только число, записанное в ячейке М по адресу, хранящемуся в регистровой паре HL, но и значение займа. Итоговое значение займа в результате выполнения операции фиксируется в разряде переноса регистра признаков.
1.6 Сложение многобайтовых десятичных чисел
В табл. 1.5 приведен листинг программы сложения чисел, представляемых в МП БИС КР580ИК80 в виде двоично-десятичных чисел. Так как такое представление чисел требует от ЭВМ преобразования данных, в программу необходимо ввести оператор DAA, который выполняет коррекцию результата операции по следующим правилам:
если значение младших 4 бит аккумулятора больше девяти или если признак дополнительного переноса АС равен I, то к содержимому аккумулятора добавляется число 6;
если значение старших 4 бит аккумулятора больше девяти или если признак переноса С равен I, то к содержимому старших 4 бит аккумулятора добавляется число 6.
Заметьте, что в предлагаемой программе, как и в предыдущей, рассматриваются числа с длиной больше машинного слова. Поэтому операции с такими числами МП БИС проводят по байтам, начиная с младших байтов.
Рассмотрите программу с именем PRG 4 для слагаемого Х=3045, размещенного побайтно в ячейках памяти 8050 и 8051, и слагаемого Y = 2071 - в ячейки памяти 8052 и 8053. Результат сложения размещается в ячейках, отведенных для второго слагаемого.
После выполнения программы вызовите последовательно ячейки 8053 и 8052 и запишите их содержимое. Это результат решения. Он должен быть равен десятичному числу 5116.
Таблица 1.5 - Программа PRG 4 сложения двух десятичных чисел
Адрес
|
Код
команды
|
Метка
|
Мнемоника
|
Комментарий
|
8200
8201
8202
|
21
50
82
|
PRG 4:
|
LXI H, X
|
Загрузить в регистры младшие два разряда числа Х
|
8203
8204
8205
|
I I
52
80
|
|
LXI D, Y
|
Загрузить в регистры младшие два разряда числа Y
|
8206
|
AF
|
|
XRA A
|
Очистить аккумулятор
|
8207
8208
|
0E
02
|
|
MVI C, 02
|
Загрузить счетчик числа байтов
|
8209
|
IA
|
M1:
|
LDAX D
|
Загрузить в аккумулятор два разряда числа Y
|
820A
|
8E
|
|
ADC M
|
Прибавить к содержимому аккумулятора два разряда числа Х с учетом переноса
|
820В
|
27
|
|
DAA
|
Преобразовать результат в десятичный код
|
820C
|
12
|
|
STAX D
|
Передать результат в ячейку памяти, адресуемой регистровой парой DE
|
820D
|
13
|
|
INX D
|
Указать на адрес следующих двух разрядов числе Y
|
820E
|
23
|
|
INX H
|
Указать на адрес следующих двух разрядов числе Х
|
820F
|
OD
|
|
DCR C
|
Уменьшить содержимое счетчика числа байтов
|
8210
8211
8212
|
C2
09
82
|
|
INZ M1
|
Если не последний (старший) байт, то идти на MI
|
8213
|
FF
|
|
RST 7
|
Прервать выполнение программы
|
2 ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
2.1 Выполним программу получения суммы двух чисел
X=A+B, имеющих одинаковую длину. Листинг программы приведен в таблице 2.1.
A= B=
Результат сложения заносится в область памяти, отведенную под второе слагаемое.
В области памяти записывается по адресам
8250 – 87 (младший байт первого слагаемого)
8251 – 35 (старший байт первого слагаемого)
8252 – 87 (младший байт второго слагаемого)
8253 – 02 (старший байт второго слагаемого)
Таблица 2.1 – Программа сложения массива однобайтных чисел
Адрес
|
Код
команды
|
Метка
|
Мнемоника
|
Комментарий
|
8200
8201
8202
|
21
50
82
|
PRG 1:
|
LXI H, X
|
Загрузить в регистры младшие два разряда числа А
|
8203
8204
8205
|
11
52
80
|
|
LXI D, Y
|
Загрузить в регистры младшие два разряда числа В
|
8206
|
AF
|
|
XRA A
|
Очистить аккумулятор
|
8207
8208
|
OE
02
|
|
MVI C, 02
|
Загрузить счетчик числа байтов
|
8209
|
1A
|
M1:
|
LDAX D
|
Загрузить в аккумулятор два разряда числа А
|
820А
|
8E
|
|
ADC M
|
Прибавить к содержимому акумулятора два разряда числа В с учетом переноса
|
820В
|
27
|
|
DAA
|
Преобразовать результат в десятичный код
|
820C
|
12
|
|
STAX D
|
Передать результат в ячейку памяти, адресуемой регистровой парой DE
|
820D
|
13
|
|
INX D
|
Указать на адрес следующих двух разрядов числа В
|
820E
|
23
|
|
INX H
|
Указать на адрес следующих двух разрядов числа А
|
820F
|
OD
|
|
DCR C
|
Уменьшить содержимое счетчика числа байтов
|
8210
8211
8212
|
C2
09
82
|
|
INZ M1
|
Если не последний (старший) байт, то идти на МI
|
8213
|
E7
|
|
RST 7
|
Прервать выполнение программы
|
2.2 Выполним программу получения разности двух чисел
C
и
D
Листинг программы приведен в таблице 2.2.
Входными параметрами программы будут являться: длина чисел в байтах, записанная в регистре В, адрес младшего байта вычитаемого – в регистровой паре HL, адрес младшего байта уменьшаемого – в регистровой паре DE. Результат вычисления заносится в область памяти, отведенную под вычитаемое. C=, D=. В регистре В записано 2 – длина чисел C и D в байтах. В области памяти записывается по адресам
8250 – Е1 (младший байт уменьшаемого);
8251 – 37 (старший байт уменьшаемого);
8252 – 75 (младший байт вычитаемого);
8253 – 08 (старший байт вычитаемого);
В регистре В записано 2 – длина чисел C и D в байтах.
Таблица 1.4 – Программа PRG 2 вычитание чисел
Адрес
|
Код
команды
|
Метка
|
Мнемоника
|
Комментарий
|
8200
8201
|
06
02
|
PRG 2:
|
MVI B, 02
|
Загрузить счетчик длины числа
|
8202
8203
8204
|
I I
50
82
|
|
LXI D, X
|
Загрузить в регистры D, E адрес младшего байта уменьшаемого
|
8205
8206
8207
|
21
52
C2
|
|
LXI M, V
|
Загрузить в регистры H, L адрес младшего байта вычитаемого
|
8208
|
AF
|
|
XRA A
|
Очистить аккумулятор
|
8209
|
IA
|
M1:
|
LDAX D
|
Загрузить в аккумулятор уменьшаемое
|
820A
|
9E
|
|
SBB M
|
Вычесть из содержимого аккумулятора вычитаемое
|
820В
|
77
|
|
MOV M, A
|
Записать разность на место вычитаемого
|
820C
|
I3
|
|
INX D
|
Указать на следующий байт уменьшаемого
|
820D
|
23
|
|
INX H
|
Указать на следующий байт вычитаемого
|
820E
|
05
|
|
DCR B
|
Уменьшить содержимое счетчика длины числа
|
820F
8210
8211
|
02
09
82
|
|
INZ M1
|
Если не последний (старший) байт, то идти на MI
|
8212
|
Е7
|
|
RST 7
|
Прервать выполнение программы
|
ВЫВОД
В ходе лабораторной работы рассмотрели особенности выполнения простейших арифметических операций над целыми числами без знака на микропроцессорных установках МИКРОЛАБ КР580ИК80 и ЭЛЕКТРОНИКА -580, познакомились с программированием в машинных кодах и мнемокодах, научились пользоваться средствами управления и клавиатурой устройств.
|