• 通用寄存器与标志位寄存器OF/DF/IF/TF/SF/ZF/AF/PF


    1 通用寄存器

    这些的寄存器是程序执行代码最最常用,也最最基础的寄存器,程序执行过程中,绝大部分时间都是在操作这些寄存器来实现指令功能。
    所谓通用,即这些寄存器CPU没有特殊的用途,交给应用程序“随意”使用。注意,对于有些寄存器,CPU有一些潜规则,用的时候要注意。

    eax:通常用来执行加法,函数调用的返回值一般也放在这里面
    ecx:通常用来作为计数器,比如for循环
    edx:读写I/O端口时,edx用来存放端口号
    esp:栈顶指针,指向栈的顶部
    ebp:栈底指针,指向栈的底部,通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量
    esi字符串操作时,用于存放数据源的地址
    edi:字符串操作时,用于存放目的地址的,和esi两个经常搭配一起使用,执行字符串的复制等操作
    eip:指向CPU当前指向的指令
    ebx: 数据存取

    2 标志寄存器

    CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能)具有以下3中作用。

    1. 用来存储相关指令的某些执行结果。
    2. 用来为CPU执行相关指令提供行为依据。
    3. 用来控制CPU的相关工作方式。

    8086CPU的flag寄存器的结构如图下所示

    D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
    OFDFIFTFSFZFAFPFCF
    空出来的说明在8086CPU中没有使用,布局有任何含义。
    它反映了CPU运算的状态特征并且存放某些控制标志

    2.1 CF 进位标志位

    定义:当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。

    实例:

    1. 修改 eax:FFFFFFFF
    2. 写指令
    add eax,0x1
    
    3.结果:
    eax:00000000
    C:  1
    A:1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.2 ZF 零标志位

    定义:若当前的运算结果为零,则ZF为1,否则为0。

    1. flag的第6位是ZF,0标志位。
    2. 记录相关指令执行后,其结果是否为0,
      if = 0; zf = 1
      if != 0; zf = 0
      eg.
      mov ax,1
      sub ax,1
      执行后,结果为0,则zf=1
      
      • 1
      • 2
      • 3
      mov ax,1
      add ax,0
      执行后,结果为0,则zf=1,表示“结果是0
      • 1
      • 2
      • 3
      mov ax,1
      or ax,0
      执行后,结果不为0,则zf=0,表示“结果非0
      • 1
      • 2
      • 3

    2.3 SF 符号标志位

    定义:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。

    2.4 OF 溢出标志位

    若运算结果超出机器能搞表示的范围称为溢出,此时OF为1,否则为0。

    2.5 PF 奇偶标志位

    定义:当运算结果的最低16位中含1的个数位偶数,则PF为1,否则为0。

    1. flag的第2位是PF,奇偶标志位。

    2. 记录相关指令执行后,其结果的所有bit位中1个数是否为偶数,
      if 偶数 则 pf = 1
      if 奇数 则 pf = 0
      eg.

      mov al,1
      add al,10
      执行后,结果为00001011B,其中3(奇数)个1,则 pf = 0;
      
      • 1
      • 2
      • 3
      mov al,1
      or al,2
      执行后,结果为00000011B,其中有2(偶数)个1,则 pf = 1;
      
      • 1
      • 2
      • 3
      sub al,al
      执行后,结果为00000000B,其中有0(偶数)个1,则 pf = 1;
      
      • 1
      • 2

    2.6 AF 辅助进位标志

    定义:一个加法(减法)运算结果的低4位想高4位有进位(或借位)时,则AF=1,反之AF=0。

    2.7 TF 跟踪标志

    定义:该标志位为方便程序调试而设置。若TF=1,8086/8088 CPU处于单步工作方式,即在每条指令执行结束后,产生中断。

    2.8 DF 方向标志

    定义:该标志位用来控制处理指令的处理方向,若DF=1,则串处理过程中地址自动递减,否则自动递增。

    2.8 IF 中断标志

    等等

  • 相关阅读:
    企业数字化转型-数字技术创新对企业市场价值的影响研究(数据复现)
    异或最小生成树
    uCOSii系统的中断管理
    Python与Appium实现手机APP自动化测试的示例代码
    基于$indexStats 构建mongodb 所有集合的索引监控程序
    9、正则表达式入门
    python操作数据库pymysql
    js中this_window
    目前最好用的NAS系统是什么?
    04-树6 Complete Binary Search Tree
  • 原文地址:https://blog.csdn.net/zx77588023/article/details/126891283