Вычитание одинаковых по длине чисел



 

Рассмотрите программу получения разности двух чисел 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.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 Прервать выполнение программы

 


ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ

 

Выполним программу получения суммы двух чисел

 

 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 Прервать выполнение программы

 


Дата добавления: 2019-07-15; просмотров: 183; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!