-
1.flag寄存器:①.用来存储相关指令的某些执行结果
-
②.用来为CPU执行相关指令提供行为依据
-
③.用来控制CPU的相关工作
-
2.8086CPU的标志寄存器flag有16位,其中存储信息通常被称作为程序状态字(PSW),flag与其他寄存器不同,其他寄存器都是用来存放数据的,都是整个寄存器具有一个含义,而flag寄存器是按位起作用的.
3.ZF:flag的第六位,零标志位,它记录相关指令执行后,其结果是否为0,如果结果为0。那么ZF=1,否则ZF=0.
4.PF:flag的第二位,奇偶标志位,它记录相关指令后,其结果的所有bit位中1的个数是否为偶数,如果1的个数为偶数,PF=1,如果为奇数那么PF=0.
5.SF:flag的第七位,符号标志位,它记录相关指令执行后,其结果是否为负,如果结果为负,SF=1,如果非负,SF=0
6.CF:flag的第零位,进位标志位,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的错位值.
7.OF:flag的第十一位,溢出标志位,OF记录了有符号运算的结果是否发生了溢出,如果发生溢出,OF=1,如果没有OF=0.
CF和OF:CF是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位
8.adc : 进位加法指令,adc 操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+CF
9.sbb : 带错位减法指令,sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象2-CF
10.cmp:比较指令,功能相当于减法,只是不保存结果,cmp指令执行后,对标志寄存器产生影响,例如: cmp ah,bh
①.如果SF=1,而OF=0→说明没有溢出,逻辑上真正结果的正负=实际结果的正负
②.如果SF=1,而OF=1→说明有溢出,如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正.
③.如果SF=0,而OF=1→说明有溢出,如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负
④.如果SF=0,而OF=0→说明没有溢出,实际结果为非负,所以逻辑结果必然非负
11. je 含义:等于则转移 检测位置:ZF=1
jne 含义:不等于则转移 检测位置:ZF=0
jb 含义:低于则转移 检测位置:CF=1
jnb 含义:不低于则转移 检测位置:CF=0
ja 含义:高于则转移 检测位置:CF=0且ZF=0
jna 含义不高于则转移 检测位置:CF=1或ZF=1
12.DF:flag的第十位,方向标志位,在串处理指令中,控制每次操作后SI,DI的增减;
DF=0,每次操作后,SI,DI递增 DF=1,每次操作后,SI,DI递减
13.串传送指令
①.movsb:将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器df位的值,将si和id或增或减,相当于以下指令:
((es)*16+(di))=((ds)*16+(si))
if (df==0) (si)=(si)+1 (di)=(di)+1
if (df==1) (si)=(si)-1 (si)=(si)-1
②.movsw:将ds:si指向的内存字单元中的字送入es:di中,然后根据标志寄存器df位的值将si和di或增或减2。
14.pushf:将标志寄存器的值压栈 popf:是从栈中弹出数据,送入标志寄存器中