<汇编语言(第2版)>2011041701

【摘抄】

CPU中有一种特殊寄存器,有如下作用:
1、用来存储相关指令的某些执行结果
2、用来为CPU执行相关指令提供行为依据
3、用来控制CPU的相关工作方式

8086CPU,称为标志寄存器。

8086CPU中,16位标志寄存器,其存储信息称为程序状态字(PSW)。

flag寄存器是按位起作用的
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
            OF DF IF TF SF ZF    AF    PF    CF
           
8086CPU指令集中,
    运算指令(进行逻辑运算或算术运算),如:add,sub,mul,div,inc,or,and等,影响flag寄存器
    传送指令,如,mov ,push ,pop等,不影响flag寄存器
           
ZF,零标志位
    结果=0,zf=1
   
PF,奇偶标志位
    如果结果中所有bit位中1的个数是否为偶数。偶数,pf=1
SF,符号标志位
    结果为负,SF=1
    备注:在运算指令中,必然影响SF,但这个SF是否起作用就看运算逻辑。如果我们做无符号运算,那SF值没有意义,即使影响了SF值。
   
CF,进位标志位。
    一般情况下,在进行【无符号数】运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
   
OF,溢出标志位
    一般情况下,OF记录了【有符号数】运算的结果是否发生了溢出。溢出,CF=1

DF,方向标志位,在串处理指令中,控制每次操作后si、di的增减。
    df=0,si、di ++
    df=1,si、di --

指令学习
abc指令
    带进位加法指令,利用CF上的记录的进位值
    abc op1 ,op2
    功能:op1 = op1 + op2 + CF
   
sbb指令
    带借位减法指令,利用CF上的记录的借位值
    sbb op1 ,op2
    功能:op1 = op1 - op2 - CF

cmp指令
    功能相当于减法,只是不保存结果
    cmp op1 ,op2
    功能:op1 - op2,不保存结果到op1上,但影响了标志位。

根据flag寄存器的条件转移指令
这类转移仅修改IP,短转移
如:jcxz,(cx)=0则转移

罗列以下:
je                等于则转移        zf=1
jne                不等于则转移    zf=0
jb                低于则转移        cf=1
jnb                不低于则转移    cf=0
ja                高于则转移        cf=0且zf=0
jna                不高于则转移    cf=1或zf=1

备注:
e=equal,n=not,b=below,a=above

串传送指令
    movsb
    movsw

针对8086,修改df的指令
cld指令,df=0
std指令,df=1

pushf和popf,对flag寄存器进行操作


无论生活、还是技术,一切都不断的学习和更新~~~努力~
原文地址:https://www.cnblogs.com/GoGoagg/p/2019106.html