Команды сложения

Команды сложения позволяют выполнять операции сложения однобайтных или двухбайтных операндов.

Команды сложения однобайтных операндов различаются по методам адресации второго операнда и по участию или неучастию в операции бита переноса CY. Общим для них является то, что первое слагаемое и результат хранятся в аккумуляторе.

Команды сложения двухбайтных операндов работают с операндами только в регистровых парах: первое слагаемое и результат все такие команды хранят в регистровой HL (регистровая пара HL выступает в роли аккумулятора для однобайтных операций), второе слагаемое можно определять в любой из регистровых трёх пар процессора. Двоичное сложение выполняется в соответствии с правилами двоичной арифметики, представленными в Табл.9.1.

Таблица 1.8

Правила двоичного сложения

0 + 0 = 0
0 + 1 = 1
1 + 1 = 0 + перенос 1 в следующий разряд
1 + 1 + 1 = 1 + перенос 1 в следующий разряд

 

Сначала рассмотрим команды сложения однобайтных чисел.

Команды типа ADD r, ADС r обеспечивают выбор второго операнда регистровым методом. Выполняемое командой ADD r действие:

(A) (A) + (r)

Эти команды предполагают, что исходные операнды будут предварительно записаны в аккумулятор и в регистр r.

Пример1.31

Требуется сложить числа 8Eh и C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8Eh ;поместить в аккумулятор 1-е слагаемое

0802 06 C5 MVI B,C5h ; поместить в регистр B 2-е слагаемое

0804 80 ADD B ; выполнить сложение: (A) (A) + (B)

Операция сложения должна дать такой результат:

1 0 0 0 1 1 0 0 8 C

+ 1 1 1 0 0 1 0 1 + E 5

1 0 1 1 1 0 0 0 1 1 7 1

Процессор, выполнив команду ADD B, сохранит младшие 8 разрядов результата в аккумуляторе, а 9-й старший разряд – в бите CY регистра признаков. Бит CY в этом случае как бы дополняет до 9 количество разрядов хранения результата. Другие команды могут использовать бит CY для новых операций сложения, когда выполняется сложение следующих байтов многобайтных чисел.

Команды типа ADC r обеспечивают сложение двух операндов подобно команде ADD r, но кроме того к результату ещё суммируется бит CY регистра признаков:

(A) (A) + (r) + (CY)

Применение таких команд позволяет, программируя операции сложения многобайтных чисел, организовать учёт переноса от сложения младших байтов при сложении старших байтов.

Пример1.32

Запрограммировать сложение двухбайтных чисел 358Eh+24C5h.

Адрес Число Мнемокод Комментарий

0800 01 8E 35 LXI B,358E ; поместить в BC 1-е слагаемое

0803 11 C5 24 LXI D,24C5 ; поместить в DE 2-е слагаемое

0806 79 MOV A,C ; подготовить и

0807 83 ADD E ; выполнить сложение младших байтов без

;учёта переноса

0808 6F MOV L,A ; поместить младший байт результата в L

0809 78 MOV A,B ; подготовить и

080A 8A ADC D ; выполнить сложение старших байтов с

;учётом переноса

080B 67 MOV H,A ; поместить старший байт результата в H

Команды типа ADD M, ADС M обеспечивают выбор второго операнда косвенно-регистровым методом, когда адрес операнда определяется в регистровой паре HL. Выполняемое командой ADD M действие:

(A) (A) + M(HL)

Выполняемое командой ADC M действие:

(A) (A) + M(HL) + (CY)

Пример1.33

Выполнить сложение 8Eh+C5h, если 2-е слагаемое C5h находится в ячейке с адресом 0B00h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор 1-е слагаемое

0802 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0804 86 ADD M ; выполнить сложение: (A) (A) + M(HL)

Команды типа ADI d8, ACI d8 обеспечивают выбор второго операнда непосредственным методом, то есть путём указания числа в составе самой команды. Выполняемое командой ADI d8 действие:

(A) (A) + d8

Выполняемое командой ACI d8 действие:

(A) (A) + d8 + (CY)

Пример1.34

Выполнить сложение 8Eh+C5h.

Адрес Число Мнемокод Комментарий

0800 3E 8E MVI A,8E ; поместить в аккумулятор 1-е слагаемое

0802 C6 C5 ADI C5 ; выполнить сложение: (A) (A) + C5h

Ещё один тип команд сложения обеспечивает сложение задаваемого операнда с числом 1, то есть инкремент операнда. Операнд может быть определён одним из двух способов. В команде INR rоперанд определён регистровым способом и схема выполнения команды выглядит следующим образом:

(r) (r) + 1

В команде INR M операнд определён косвенно-регистровым способом по адресу в регистровой паре HL и схема выполнения команды выглядит следующим образом:

M(HL) M(HL) + 1

В отличие от большинства других арифметическо-логических команд, воздействующих на все признаки, данные команды инкремента никак не влияют на один из битов признаков – бит CY.

Пример2.35

Пусть в исходном состоянии было: M(0B00)=8Eh, M(0B01)=C5h. Затем выполнятся следующие команды.

Адрес Число Мнемокод Комментарий

0800 21 00 0B LXI H,0B00 ; подготовить в HL адрес ячейки M

0803 34 INR M ; инкремент содержимого ячейки M(0B00)

0804 2C INR L ; инкремент содержимого регистра ;(L)(L)+1

0805 34 INR M ; инкремент содержимого ячейки M(0B01)

и после выполнения этих команд в памяти данных будет: M(0B00)=8Fh, M(0B01)=C6h.

На основе таких команд удобно организовывать суммирующие счётчики повторений каких-либо циклов операций.

Кроме команд сложения однобайтных операндов есть среди команд сложения команды сложения двухбайтных операндов – DAD B, DAD D, DAD H, DAD SP. Схема их выполнения

(HL) (HL) + (rp),

где rp – регистровая пара BC, DE, HL или регистр SP. Характерным отличием таких команд сложения от команд однобайтных операций является то, что эти команды воздействуют своим выполнением не на все признаки регистра признаков, а только на один из них – на признак CY. Команды двухбайтных операций с участием бита CY вообще отсутствуют, поэтому для суммирования многобайтных чисел (более 3-х байтов) их применять не рекомендуется, а лучше использовать команды однобайтных операций.

Пример1.36

Адрес Число Мнемокод Комментарий

0800 09 DAD B ; выполнить сложение: (HL)(HL)+(BC)

Существуют также команды сложения двухбайтного операнда регистровой пары с числом 1 то есть инкремент регистровых пар: INX B, INX D, INX H. Схема их выполнения

(rp) (rp) + 1

Отличает их от других арифметическо-логических команд полное отсутствие влияния на биты признаков. Применение этих команд может быть эффективным, например, в случае последовательной работы с ячейками области памяти для организации в регистровой паре указателя ячеек области, когда применяется косвенная адресация к этим ячейкам (пример приведён далее при рассмотрении команд декремента).