Входными параметрами программы будут являться: длина чисел в байтах, записанная в регистре В, адрес младшего байта вычитаемого - в регистровой паре 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, познакомились с программированием в машинных кодах и мнемокодах, научились пользоваться средствами управления и клавиатурой устройств.