8086微处理器的内部结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 控制寄存器组
(1)指令指针寄存器IP(Instruction Pointer) 8086CPU中设置一个16位指令指针寄存器IP,用来 存放将要取出的下一条指令在代码段中的偏移地址。 在程序运行过程中,BIU可修改IP中的内容,使它始 终指向将要取出的下一条指令。 注意: •IP与CS联用, 表示代码段中要处理的指令的逻辑地址; •IP和CS由系统执行,用户一般不能使用或修改。
指令队列 可存放6字节的指令代码。一般情况下指令队列中总是 填满指令,使EU可不断地得到执行的指令。 16位地址加法器
专门用来完成由逻辑地址变换成物理地址的功能。实际 上是进行一次地址加法,将两个16位的逻辑地址转换为 20位的物理地址,以达到可寻址1M字节的存储空间。 总线控制电路 将8086CPU的内部总线与外部总线相连,是8086CPU 与外部交换数据的必经之路。包括16条数据总线、20条 地址总线和若干条控制总线。
设置段寄存器的原因: 由于8086CPU可直接寻址的存储器空间是1M字节, 需要20位地址码。而CPU所有的内部寄存器都只有16 位,用这些寄存器只能直接寻址64K字节。 为此把1M字节的存储空间分成许多逻辑段,每段最 长为64k字节,这些逻辑段可在整个存储空间中浮动。 于是用段寄存器给定各个逻辑段的首地址的高16位,被 称为段地址。
2. 总线接口部件BIU
由地址加法器、专用寄存器组、指令队列缓冲器和 总线控制电路等部件组成; 主要功能是形成访问存储器的物理地址,负责与外 部(存储器或I/O接口)打交道。 正常情况下,BIU通过地址加法器形成指令的物理地 址,从给定存储器地址中取出指令代码送指令队列缓冲 器中等待执行(指令队列缓冲器中出现一个空字节, BIU将自动进行读指令的操作填满队列) 收到EU送来的操作数地址,BIU将立即形成操作数 的物理地址,完成读/写操作数或运算结果功能。遇到 转移类指令,BIU将指令队列缓冲器中的尚存指令作废, 重新从存储器目标地址中取指令送指令缓冲器中。
AH AL
BX
CX CL DX
(2)地址指针和变址寄存器 包括SP、BP、SI、DI四个16位寄存器。 • 可以在运算过程中存放操作数,但只能以字(16位) 为单位使用。 • 常用在段内寻址时提供偏移地址: SP ( Stack Pointer ) 称 为 堆 栈 指 针 寄 存 器 , BP (Base Pointer)称为基址指针寄存器,它们都可以与 SS寄存器联用确定堆栈段中的某一存储单元的地址。 SP用来指示栈顶的偏移地址,BP可作为堆栈区中的一 个基地址以便访问堆栈。 SI(Source Index)源变址寄存器和DI(Destination Index)目的变址寄存器:它们一般与DS联用,用来确 定数据段中某一存储单元的地址。
现将各标志位的定义说明如下: (1)CF(Carry Flag)进位标志位。如果做加法时最 高位(字节操作是D7位,字操作是D15位)产生进位或 做减法时最高位产生借位,则CF=1,否则CF=0。 (2)PF(Parity Flag)奇偶标志位。如果操作结果的 低八位中含有偶数个1,则PF=1,否则PF=0。 (3)AF(Auxiliary Carry Flag)辅助进位标志位。如 果做加法时D3 位有进位或做减法时 D3 位有借位 ,则 AF=1,否则AF=0。
数据总线
通用寄存器
8086 暂存寄存器
ALU数据总线 (16位)
CS DS SS ES IP 内部通信 寄存器
(16位)
总线 控制 逻辑
8086 总线
ALU
EU 控制 系统
Q总线 16位
指令队列
1 2 3 4 5 6
总线接口部件 (BIU)
标志
指令执行部 件(EU)
1. 指令执行部件EU 由算术逻辑单元(ALU)、标志寄存器、通用寄存 器组和EU控制器等部件组成。 主要功能是执行指令: ○一般顺序执行,EU不断地从指令队列中取指令连 续执行,而省去访问存储器取指令的时间。 ○需要访问存储器取操作数时,EU将访问地址送给 BIU后,将要等待操作数到来后才能继续操作; ○遇到转移类指令时,要将指令队列中的后续指令 作废,等待BIU重新从存储器取出目标地址中的指令代 码进入指令队列后,EU才能继续执行指令。
总之,汇编程序一般将源程序分成四个逻辑段,即 代码段CS、数据段DS、堆栈段SS和附加段ES。
•CS:存放代码段的段基地址。 •DS:存放数据段的段基地址。 •SS:存放堆栈段的段基地址。 •ES:存放附加段的段基地址。
CS→ DS→
代码段
数据段
堆栈段
SS→
ES→
附加段
•代码段存放可执行指令,该逻辑段是必不可少的; •数据段和附加数据段存放参加运算的操作数和运算结果; •堆栈段用于指示程序执行中需要使用的堆栈区。 如果程序量或数据量很大,超过64K字节,那么可定 义多个代码段、数据段、附加数据段和堆栈段。 只是4个段寄存器中存放的是当前使用的逻辑段的段 地址,必要时可修改这些段寄存器的内容,以扩大程序 的规模。
(4)ZF(Zero Flag)零标志位。如果运算结果各位都 为零,则ZF=1,否则ZF=0。
(5)SF(Sign Flag)符号标志位。如果运算结果的最 高位(字节操作是D7 ,字操作是D15 )为1,则SF=1, 否则SF=0。
(6)OF(Overflow Flag)溢出标志位。在加或减运算 中结果超出8位或16位有符号数所能表示的数值范围时, 产生溢出,OF=1,否则OF=0。
各个逻辑段允许重叠
例如,如果代码段中的程序占有8KB(2000H)存储区, 数据段占有2KB(800H)存储区,堆栈段占有256个字 节的存储区。此时分段情况如图所示。
代码段的区域本可为 02000H ~ 11FFFH (64KB),由于程序 区只需要8KB,所以 程序区结束后的地址 就可作为数据段的起 始地址(04000H) 注意:这里所谓的重叠只是指每个区段的大小允许根据 实际情况分配,而不一定非要占有64KB的最大段空间。
(8)TF(Trap Flag)单步标志位。假如TF=1,则 CPU处于单步工作方式。在这种工作方式下,CPU每 执行完一条指令就自动产生一次内部中断。在调试程序 DEBUG中,T命令就是利用这种中断。
(9)DF(Direction Flag)方向标志位。在串处理指令 中,若DF=0,表示串处理指令地址指针自动增量,即 串操作由低地址向高地址进行;DF=1,表示地址指针 自动减量,即串操作由高地址向低地址进行。DF标志 位可通过指令预置。
注意(1)OF位的求法为
OF= CYD7 CYD6 , //特别注意其中的CYD7、 CYD6 OF= CYD15 CYD14 // CYD15 和CYD14的求法。
(2)有符号数和无符号数的溢出问题:判断的标志OF和CF
(7)IF(Interrupt Flag)中断标志位。可用指令设置。 当IF=1时,CPU可响应可屏蔽中断请求;IF=0,CPU 不响应可屏蔽中断请求。
程序设计过程中必须遵守的系统内部约定:
如果访问存储器要求读/写操作数,则通常由DS给 出段地址(必要时可修改为CS、ES或SS),而其偏移 地址要由CPU的指令执行部件根据指令中所给定的寻 址方式来进行计算,通常将这样计算得到的偏移地址称 为有效地址(EA)。
如果所采用的寻址方式是通过基址指针BP寻址,则 段地址要由SS提供(必要时可以修改为CS、DS或ES)。
算术逻辑单元(ALU)
• 完成16位或8位的二进制运算; • 16位暂存寄存器用来暂存参加运算的操作数。 • 运算结果通过内部总线送到通用寄存器组或BIU的内 部寄存器中等待写入存储器。 • 经ALU运算后的结果特征置入标志寄存器中保存。 EU控制器
• 负责从BIU的指令队列中取指令,并对指令译码; • 根据指令要求向EU内部各部件发出控制命令以完成各 条指令的功能。 通用及标志寄存器 单独详细说明
2.1.3 8086存储器管理
1. 存储器的分段 8086微处理器有20根地址线,可访问存储器的最 大容量为1M字节。而8086内部所有的寄存器都只有 16位,只能寻址64K字节。因此在8086系统中, 把 整个存储空间分成许多逻辑段,每个逻辑段的容量 ≤64K字节,允许它们在整个存储空间中浮动,各个 逻辑段之间可以紧密相连,也可以相互重叠(完全 重叠或部分重叠)。
(2)标志寄存器FLAGS 8086CPU中设立一个两字节的标志寄存器FLAGS(又 称PSW、FR),有9个标志位: •6个状态标志位,表示运算结果的状态,包括CF、 PF、AF、ZF、SF和OF; •3个控制标志位,用来控制CPU的操作,包括IF、 DF和TF。
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 × × × × OF DF IF TF SF ZF ×AF × PF × CF
在8086存储空间中,各逻辑段的起始地址必须是能 被16整除的地址,即段的起始地址的低4位二进制码必 须是0。 段的起始地址的高16位被称为该段的段地址,把它 存放在相应的段寄存器中,而段内的相对地址可用系统 中的16位通用寄存器来存放,被称为偏移地址。
若已知当前有效的代码段、数据段、附加数据段和 堆栈段的段地址分别为1055H、250AH、8FFBH和 EFF0H,那么它们在存储器中的分布情况如图所示。 每个段可以独立地占用64K存储区。
百度文库
寄存器名
SI DI BP SP
特 殊 用 途 在字符串处理指令中作源变址寄存器用 在间接寻址中作变址寄存器用 在字符串处理指令中作目标变址寄存器用 在间接寻址中作变址寄存器用 在间接寻址中作基址指针用 在堆栈操作中作堆栈指针用
2. 段寄存器组
8086CPU的BIU中设置4个16位段寄存器: •代码段寄存器CS(Code Segment) •数据段寄存器DS(Data Segment) •附加数据段寄存器ES(Extra Segment) •堆栈段寄存器SS(Stack Segment)
2.1 8086微处理器的内部结构
2.1.1 8086基本组成
8086CPU由两个独立的功能部件组成: 总线接口部件BIU(Bus Interface Unit) 指令执行部件EU(Execution Unit)
地址总线(20位) AH BH CH DH SP BP SI DI AL BL CL DL Σ
通用寄存器AX、BX、CX和DX称为数据寄存器, 可用来存放16位的数据或地址。也可把它们当作八个8 位寄存器(AH、AL、BH、BL、CH、CL、DH、DL) 来使用,这时只能存放8位数据,而不能用来存放地址。
寄存器名 AX,AL
特
殊
用
途
在输入/输出指令中作数据寄存器用 在乘法指令中,存放被乘数或乘积 在除法指令中,存放被除数或商数 在LAHF指令中,作目标寄存器用 在十进制运算指令中作累加器用 在XLAT指令中作基址寄存器用 在间接寻址中作基址寄存器用 在XLAT指令中作基址寄存器用 在串处理和LOOP指令中作计数器用 在移位/循环移位指令中作移位次数计数器用 字乘法/除法指令中存放乘积高位或被除数高位或余数 在间接寻址的输入/输出指令中作地址寄存器用
由于EU和BIU可相互独立工作,大部分的取指令和执 行指令操作可以重叠进行,故大大减少了等待取指令的 时间,提高了微处理器的利用率和整个系统的执行速度。
2.1.2 8086内部寄存器
8086CPU中有14个16位的寄存器,其结构如下图。
1. 通用寄存器组
通用寄存器(8个)可分为两组: •数据寄存器(4个); •地址指针和变址寄存器(4个)。 (1)数据寄存器
2. 存储器中的逻辑地址和物理地址 采用分段结构的存储器中,任何一个逻辑地址由段 地址和偏移地址两个部分构成。它们都是无符号的16位 二进制数。 任何一个存储单元对应一个20位的物理地址,它由 逻辑地址变换得来,地址运算如下: 物理地址(PA)=段地址×16+偏移地址(EA)
由BIU中地址加法器中完成的