microcomputer_principle_02_通用寄存器
Carpe Tu Black Whistle

8088寄存器

8088内部含有14个 16位 寄存器

按功能可以分为三类:

  • 8个通用寄存器
  • 4个段寄存器
  • 2个控制寄存器

深入理解:每个寄存器中数据的含义
段寄存器和控制寄存器为 专用寄存器,16位码的含义非常清楚;
通用寄存器更加复杂投入更多时间学习。

通用寄存器

8个通用寄存器可以根据一下三个小类

  • 数据寄存器(AX, BX, CX, DX)
  • 地址指针寄存器(SP, BP)
  • 变址寄存器(SI, DI)

也可以分为 数据寄存器地址寄存器,两大类。

数据寄存器

  • 8088/8086 含4个16位数据寄存器,又可以分为8个8位寄存器:
    • AX –> AH, AL
    • BX –> BH, BL
    • ……

数据寄存器特有习惯用法

  • AX: 累加器。
    • 所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中;
      (没有二义性,存放的全是数据。
  • BX: 基址寄存器。
    • 在间接寻址中用于存放基地址
      (可能是数据,可能是地址
  • CX: 计数寄存器。
    • 用于在循环或串操作指令中存放计数值;
  • DX: 数据寄存器。
    • 在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位。

地址指针寄存器

  • SP:
    • 堆栈指针寄存器(stack pointer),内容为栈顶的偏移地址。
  • BP:
    • 基址指针寄存器,访问内存时,存放内存单元的偏移地址。

有堆栈操作的时候,SP一定会被占用,BP可能是地址/运算结果。

diff BX BP

  • 作为通用寄存器,二者均可用于存放数据
  • 作为基址寄存器,BX所寻找的数据在数据段,BP表示数据在堆栈段

变址寄存器

  • SI: 源变址寄存器
  • DI: 目标变址寄存器
  • 变址寄存器在指令中常用于存放数据在内存中的地址。

8个通用寄存器中,除了AX,CX之外,都有可能存放地址
AX,BX,CX,DX作为8个8位寄存器使用时,只能存放运算数据(不可能是地址

控制寄存器

IP

  • IP(同PC,intel取的别名)
    • 指令指针寄存器,其内容位下一条要取的指令的偏移地址。
  • FLAGS
    • 标志寄存器,存放运算结果的特征
      • 6个状态标志位(CF,SF,AF,PF,OF,ZF)
      • 3个控制标志位(IF,TF,DF)

状态标志位

  • CF(Carry Flag)

    • 进位标志位。加减运算中,最高位出现 借进位 时,CF=1
  • OF(Overflow Flag)

    • 溢出标志位。算术结果超出有符号数的可表达范围,OF=1
  • ZF(Zero Flag)

    • 零标志位。运算结果为零,ZF=1
  • SF(Sign Flag)

    • 符号标志位。当运算结果的最高位为1时,SF=1
  • PF(Parity Flag)

    • 奇偶标志位。运算结果的低8位中,‘1’的个数位偶数,PF=1
  • AF(Auxiliary Carry Flag)

    • 辅助进位标志位。加减操作中,若Bit3向Bit4有进位(借位)AF=1

控制标志位


  • TF(Trap Flag)
    • 陷阱标志位(跟踪标志位)。TF=1时,使DPU处于单步执行指令的工作方式。
  • IF(Interrupt Enable Flag)
    • 中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求。
  • DF(Direction Flag)
    • 方向标志位。在数据串操作时确定操作的方向。

段寄存器

作用

用于存放相应逻辑段的段基地址

内存逻辑段的类型

代码段–>存放指令代码
数据段–>存放操作的数据
附加段–>存放操作的数据
堆栈段–>存放暂时不用但需保存的数据


  • CS
    • 代码段寄存器,存放代码段的段基地址。
  • DS
    • 数据段寄存器,存放数据段的段基地址。
  • ES
    • 附加段寄存器,存放数据段的段基地址。
  • SS
    • 堆栈段寄存器,存放堆栈段的段基地址。

段寄存器的值比哦啊命相应逻辑段在内存中的位置

实模型下的存储器变换

内存分段管理思想

  • 8088CPU是16位体系结构的微处理器

  • 可以同时处理(产生)16位二进制码

    • 可以产生64K个编码–>直接管理64K内存单元
  • 8088CPU需要管理1MB内存

    • 需要20位

    内存分段,管理方式

image

内存地址变换

欲实现对1MB内存空间对正确访问,每个内存单元在整个内存空间中必须具备唯一地址 —-> 物理地址

内存地址变换: 直接产生的16位编码—-> 20位物理地址

内存单元编址

也叫做实地址模式下,内存的管理。

  • 内存单元的地址,逻辑上,由两部分组成:
    • 段(基)地址
      • 指示存储单元在整个内存空间中处于哪个区域(段)
    • 段内地址(相对地址/偏移地址)
      • 指示存储单元在段中的相对位置(与段中第1个单元的距离)

8088为16位结构,所以段地址和偏移地址均为16位

image

内存变换,实际是寻找一个32位-> 20位的映射

  • 内存物理地址由段基地址偏移地址组成

segment

物理地址 = 段地址16 +偏移地址

segment diagram

8088/86 同一时刻,最多只有4个/种段在运作(
段基地址是操作系统管理的。

逻辑段说明

  • 同一程序模块装入主存时,不同类型的段可以装入在相同/不同段物理空间
    • 两个逻辑段完全重合或部分重合
  • 两个不同程序模块装入主存时,同一类型段逻辑段也可以装入相同或不同段物理空间中。

堆栈及使用

  • 堆栈
    • 内存中特殊区域,用于存放暂时不用或需要保护段数据
    • 常用于响应中断或子程序调用。

stack

回顾总结

  • 微处理器的一般构成
  • 8088CPU最小模式下的主要引线及其功能
  • 8088CPU的内部结构
  • 内部寄存器功能
    • 寄存器中数据的含义
    • 8位寄存器中存放的均为运算的数据
  • 实地址模式下的寄存器寻址
    • 逻辑地址,段基地址,偏移地址,物理地址
  • 堆栈
    • 栈顶地址,栈底地址,堆栈段基地址
  • 总线

内部寄存器

  • 全部16位寄存器
  • 仅4个数据寄存器可分为2个8位寄存器
  • 所有16位寄存器中
    • AX和CX中内容一定为参加运算的数据
    • 其余的可能是数据,也可能是存放数据的地址
    • SP中的内容,通常为堆栈段的栈顶地址;
    • 段寄存器中的内容为相应逻辑段的段地址;
    • IP中的内容为下一条要去的指令的偏移地址;(CS+IP组合)
    • FLAGS 按位组织,仅9位有意义,有控制标志位(6),有状态标志位(3)

实模式下的存储器寻址

  • 内存的地址:
    • 逻辑地址(编程使用的地址):
      • 段地址:偏移地址
    • 段首地址:
      • 每个逻辑段第一个单元的地址
    • 偏移地址:
      • 相对于所在逻辑段内段首的距离
      • 段首的偏移地址=0
    • 物理地址:
      • 内存单元在整个内存中的唯一地址

对于逻辑地址的表示形式 段地址:偏移地址
实际编程中,通常指给出偏移地址,段地址采用系统默认设定。


  • 每个内存单元,在整个内存空间中,都具有唯一物理地址
  • 每个内存单元的地址,都由两部分组成:
    • 段基地址 段内相对地址(偏移地址)
  • 段基地址决定了逻辑段在内存中所占的区域,改变段基地址,则改变了逻辑段的位置。
  • 一个逻辑段的默认长度为64K,最小长度值为16B
    • 每个逻辑段,都是以节边界起始的,16个字节为1个节
  • 逻辑段可以有多个,但只有4种类型。在一个程序模块中,每种类型的逻辑段最多只能有一个。