标志位简介:

标志寄存器,又称程序状态寄存器(它的内容是Program Status Word,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.

6个状态标志位

CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;
    AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;
    OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;

ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;
    SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;
    PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

3个控制标志位

DF—方向标志,用来控制数据串操作指令的步进方向;
    当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。
   IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。 
   TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。

详解:

1、进位标志CF (Carry Flag)

当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,

即CF = 1;否则CF = 0。49H + 6DH=B6H, 

没有进位:CF = 0BBH + 6AH=(1)25H,有进位:CF = 1

2、零标志ZF (Zero Flag)

若运算结果为0,则ZF = 1;

否则ZF = 049H + 6DH=B6H,结果不是零:

ZF = 075H + 8BH=(1)00H,结果是零:ZF = 1

3、符号标志SF (Sign Flag)

运算结果最高位为1,则SF = 1;

否则SF = 049H + 6DH=B6H,

4、奇偶标志PF(Parity Flag)

当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;

否则PF = 03AH + 7CH=B6H=10110110B结果中有5个1,是奇数:PF = 0

5、溢出标志OF (Overflow Flag)

若算术运算的结果有溢出,则OF=1;

否则 OF=049H + 6DH =B6H,产生溢出:OF = 175H + 8BH =(1)26H,

没有溢出:OF = 0

什么是溢出?

处理器内部以补码表示有符号数8位表达的整数范围是:+127~-12816位

表达的范围是:+32767~-32768

如果运算结果超出这个范围,就产生了溢出有溢出,说明有符号数的运算结果不正确49H+6DH=B6H,就是73+109=182,已经超出-128~+127范围,产生溢出,故OF=1;

另一方面,补码B6H表达真值是-74,显然运算结果也不正确

溢出标志OF和进位标志CF是两个意义不同的标志

进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;

溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

例1:49H + 6DH=B6H无符号数运算:

73+109=182范围内,

无进位有符号数运算:73+109=182范围外,有溢出

例2:BBH + 6AH=(1)25H无符号数运算:

187+106=293范围外,

有进位有符号数运算:-69+106=37范围内,无溢出

溢出的判断判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确其他情况下,则不会产生溢出

6、辅助进位标志AF(Auxiliary Flag)

运算时D3位(低半字节)有进位或借位时,AF = 1;

否则AF = 0。49H + 6DH=B6H,D3有进位:AF = 1

7、方向标志DF(Direction Flag)

用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加;

设置DF=1,存储器地址自动减少。

CLD指令复位方向标志:DF=0STD指令置位方向标志:DF=1

8、中断允许标志IF(Interrupt Flag)

用于控制外部可屏蔽中断是否可以被处理器响应:

设置IF=1,则允许中断;

设置IF=0,则禁止中断。

CLI指令复位中断标志:IF=0

STI指令置位中断标志:IF=1

9、陷阱标志TF(Trap Flag)

用于控制处理器进入单步操作方式:

设置TF=0,处理器正常工作;

设置TF=1,处理器单步执行指令。

单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试
EU控制器是执行指令的控制电路,实现从队列中取指令、译码、产生控制信号等。,

在(cmd debug)调试程序中为了使标志位的值显尔易见,他提供用符号表示标志位的值。

标志              值为1的标记          值为0的标记 
of                OV                   NV

df                DN                   UP

if                EI                   DI

sf                NG                   PL

zf                ZR                   NZ

af                AC                   NA

pf                PE                   PO

cf                CY                   NC

cmp指令 
    cmp ax,bx 
    如果(ax)=(bx), 则 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

cmp指令配合和条件转移指令配合使用 
    条件转移指令 
    指令           含义            检测的相关标志位 
    je            等于则转移       zf=1 
    jne           不等于则转移     zf=0 
    jb            低于则转移       cf=1 
    jnb           不低于则转移     cf=0 
    ja            高于则转移       cf=0且zf=0 
    jna           不高于则转移     cf=1或zf=1

DF标志和串传送指令 
    DF 方向标志位,在串处理指令中,控制每次操作后si、di的增减 
    df=0   每次操作后si、di递增 
    df=1   每次操作后si、di递减 
movsb: 
    相当于 
    mov es:[di],byte ptr ds:[si] 
    如果 df=0 
    inc di 
    inc si 
    如果 df=1 
    dec di 
    dec si 
movsw: 
    相当于 
    mov es:[di],word ptr ds:[si] 
    如果 df=0 
    add si,2 
    add di,2 
    如果 df=1 
    sub si,2 
    sub di,2 
一般来说,movsb和movsw都和rep配合使用,格式如下: 
    rep movsb   
    或者   
    rep   movsw 
    相当于 
    s:movsb 
       loop   s 
    rep的作用是根据cx的值,重复执行rep后面的串传送指令

pushf将标志寄存器的值入栈

标志寄存器——标志位相关推荐

  1. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(7) - 标志寄存器/标志控制指令 段寄存器指令

    Flag Control (EFLAGS) Instructions 下列指令用于控制(即修改)标志寄存器EFLAGS中的标志位. 指令 描述 STC 设置CF标志为1 CLC 清除CF标志为0 CM ...

  2. 标志寄存器的详细解释

    简介:    CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有三种作用.    (1)用来存储相关指令的某些执行结果.    (2)用来为CPU执行相关指令提供行 ...

  3. 汇编语言随笔(3)-条件转移指令和标志寄存器

    标志寄存器 标志寄存器通常具有以下三种作用:       1,用来存储相关指令的某些执行效果       2,用来为CPU执行相关指令提供行为依据       3,用来控制CPU的相关工作方式     ...

  4. 8086汇编复习3 - 标志寄存器 - 使用emu8086

    1 认识标志寄存器 标志寄存器     CPU内部有一种寄存器,具有三种作用:     1)存储相关指令的某些执行结果:     2)用来为CPU执行相关指令提供行为依据:     3) 用来控制CP ...

  5. 五、CPU详解、寄存器详解、标志寄存器详解

    控制器.运算器.寄存器组成CPU 控制器:领导 运算器:员工,计算数据 寄存器:寄存数据信息,在内存与运算器之间 硬盘运算速度<内存运算速度<寄存器运算速度 寄存器:(寄存器16位[寄存器 ...

  6. 【微型计算机原理与接口技术】指令概述与标志寄存器

    指令概述与标志寄存器 指令 指令的分类 指令的组成 指令的长度 指令的地址 指令的存放 标志寄存器 C标志-进位/借位标志 A标志-辅助进位/辅助借位标志 S标志-符号标志 Z标志-零标志 P标志-奇 ...

  7. 标志寄存器df_标志寄存器

    CPU内部的寄存器中,有一种特殊的寄存器具有以下三种作用. 用来存储相关指令的某些执行结果 用来为CPU执行相关指令提供行为依据 用来控制CPU的相关工作方式 这种特殊的寄存器在8086CPU种,被称 ...

  8. 【reverse】逆向5 标志寄存器

    [reverse]逆向5 标志寄存器 1.引言 通过一个creak.exe文件的爆破,引出现阶段需要学习的知识 2.标志寄存器 标志寄存器有上图这么多个 记住这几个寄存器的位置和名称 下面是6个状态标 ...

  9. 标志寄存器df_标志寄存器的概念

    首先说一下标志寄存器的概念.在8086cpu中标志寄存器都是16位的,而其中存储的信息被称为程序状态字(一段包含系统状态的内存或者是硬件区域).标志寄存器既然是寄存器,那么它也是用来存储信息的,只是它 ...

最新文章

  1. 架构师必备技能:教你画出一张合格的技术架构图
  2. Android实例-调用系统APP(XE10+小米2)
  3. CF1365G Secure Password(构造,交互,二进制分组)
  4. python 类中定义列表_Python-从类定义中的列表理解访问类变量
  5. 操作符!与操作符!!的区别
  6. python 内置变量
  7. linux静态与动态库创建及使用实例
  8. SSE指令介绍及其C、C++应用 zz
  9. 【Caffe代码分析】DataLayer
  10. 计算机房消防设计规范,发电机房消防设计规范要求有哪些
  11. MCGS组态屏CRC16(Modbus)校验计算脚本
  12. 南大lamda实验室失败面经分享
  13. OWASP TOP 10 及防御
  14. 在家看片利器,有Android App以及桌面应用(已开源)。
  15. 实践 基于Arduino 的 HC06蓝牙 控制 TB6612FNG 驱动电机
  16. 距测试软件,两步路怎么测量距离 测距工具使用方法介绍
  17. JAVA射线_射线法 - 萌德真帅 - 博客园
  18. Echarts 当Y轴取值存在正负值的时候,x轴文字与x轴贴合(不在底部显示)
  19. 【C语言】浮点型数据在内存中的存储
  20. 淘宝/天猫获得淘宝商品详情高级版 API

热门文章

  1. set_、set_allocated_、mutable_、add_的使用
  2. cublas 的学习笔记_1
  3. wireshark无法测同一个局域网固定ip的数据_局域网安全攻防
  4. C++中rand()函数的用法
  5. CSS设置 background-image透明度小技巧
  6. vue自定义指令directives同时传递多个参数
  7. MySQL创建用户并授权、删除用户(密码规则)
  8. 使用Docker搭建RAP2(技术文档管理私服)
  9. java模仿微信QQ群聊头像拼接,根据群聊内的用户头像拼接群聊头像,九宫格
  10. Spring Security4 CSRF 如何关闭CSRF功能