王爽汇编SBB,ADC指令的问题
关于如下程序pushaxpushdxmovax,0movdx,1000hs1:subax,1sbbdx,0cmpax,0jnes1cmpdx,0jnes1popdxpop...
关于如下程序
push ax
push dx
mov ax,0
mov dx,1000h
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
这段程序为什么SBB AX,DX的值会跟着变化?SBB指令怎么把DX默认为AX的高位的?? 展开
push ax
push dx
mov ax,0
mov dx,1000h
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
这段程序为什么SBB AX,DX的值会跟着变化?SBB指令怎么把DX默认为AX的高位的?? 展开
展开全部
SBB 是带借位位的减法。
在这段程序中,进入S1循环时,先执行 sub ax,1指令,产生了借位(ax=0,ax-1后ax=0FFFF H,借位cy=1)。
执行sbb dx,0 时,dx减去0,再减去借位cy,dx从1000H变成0FFFH。
类似的,adc指令是带进位的加法。这条指令除了将两个加数相加外,还要加上进位位。
在这段程序中,进入S1循环时,先执行 sub ax,1指令,产生了借位(ax=0,ax-1后ax=0FFFF H,借位cy=1)。
执行sbb dx,0 时,dx减去0,再减去借位cy,dx从1000H变成0FFFH。
类似的,adc指令是带进位的加法。这条指令除了将两个加数相加外,还要加上进位位。
追问
我的问题是为什么向AX的高位借位就是向DX的值借位呢??
追答
SBB 指令中是哪个寄存器,就是向谁借位。 本例中 是 SBB DX,0 所以就是向DX借位。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询