Сложение массива однобайтных чисел

 

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

 


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

 

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: