标志寄存器

认识标志寄存器的特殊之处

  • 标志寄存器的结构

    • flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。
    • 8086CPU中没有使用flag的1、3、5、12、13、14、15位,这些位不具有任何含义。
  • 标志寄存器的作用

    • 用来存储相关指令的某些执行结果
    • 用来为CPU执行相关指令提供行为依据
    • 用来控制CPU的相关工作方式
  • 直接访问标志寄存器的方法

    • pushf:将标志寄存器的值压栈;
    • popf :从栈中弹出数据,送入标志寄存器中。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

ZF—零标志

  • ZF标记相关指令的计算结果是否为0

    • ZF=1,表示“结果是0,1表示“逻辑真”
    • ZF=0,表示“结果不是0”,0表示“逻辑假”
  • 在8086CPu的指令集中,有的指令的执行是影响标志寄存器的,比如: add,sub,mul,div,inc、or,and等,它们大都是运算指令,进行逻辑或算术运算

  • 有的指令的执行对标志寄存器没有影响,比如:mov.push、pop等,它们大都是传送指令。

  • 使用一条指令的时候,要注意这条指令的全部功能,其中包括执行结果对标记寄存器的哪些标志位造成影响。

PF—奇偶标志

  • PF记录指令执行后,结果的所有二进制位中1的个数:
    • 1的个数为偶数,PF= 1;
    • 1的个数为奇数,PF = 0。

SF—符号标志

  • SF记录指令执行后,将结果视为有符号数

    • 结果为负,SF= 1;
    • 结果为非负,SF=0。
  • 基础:有符号数与补码

    • 计算机中有符号数一律用补码来表示和存储。正整数的补码是其二进制表示,与原码相同
      • 例:9的补码是00001001
    • 负整数的补码,将其对应正数二进制l的所有位取反(包括符号位,0变1,1变0)后加1
      • 例:-5的补码
      • -5对应正数5 (o0000101)→所有位取反
      • (11111010 )→加1(11111011)
      • 所以-5的补码是11111011。
  • SF标志是CPU对有符号数运算结果的一种记录。

  • 将数据当作有符已数来运算的时候,通过SF可知结果的正负;将数据当作无符号数来运算人SF的值则没有意义,虽然相关的指令影响了它的值。

CF—进位标志

  • 在进行无符号数运算的时候,CF记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
  • CF记录指令执行后,
    • 有进位或借位,CE=1
    • 无进位或借位,CF =0

OF—溢出标志

  • 在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出

  • OF记录有符号数操作指令执行后,

    • 有溢出,OF= 1
    • 无溢出,OF = 0
  • 机器所能表达的范围

    • 以8位运算为例,结果用8位寄存器或内存单元来存放,机器所能表示的范围就是-128~127
    • 同理,对于16位有符号数,机器所能表示的范围是-32768~32767。
    • 注意,此处溢出只是对有符号数运算而言。
  • CF和OF的区别

    • CF是对无符号数运算有意义的进/借拉标志位
      768~32767。
    • 注意,此处溢出只是对有符号数运算而言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值