8086的功能结构与指令流水线
1 .指令流水线
图 2 . 1 是 8086 的功能结构示意图。它由两大部分组成:执行部件 (Eu , Execute Unit) 和
总线接口部件 (Interface Unit , BIU) 。前者负责指令的译码和执行,后者负责所有涉及外部总 线的操纵。二者既独立工作,又相互配合。
8086 以前的微处理器的操纵都是串行的,即对每一条指令而言,都是先取指令,再分 析、执行。具体可表示为
取指令一 [ 读操纵数 ] 一执行一 [ 写操纵数 ] 一取 ( 下一条 ) 指令一……
方括号内的操纵是操纵数在内存中时所要进行的,当操纵数是 CPIJ 内部的某个寄存器 时,不需求这一步。显然,在指令执行期间,总线 (BUS) 是空闲的,这一主要的系统资源没有 得到充分利用。而 8086 在执行部件执行指令期间,总线接口部件可利用总线预取后续指令 或进行存储器操纵数的读或写。图 2 . 2 表示了 8086 的一段工作过程。可以看出,在图示的 一段时间内, 8086 执行了 3 条指令,并且预取了两条指令,存入内部的指令队列。图 2 . 2 揭 示了一种现象——指令的并行操纵,或者说指令的重叠执行,通常称之为指令流水线操纵。
2 .总线接口部件 (BIU)
总线接口部件是 8086 同外部联系的接口。它负责所有涉及外部总线的操纵,包含取指 令、读操纵数、写操纵数、地址转换和总线控制等。
BIU 运用了指令预取队列 ( 简称指令队列或队列 ) 机构来实现指令流水线操纵。该队列 的容量为 6 个字节,即答应预取 6 个字节的指令代码。每当指令队列有两个或两个以上的字节空间,且执行部件未向 BIU 申请读/写存储器操纵数时, BIu 顺序地预取后续指令的代 码,并填入指令队列。
指令队列的工作方式是先进先出 (First-in , First-out , FIFO) ,或者说是管道方式,先预取的 指令即排在前面的指令先被取走执行,后面的依次向前推进,腾出的空间再放新预取的指 令。
当 EU 执行指令时发现是一条转移指令 ( 又称分支转移指令或分支指令 ) ,则 BIU 清除 队列,从新的地址取指令,并立即送给 EU 去执行,然后,从后续的指令序列中取指令填满队 列。可见,一碰到转移指令,就要重新预取指令队列中的下一条及下下一条指令。显然,这 影响了机器的运行速度。 8086 ,乃至 80386 、 80486 ,都存在这个缺陷,直到 Pentium 出现,引入 了分支指令猜测技术,才得以克服。
BIU 中有一个 16 位的专用加法器∑,用来形成 20 位的物理地址。 BIU 中还有一些专用 的寄存器,其效果在本节的后面说明。
3 .执行部件 (EU)
执行部件负责指令的译码和执行。它的组成和第一章说明的运算器有很多相似之处, 包含算术逻辑运算部件 ALU 、通用寄存器、专用寄存器、标志寄存器等部件,这些部件的宽度 都是 16 位。图 2 . 1 仅是一个组成结构示意图,不可能包含所有细节。对执行部件的理解主 要在于它的总体功能和各类寄存器的功能和应用。
5 replies
Topic status
StatusOpen
BoardArchive
replies5