汇编-寄存器

内部寄存器的类型

含有 14个 16位 寄存器,按照功能可分为三类

  • 8个通用寄存器 (除了特殊作用,均可以用作 暂存中间结果)
    • 数据寄存器(AX, BX, CX, DX)
      • AX : 累加器
        • 所有 I/O 指令都通过 AX 与接口传送信息,中间运算结果也多放于 AX 中
      • BX :基址寄存器
        • 间接寻址中存放 基地址
      • CX : 计数寄存器
        • 用于在循环或串操作指令中存放计数值
      • DX : 数据寄存器
        • 在间接寻址的 I/O 指令中存放 I/O 端口地址 ; 在 32位 乘除法运算时,存放高 16位 数
    • 地址指针寄存器 (SP,BP)
      • SP : 堆栈指针寄存器,其内容为栈顶的偏移地址
      • BP : 基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址
      • : 在有堆栈操作的时候 SP 一定被专用, BP 不一定被专用 BP可能作为中间运算结果的存储位置
      • BPBX 的区别
      • 作为通用寄存器,二者均可用于存放数据
      • 作为基址寄存器,用 BX 表示所寻找的数据在 \(\color {red}{数据段}\) ; 用 BP 则表示数据在 \(\color {red}{堆栈段}\)
    • 变址寄存器 (SI, DI)
      • SI :源变址寄存器
      • DI :目标变址寄存器
      • 变址寄存器在指令中常用于存放数据在内存中的地址
    • 除了 AX、CX 之外剩余 6个 寄存器都有可能存放地址,但是如果 拆开之后 如: \(AH,AL,BH,BL ……\) 一定不可能是地址,一定是运算的数据

  • 2个控制寄存器
    • IP : 指令指针寄存器,其内容为下一条要取的指令的偏移地址

    • FLAGS :标志寄存器,存放运算结果的特征,是一个 16位 寄存器,但是只有 9位 是有意义的,其他 7位是空闲位

      • 6个 状态标志位 (CF SF AF PF OF ZF)

        • CF (Carry Flag) :进位标志位。 加(减)法运算时,若最高位有进(借)位 则 CF = 1 两个无符号数结果有溢出
        • OF (Overflow Flag) : 溢出标志位。当运算结果超出了有符号数的可表达范围时, OF = 1 两个有符号数结果有溢出
        • ZF (Zero Flag) :零标志位。 当运算结果为零时 ZF = 1
        • SF (Sign Flag) :符号标志位。 当运算结果最高位为1时 SF = 1
        • PF (Parity Flag) :奇偶标志位。 当运算结果低八位中 \(1\) 的个数为偶数时 PF = 1
        • AF (AuxiliaryCarry Flag) :辅助进位标志位。 在加(减)操作中,若 Bit3 向 Bit3 有进位(借位),AF = 1

        例子:给出以下运算结果以及运算后各状态标志位的的状态

        10110110 + 11110100

        ​ 10110110

        \(+\) 11110100


        1 10101010
        CF = 1 有进位 OF = 0 最高位和次高位进位状态相同
        ​ AF = 0 若 Bit3 向 Bit3 没有进位 PF = 1 运算结果偶数个 1
        ​ SF = 1 运算结果最高位为 1 ZF = 0 运算结果不为 0

      • 3个 控制标志位(IF TF DF)

        • TF:(Trap Flag) 陷阱标志位,也叫跟踪标志位。TF = 1 时,使 CPU 处于单步执行指令的工作方式。
        • IF 😦InterruptEnalbe Flag ) 中断允许标志位。 IF = 1 使 CPU 可以相应屏蔽中断请求
        • DF(Direction Flag) 方向标志位。在数据串操作时确定操作的方向
  • 4个段寄存器
    • 作用 : 用于存放相应逻辑段的段基地址
    • 8086/8088 内存中逻辑段的类型
      • 代码段 : 存放指令代码
      • 数据段 : 存放操作的数据
      • 附加段 : 存放操作的数据
      • 堆栈段 : 存放暂时不用但需要保存的数据
    • CS : 代码段寄存器,存放代码段的段基地址
    • DS: 数据段寄存器,存放数据段的段基地址
    • ES : 附加段寄存器,存放数据段的段基地址
    • SS : 堆栈段寄存器,存放堆栈段的段基地址
posted @ 2022-02-09 16:50  ccz9729  阅读(523)  评论(0编辑  收藏  举报