Иллюстрированный самоучитель по Assembler

         

ADC Целочисленное сложение с переносом


Команда adc осуществляет сложение первого и второго операндов, прибаатяя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды adc можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда adc (совместно с командой add) обычно используется для сложения 32-разрядных чисел. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.

Пример 1

mov AX,1125h

adc AX,2C25h ;AX=3D4Bh, если CF был = 1

;AX=3D4Ah, если CF был = 0

Пример 2

; В полях данных:

numlow dw 0FFFFh ;Младшая часть 2-го слагаемого

numhigh dw 000Sh ;Старшая часть 2-го слагаемого

;Число 0005FFFFh=393215

;В программном сегменте:

mov AX,000Sh ;Младшая часть 1-го слагаемого

mov BX,0002h ;Старшая часть 1-го слагаемого

;Число 00020005h=131077

add АХ,numlow ;Сложение младших частей. АХ=4, CF=1

adc BX, numhigh ;Сложение старших частей с

;переносом.ВХ:АХ=0008:0004h.

;Число 00080004h=524292

Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Команда adc с 32-разрядными операндами может использоваться для сложения 64-разрядных целых чисел.

Пример

; В полях данных

mem321 dd 0FFFFFFFFh ;Младшая часть 1-го слагаемого

mem32h dd 98765432h ;Старшая часть 1-го слагаемого

; В программном сегменте

mov EAX,1 ;Младшая часть 2-го слагаемого

mov EBX,0 ;Старшая часть 2-го слагаемого

add EAX,mem321 ;Складываем младшие половины

;Сумма=100000000Ь>32 бит

;EAX=000000h, перенос

adc EBX,mem32h ;Складываем старшие половины

;и перенос. EBX=90000001h ;Сумма: 9876543300000000h

ADD Целочисленное сложение

Команда add осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды add можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячей-ку памяти или непосредственное значение, однако не допускается опре-делять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду add можно использовать для сложения как обычных целых чи-сел, так и двоично-десятичных (с использованием регистра АХ для хра-нения результата). Если складываются неупакованные двоично- десятич-ные (BCD) числа, после команды add следует использовать команду ааа; если складываются упакованные числа, то команду daa. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.


Пример 1

mov BX,lFFEh

mov CX,3

add BX,CX ;BX=2001h, CX=0003h

Пример 2

mov AX,25h

add AX,12h ;AX=0037h

Пример 3

; В полях данных:

mem dw 128

;B программном сегменте:

add mem,100 ;mem=228

Пример 4

mov AX,0507h ;BCD распакованное 57

add AL,05h ;BCD 5, AX=050Ch 

aaa ;AX=0602h, BCD 62

Пример 5

mov AL,57h ;BCD упакованное 57

 add AL,05h ;BCD 5, AL=5Ch 

daa ;AL=62h, BCD 62

Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.

Пример

mov EAX,98765432h

add EAX,11111111h ; EAX=A9876543h


Содержание раздела