汇编语言 11章标志寄存器

8086 flag标志寄存器
0 CF 2 PF 4 AF 6 ZF 7 SF 8 TF 9 IF 10 DF 11 OF
11.1 ZF标志
零标志位,记录相关指令执行后结果是否为0。为0 ZF=1 不为0 ZF=0
11.2 PF标志
PF奇偶标志位,相关指令执行后,其结果的所有bit位中1的个数是否为偶数。
如果1的个数为偶数,pf=1,如果为奇数pf=0
mov a1,1
add al,10
结果00001011B,3个1,奇数,pf=0
mov al,1
or al,2
00000011B 2个1 偶数,pf=1

11.3 SF标志
SF符号标志位,记录相关指令执行后,其结果是否为负。如果结果为负,sf=1,如果非负sf=0

CPU执行add指令时,必然影响到SF标志位的值,至于我们需不需要这种影响,看我们如何看待指令的运算
mov al,10000001B
add al,01111111B
结果为0 sf=0

11.4 CF标志
进位标志位。在进行无符号运算时,记录了运算结果的最高有效位向更高位的进位值。或从最高位的借位值。
mov al,98H
add al,al;al=30H CF=1
add al,al;al=60H CF=0
当两个数据做减法时,有可能向最高位借位
mov al,97H
sub al,98H;(al)=FFH,CF=1
sub al,al;(al)=0;CF=0;

11.5 OF标志
有符号运算的溢出位。OF=1表示溢出

11.6 adc 指令
adc是带进位的加法指令
adc ax,bx;(ax)=(ax)+(bx)+CF

11.7 sbb指令
sbb指令是带借位的减法指令,利用了CF上记录的借位值
sbb ax,bx;(ax)=(ax)-(bx)-CF
利用sb指令可以对任意大的数据进行减法运算
如003E1000H-00202000H结果放在ax,bx中
mov bx,1000H
mov ax,003EH
sub bx,2000H
sbb ax,0020H

11.8 cmp指令
cmp的功能相当于减法指令,cmp指令执行后,将对标志寄存器产生影响。
cmp ax,ax;(ax)-(ax)
指令执行后:zf=1,pf=1,sf=0,cf=0,of=0(零标志位,奇偶标志位,负标志位,进位标志位,溢出标志位)

mov ax,8
mov bx,3
cmp ax,bx
zf=0,pf=1,sf=0,cf=0,of=0

如果(ax)=(bx) zf=1
如果(ax)≠(bx) zf=0
如果(ax)<(bx) (ax)-(bx)会产生借位 cf=1
如果(ax)≥(bx) (ax)-(bx)不会借位 cf=0
如果(ax)>(bx)(ax)-(bx)不借位,且结果不为0 cf=0且zf=0
如果(ax)≤(bx) (ax)-(bx)既可能借位,有可能值为0 cf=1或zf=1

从而
zf=1 (ax)=(bx)
zf=0 (ax)≠(bx)
cf=1 (ax)<(bx)
cf=0 (ax)≥(bx)
cf=0 且zf=0 (ax)>(bx)
cf=1或zf=1 (ax)≤(bx)

上面的比较是无符号数。
cmp对有符号数比较
cmp ah,bh
(ah)=(bh) zf=1
(ah)≠(bh) zf=0

posted @ 2025-02-28 15:23  zhongta  阅读(53)  评论(0)    收藏  举报