adc是带进位加法指令,它利用了CF位上记录的进位值。

指令格式: adc 操作对象1,操作对象2

功能:操作对象1 = 操作对象1 + 操作对象2 + CF

例如指令 adc  ax,bx实现的功能是: (ax)=(ax)+(bx)+CF

 例如:

mov ax,2
mov bx,1
sub bx,ax
adc ax,1

执行后,(ax)=4。adc执行时,相当于计算: (ax)+1+CF = 2+1+1 = 4。

mov ax,1
add ax,ax
adc ax,3

执行后,(ax)=5。adc执行时,相当于计算: (ax)+3+CF=2+3+0=5。

mov al,98H
add al,al
adc al,3

执行后,(al)=34H。adc执行时,相当于计算: (al)+3+CF=30H+3+1=34H。

 

adc指令的意义:

加法可以分两步来进行:1)低位相加;2)高位相加再加上地位相加产生的进位值

下面的指令和add ax,bx具有相同的结果:

add al,bl
adc ah,bh

所以CPU提供adc指令的目的,就是来进行加法的第二步运算的。adc指令和add指令相配合就可以对更大的数据进行加法运算。

编程计算1EF000H+201000H,结果放在ax(高16位)和bx(低16位)中。

mov ax, 001EH
mov bx,0F000H
add bx,1000H
adc ax,0020H

编程计算1EF0001000H + 2010001EF0H, 结果放在ax(最高16位),bx(次高16位),cx(低16位)中。

mov ax, 001EH
mov bx, 0F000H
mov cx, 1000H
add cx,  1EF0H
adc bx,  1000H
adc ax,   0020H

编写子程序,对两个128位数据进行相加

名称:add128

功能:两个128位数据进行相加

参数:ds:si指向存储第一个数的内存空间,因数据为128,所以需要8个字单元,由低地址单元到高地址单元依次存放128位数据由低到到高的每个字。运算结果存储在第一个数的存储空间中。

ds:di指向存储第二个数的内存空间。

add128:
            push ax
            push cx
            push si
            push di

            sub ax,ax               ;将CF设置为0

            mov cx,8
 
s:   
            mov ax,[si]
            adc ax,[di]
            mov [si],ax
            inc si
            inc si
            inc di
            inc di
            loop  s

            pop di
            pop si
            pop cx
            pop ax
            ret

 注意:inc和loop指令不影响CF为,但是add指令会影响CF为,所以

inc si

inc si

不能换成

add si,2

posted on 2018-11-12 10:08  迷心迷  阅读(1748)  评论(0编辑  收藏  举报