【微机原理】微处理器8086的CPU基本组成

时间:2024-04-12 10:07:58

微处理器的外部结构

【微机原理】微处理器8086的CPU基本组成

微处理器的内部结构

【微机原理】微处理器8086的CPU基本组成

8086的寄存器

【微机原理】微处理器8086的CPU基本组成
8086内部有14个16位的寄存器。

按功能分为:

  • 8个通用寄存器(AX,BX,CX,DX;SI,DI,SP,BP)
  • 4个段寄存器
  • 2个控制寄存器

通用寄存器(8个)

通用寄存器可以分为两类:数据寄存器(AX、BX、CX、DX)和地址指针/变址寄存器(SI、DI、SP、BP、)

数据寄存器

  • 累加器AX(accumulator):最常用的寄存器。乘法和除法操作只能在AX中完成。
  • 基址寄存器BX(base register):虽然属于数据寄存器,但它经常用作地址寄存器。
  • 计数寄存器CX(count register):经常用作循环的计数寄存器,例如在循环语句中,默认CX的内容为循环次数。
  • 数据寄存器DX(data register):用于寄存数据,但在I/O指令中,DX用于表示端口地址。

这4个16位数据寄存器按照字节高低可以分为8个8位寄存器。

AX→AH,AL;BX→BH,BL;CX→CH,CL;DX→DH,DL

地址指针/变址寄存器

  • 变址寄存器SI(source index):在字符串操作指令中,SI提供源操作数的段内偏移地址,在其他指令中,用作地址寄存器。
  • 变址寄存器DI(destination index):在字符串操作指令中,DI提供目的操作数的段内偏移地址,在其他指令中,用作地址寄存器。
  • 堆栈指针SP(stack pointer):用于保存堆栈段的段内偏移地址。
  • 基址指针BP(base pointer):BP可以指定段内偏移地址,但将BP用作地址寄存器时,一般情况下,其默认段地址为SS。

物理地址=段地址×10H+偏移地址

段寄存器(4个)

  • 代码段寄存器CS(code segment):用于存放当前执行程序的段地址,IP为指令指针。
  • 数据段寄存器DS(data segment):用于存放当前数据段的段地址。
  • 附加段寄存器ES(extra segment):用于存放当前附加数据段的段地址。
  • 堆栈段寄存器SS(stack segment):用于存放当前堆栈段的段地址。

控制寄存器(2个)

  • 指令指针IP (instruction pointer):也称程序计数器PC(program counter),用于保存下一条即将要执行指令的段内偏移地址。

  • 微处理器状态字PSW(processor state word):16位寄存器,共设定了9个标志位,其中6个标志位(CF,PF,AF,ZF,SF,OF)用于反应ALU前一次操作的结果状态,3个标志位(DF,IF,TF)用于控制CPU操作。

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    OF DF IF TF SF ZF AF PF CF

    反应ALU前一次操作结果状态的标志位

    1. 进位标志CF(carry flag):在加减运算时,最高位(D7或D15)有进(借)位时为1
    2. 奇偶标志PF(parity flag):低8位中含有“1”的个数为偶数时为1
    3. 辅助进位标志AF(auxiliary carry flag):在加减运算时,D3位有进(借)位时为1
    4. 零标志ZF(zero flag):运算结果为0时为1
    5. 符号标志SF(sign flag):最高位(D7或D15)的值
    6. 溢出标志OF(overflow flag):有符号数运算溢出时为1

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

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

    判断溢出的简单方法

    只有当两个相同符号数相加(正数+正数,负数+负数),或者不同符号数相减,而运算结果的符号与原数据符号相反时,产生溢出。

    其他情况不会产生溢出。

    也就是说OF可以依据操作数和结果数的最高位进行判断。

    控制CPU的标志位

    • 方向标志DF(direction flag):

      在字符串操作中,当DF=0时,SI、DI的内容自动递增;DF=1时,DI、DI自动递减。

    • 中断允许标志IF(interrupt enable flag):

      IF=1:CPU能响应中断请求

      IF=0:CPU不能响应中断强求

    • 陷阱标志TF(trap flag):

      TF=1:CPU处于单步执行方式,即每执行一条指令就自动执行一次类型1的内部中断,主要用在debug中。

    物理地址的计算方法

    【微机原理】微处理器8086的CPU基本组成
    【微机原理】微处理器8086的CPU基本组成
    物理地址 = 段地址+偏移地址 = 段寄存器内容×16+偏移地址

    取指令物理地址 = (CS)×16+(IP)

    堆栈操作物理地址=(SS)×16+(SP)/(BP的表达式)
    存储器操作数物理地址=(DS)/(ES)×16+偏移地址