Java教程

微机原理--8088/8086微处理器详解

本文主要是介绍微机原理--8088/8086微处理器详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

外部引脚及其功能

8088是与8086同时代的微处理器,具有完全相同的指令系统。

两者唯一区别为:在硬件结构上,8088与存储器和I/O接口进行数据传输的外部数据总线宽度为8位,而8086数据总线为16位。

其引脚图如下:

image-20210822032958771

一些有用的引脚信号如下:

引脚 定义
A16/S3~A19/S6 分时复用地址/状态总线(address/status bus),三态输出。提供地址信号A19~A16 及状态位 S6~S3。
AD8~AD15 8 位地址信号,三态输出。在整个总线周期内提供存储器高 8 位地址。
AD0~AD7 地址/数据分时复用总线(address/data bus),双向,三态。ALE=1时传送地址信号,DEN=0时,传送数据信号。
IO/M 输入输出/存储器控制信号,三态。高电平访问I/O端口,低电平访问存储器。
RD 读信号,输出,三态。当它为低电平时,CPU 通过数据总线接收来自存储器或 I/O设备的数据。
WR 写选通信号,输出,三态。指示 8086/8088 正在输出数据给存储器或 I/O 设备。在WR 为低电平期间,数据总线包含给存储器或 I/O 设备的有效数据。
INTR 中断请求(interrupt request)信号,输入,用来申请一个硬件中断。当 IF=1 时,若 INTR 保持高电平,则 8088 在当前指令执行完毕后就进入中断响应周期(INTA 变为有效)
NMI 非屏蔽中断(non-maskable interrupt)输入信号。与 INTR 信号类似,但 NMI 中断不必检查 IF 标志位是否为 1。
INTA 中断响应(interrupt acknowledge)信号,输出。响应 INTR 输入。该引脚常用来选通中断向量码以响应中断请求。

功能结构

内部结构

8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线;8088的外部数据总线为8位,而8086为16位。

8088/8086都是由执行单元EU和总线接口单元(BIU)两大部分构成,8088内部接口如下:

20161020222815252

执行单元(Execution Unit, EU):分析指令(指令译码)、执行指令。

总线接口单元(Bus Interface Unit, BIU):取指令、取操作数和写结果。

计算机的核心精髓就在于取指执行

image-20210822040154742

8088存在着并行流水线结构,可以让取指令操作和执行指令操作重叠执行。

内部寄存器

8088/8086内部共有8个通用寄存器,4个段寄存器和2个控制寄存器。

image-20210822040440920
  1. 通用寄存器

    • 数据寄存器

      数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低八位分别作为两个独立的8位寄存器来用。高8位分别记为AH、BH、CH、DH,低8位分别记为AL、BL、CL、DL。

      • AX(Accumulator):累加器。用该寄存器存放运算结果,可提高指令的执行速度。此外,所有的I/O指令都使用该寄存器与外设端口交换信息
      • BX(Base):基址寄存器。8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。
      • CX(Counter):计数器。在设计循环程序时,使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。
      • DX(Data):数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。
    • 地址指针寄存器

      • SP(Stack Pointer):堆栈指针寄存器。在使用堆栈操作指令(PUSH 或 POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。
      • BP(Base Pointer):基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。
    • 变址寄存器

      • SI(Source Index):源变址寄存器。

      • DI(Destination Index):目的变址寄存器。

        这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。

  2. 段寄存器

    • CS(Code Segment):代码段寄存器。用来存储程序当前使用的代码段的段地址。CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。
    • DS(Data Segment):数据段寄存器。用来存储程序当前使用的数据段的段地址。DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。
    • SS(Stack Segment):堆栈段寄存器。用来存储程序当前使用的堆栈段的段地址。堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。
    • ES(Extra Segment):附加数据段寄存器。用来存储程序当前使用的附加数据段段的段地址。附加数据段用来存放字符串操作时的目的字符串。
  3. 控制寄存器

    • IP(Instruction Pointer):指令指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。也就是计算机组成中的PC(程序计数器)

    • 标志寄存器 FLAGS(PSW,程序状态字),它是一个16位的寄存器,但只用了其中的9位,包括6个状态标志位和3个控制标志位。

      image-20210822042543147
      • 状态标志位
      名称 描述
      CF 进位标志位 当进行加减运算时 ,若最高位发生进位或借位,则CF为1,否则为0。该标志位通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。
      PF 奇偶标志位 当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。
      AF 辅助进位标志位 当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。
      ZF 零标志位 若当前的运算结果为0,则ZF为1,否则为0。
      SF 符号标志位 若运算结果的最高位为1,SF=1,否则为0。
      OF 溢出标志位 当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。该标志通常用来判断带符号数运算结果是否溢出。
      • 控制标志位
      名称 描述
      TF 陷阱标志位 是为测试程序的方便而设置。若将TF置1,CPU处于单步工作方式 。
      IF 中断允许标志位 是用来控制可屏蔽中断的控制标志位。若将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。
      DF 方向标志位 若将DF置为1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;否则按增地址方式进行。

存储器组织

8088/8086有20条地址线,可寻址的最大物理内存容量为1MB(2^20 ),其中任何一个内存单元都有一个20位的地址,称为内存单元的物理地址。

8088/8086内部寄存器都是16位的,内部总线也只能传送16位二进制码,16位二进制码最多只能访问2^16 = 64KB的地址空间。

综上,不采取特殊措施无法访问1MB的物理内存空间。

8088/8086采用分段方式来解决的这个问题,即将1MB的地址空间分为若干个64KB的段,然后用段基址加上段内偏移地址来访问物理存储器。分段如下图所示,分为代码段、数据段、堆栈段、附加段。

image-20210822042748478

8088/8086逻辑地址和物理地址的转换关系为:

物理地址 = 段基址 * 16 + 段内偏移

即:段基址左移4位加上段内偏移。

寻址过程如下图所示:

image-20210822044348966

在8088/8086中有几种常见的寄存器组合:

段寄存器 提供段内偏移地址的寄存器
CS IP(下一条指令的地址)
DS BX、SI、DI或一个16位数(变址寻址)
SS SP(指向栈顶)或BP(访问内存的基地址)
ES DI(用于字符串操作指令)

要注意的是,通常8088/8086开头的128个字节(到80H)存放的中断向量表(里边内容是中断服务程序的入口地址)

image-20210822044131783

reference

[1] 吴宁. 微型计算机原理与接口技术[M]

[2] https://slideplayer.com/slide/10964300/

这篇关于微机原理--8088/8086微处理器详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!