【笔记】【汇编语言】第11章 标志寄存器

11.0 概述
  CPU内部寄存器中,有一种特殊的寄存器(对不同的处理机,个数和结构可能不同),具有以下三种作用
  (1) 用来存储相关指令的某些执行结果
  (2) 用来为CPU执行相关指令提供行为依据
  (3) 用来控制CPU的相关工作方式
  这种特殊的寄存器在8086CPU中被称为标志寄存器.标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW).以下标志寄存器简称flag.
  flag寄存器与其他寄存器不同,是按位起作用的,每一位都有专门的含义,记录特定的信息.
  15    14    13    12    11 OF 10 DF 09 IF 08 TF 07 SF 06 ZF 05    04 AF 03    02 PF 01    00 CF
 
11.1 ZF标志
  零标志位,记录相关指令执行后,结果是否为0.如果结果为0,ZF=1,如果不为0,ZF=0.
  注:在8086CPU指令集中,有的指令的执行是影响标志寄存器的(大多是运算指令),有的指令的执行对标志寄存器没有影响(大多是传送指令).
 
11.2 PF标志
  奇偶标志位,记录相关指令运行后,结果中所有bit位中1的个数是否为偶数,如果是偶数,PF=1,否则为0.
 
11.3 SF标志
  符号标志位,表示结果是否为负,如果为负,SF=1,否则为0.
  注:CPU在执行ADD指令的时候,必然会影响到SF标志,至于我们需不需要这种影响,就看我们如何看待指令所进行的运算了.
 
11.4 CF标志
  进位标志位.在进行>>无符号数<<运算的时候,记录了运算结果的最高有效位向更位的进位值,或从更高位的借位值.
 
11.5 OF标志
  举出标志位,记录了>>有符号数<<运算结果是否溢出,溢出置1,否则置0.
 
  注:CF和OF的区别,CF是对无符号数运算有意义的标志,OF是对有符号数运算有意义的标志.他们之间没有任何关系.
 
11.6 adc指令
  带进位加法指令(利用CF)
  adc reg1,reg2
  功能: (reg1)=(reg1)+(reg2)+CF
  注:adc所使用的借位值受上一条指令影响,可利用adc执行对任意大数据的加法(通过循环),但注意循环内部不要影响到CF.
 
11.7 sbb指令
  带借位减法指令(利用CF)
  sbb reg1,reg2
  功能:(reg1)=(reg1)-(reg2)-CF
 
11.8 cmp指令
  比较指令,功能相当于减法指令,只是不保存结果,但影响flag各个位,其他指令通过识别这些标志位来得知比较结果.
  影响的标志位有:zf,pf,sf,cf.of
 
  >>>>如果因为溢出而导致实际结果为负,那么逻辑上真正的结果必然为正,反之亦然<<<<
 
11.9 检测比较结果的条件转移指令
  je:jump equal,等于则转移,判断zf=1
  jne:jump not equal,不等于刚转移,判断zf=0
  jb:jump below,低于则转移,判断cf=1
  jnb:jump not below,不低于则转移,判断cf=0
  ja:jump above,高于则转移,判断cf=0且zf=0
  jna:jump not above,不高于则转移,判断cf=1或zf=1
 
11.10 DF标志和串传送指令
  DF:方向标志位,在串处理指令中,控制每次操作后si,di的增减.
  8086CPU中的串传送指令:movsb,movsw,经常配合rep使用,如rep movsb或rep movsw
  8086CPU提供两条指令对DF位进行设置.
  cld:置DF位为0.
  std:置DF位为1.
 
  movsb功能描述: mov es:[di],byte ptr ds:[si]
  movsw功能描述: mov es:[di],word ptr ds:[si]
 
 
11.11 pushf和popf
  标志寄存器压栈,出栈指令
 
11.12 标志寄存器在debug中的表示
  标志    值为1的标志    值为0的标志
  OF      OV             NV
  SF      NG             PL
  ZF      ZR             NZ
  PF      PE             PO
  CF      CY             NC
  DF      DN             UP
 
实验11 编写子程序
  略

原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_11.html