8088/8086微处理器
- 8088/8086 CPU概述
- 特点
- 1.并行的指令流水线
- 2. 内存的分段管理(将内存分为4段)
- 3.支持多处理器系统
- 8088/8086 CPU的功能结构
- 1.内部结构
- 执行单元EU
- 总线接口单元BIU
- 2.内部寄存器
- 通用寄存器
- 数据寄存器 AX,BX,CX,DX
- 地址指针寄存器 SP,BP
- 变址寄存器 SI,DI
- 段寄存器 CS,SS,DS,ES
- 控制寄存器 IP,FLAGS
8088/8086 CPU概述
8088和8086都是同一个时代的CPU,都属于第三代CPU。其主要区别是,8088的外部数据总线宽度为8位,而8086的数据总线宽度为16位。
特点
1.并行的指令流水线
在程序执行过程中,CPU总是有规律地重复执行以下步骤:
- 从存储器中取出下一条指令
- 指令译码(或分析指令)
- 如果指令需要,从存储器中读取操作数
- 执行指令(包括算数逻辑运算、I/O操作、数据传送、控制转移等)
- 如果需要,将结果写入存储器
在8088/8086未出现以前,微处理器是按顺序串行完成以上各操作的。
从8088/8086开始,CPU采用了一种新的结构来并行地完成这些工作。8088/8086将上述步骤分配给CPU内两个独立的部件,分别是执行单元EU和总线接口单元BIU。执行单元负责分析指令和执行指令,总线接口单元负责取指令、取操作数和写结果。
这两个单元都能够独立地完成各自相应地工作,所以当这两个单元并行工作时,在大多数情况下,取指令操作与执行指令操作都可以重叠地进行。换句话说,因为总线接口单元已经从存储器中将EU要执行的指令“预取”了出来,所以大多数情况下“省掉”了取指令的时间,从而加快了程序的运行速度。
2. 内存的分段管理(将内存分为4段)
8088/8086 CPU的内部结构都是16位的,即内部的寄存器只能存放16位的二进制码,内部的总线同时也只能传送16位二进制码。
16位二进制码最多只具有种组合,也就是说,8088/8086只能产生64K个地址,即最多只能管理64个内存单元。
由于内存容量的大小对计算机的性能有直接的影响,为了提高系统的执行速度,人们希望尽可能地提高系统管理(寻址)内存的能力。为此,8088/8086采用了分段管理的方法,将内存地址空间分为多个逻辑段,每个逻辑段最大为64K个单元,段内每个单元的地址码(称为偏移地址或相对地址)长度为16位,再为每个段设置段地址(称为端基地址)以区分不同的逻辑段。
这样一来,内存的大小就由原来的变成了
所以,在8088/8086中,内存每个单元的地址都由两部分组成,即段地址和段内偏移地址。
3.支持多处理器系统
8088/8086具有最小和最大两种工作模式以及内置的多任务处理能力。
最小模式也成为单处理器模式;最大模式也称为多处理器模式。
8088/8086 CPU的功能结构
1.内部结构
8088与8086的结构极为相似,都是由执行单元EU和总线接口单元BIU两大部分组成。
执行单元EU
执行单元EU的主要功能是执行指令、分析指令、暂存中间运算结果并保存结果的特征。
执行单元工作时会不断地从指令队列中取出指令代码,对其译码后产生完成指令所需要的控制信息。
数据在算数逻辑单元(运算器ALU)中进行运算,运算结果的特征保留在标志寄存器FLAGS中。
总线接口单元BIU
总线接口单元BIU负责CPU与存储器、I/O接口之间的信息传递。
当执行单元从指令队列中取走指令,指令队列出现空字节时,BIU就自动执行一次取指令周期,从内存中取出后续的指令代码放入队列中。
当执行单元需要数据时,总线接口单元根据执行单元给出的地址从指定的内存单元或外设中取出数据供执行单元使用。
在运算结束时,总线接口单元将运算结果送入指定的内存单元或外设。
指令队列的存在使8088/8086的执行单元和总线接口单元并行工作,从而减少了CPU为取指令而等待的时间,提高了CPU的利用率,加快了运算速度,也降低了对存储器存取速度的要求。
BIU中的地址加法器用来产生20位的物理地址。而8088/8086的寄存器都是16位的,无法装载20位的物理地址。为了解决这个问题,8088/8086采用了将地址空间分段的方法,即将(1MB)的地址空间分为若干个64KB的段,然后用段基址加上段内偏移来访问物理存储器。
段地址就像是楼号,而段内偏移地址就像是房间号。要找到某一个想去的房间,就要先找到这个房间对应的楼号。
2.内部寄存器
8088/8086 CPU内部共有14个16位寄存器。按其功能可分为三大类,即通用寄存器(8个)、段寄存器(4个)、控制寄存器(2个)
通用寄存器
通用寄存器包括数据寄存器、地址指针寄存器和变址寄存器
数据寄存器 AX,BX,CX,DX
数据寄存器一般用于存放参与运算的数据或运算的结果。
每一个数据寄存器都是16位寄存器,但又可将高、低8位分别作为两个独立的8位寄存器使用:
数据寄存器 |
高八位 |
低八位 |
AX |
AH |
AL |
BX |
BH |
BL |
CX |
CH |
CL |
DX |
DH |
DL |
数据寄存器除了作为通用寄存器使用外,他们还有各自的习惯用法:
- AX(Accumulator):累加器,它是算术运算的主要寄存器,此外还可以作为乘,除运算及输入,输出的专用寄存器。
- BX(Base):基址寄存器,常用于存放存储区的起始地址。
- CX(Count):计数寄存器,常用于循环操作或字符操作中的计数器。
- DX(Data):数据寄存器,该寄存器常与AX配合,用于双字长运算,DX存放高位字,AX存放底字位,此外还可以用于输入、输出指令中存放外部设备接口的端口地址。
地址指针寄存器 SP,BP
- SP(Stack Pointer):堆栈指针寄存器,主要用于存放当前堆栈段的段内偏移地址,即栈顶地址。
- BP(Base Pointer):基址指针寄存器,主要用于提供栈内某个单元的偏移地址,与SS连用可以访问堆栈中的任意一个存储单元。
变址寄存器 SI,DI
- SI(Source Index):源变址寄存器,在串操作指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中存储单元地址,然后根据DF标志,SI进行自动增量或自动减量。
- DI(Destination Index):目的变址寄存器,在串操作指令中,DI作为隐含的目的变址寄存器与ES联用,以达到在附加段中寻址的目的,然后根据DF标志,DI进行自动增量和自动减量。
段寄存器 CS,SS,DS,ES
段寄存器用于存放正在或正待执行的各个段的段首址,其值为相应段的段值,即段起始地址的高16位:
- CS(Code Segment):代码段寄存器
- DS(Data Segment):数据段寄存器
- ES(Extra Segment):附加段寄存器
- SS(Stack Segment):堆栈段寄存器
控制寄存器 IP,FLAGS
- IP(Instruction Pointer):指令指针寄存器,用来存放代码段中指令的偏移地址。在程序运行中,IP与CS联用,以确定下一条指令的物理地址。该寄存器作为专用寄存器,一般不能用来存放其他数据
- FLAGS:标志寄存器,主要用于反应处理器的状态和运算结果的某些特征,它是16位寄存器,但只使用其中的9位,这9位包含6个状态标志位,3个控制标志。