汇编语言笔记8

进、借位加减法

进位加法

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

adc ax,bx:ax=ax+bx+cf

例

1
2
3
4
5
6
mov ax,2
mov bx,1
sub bx,ax
;产生借位,CF=1
adc ax,1
;结果为ax+1+CF=4

借位减法

sbb,是带借位的减法指令,利用了CF位记录的值

sbb ax,bx:ax=ax-bx-cf

例

1
2
sbb ax,2
;ax-2-CF

指令应用:大数相加:对两个128位数据进行相加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
data segment
dw 8个16位数据,共占16字节,第一个大数
dw 8个16位数据,共占16字节,第二个大数
data ends

code segment
start:mov ax,data
mov ds,ax
mov si,0;第一个大数的起始偏移地址
mov di,16;第二个大数的起始偏移地址
mov cx,8;循环8次
call add128
mov ax,4c00h
int 21h
add128:
push ax
push cx
push si
push di
;寄存器压栈
sub ax,ax;CF清零
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;返回入口处