总线接口部件BIU
功能:
形成访问存储器的物理地址(实际地址). 还有逻辑地址这一说,它的形式是,段地址:偏移地址(偏移地址也叫有效地址)
访问存储器取得指令并暂存到指令队列中等待执行,访问存储器或I/O端口以读取操作数参与EU运算.
组成:
①4个段地址寄存器(CS,DS,ES,SS) 存放段地址
②16位的指令指针寄存器IP: IP总是指向下一条指令的偏移地址(指向现在程序运行到何处)
③20位的地址加法器: 完成逻辑地址向物理地址的转换
④6字节的指令队列缓冲器
⑤总线控制逻辑
段地址寄存器(CS,DS,SS,ES)
存储器的分段
8086可寻址的存储空间位1MB,有20位的地址线(2的20次方种组合),而内部的寄存器是16位,只能寻址64KB
有20位地址线,却只有16位字长,但是4位不能浪费.
物理地址, 逻辑地址(逻辑地址的形式就是段地址:偏移地址). 物理地址是20位 段地址和偏移地址都是16位
也就是物理地址和20位地址线是统一的
逻辑地址是可以转换成物理地址的,我们为了用上20根地址线,将8086进行了分段
让段地址处于20位地址线的高16位,偏移地址处于20位地址线的低16位,让它们两个相加就得到了物理地址
8086存储空间中,把16字节的存储空间称作一节,要求各个逻辑段从节的正数边界开始,即段首地址低4位是'0',段首地址高16位称为"段基址",存放在段寄存器DS或CS或SS或ES中
段是可以重叠的(部分,完全重叠都可以),又作数据段,又作堆栈段
每个段都是64KB,如果有重叠的段,那么就少于64KB.
段可分为代码段,数据段,附加段,堆栈段(存什么就是什么). 代码段寄存器CS,数据段寄存器DS,附加段寄存器ES,堆栈段寄存器SS.
代码段:存放程序代码,程序代码超过64K时,需要分成几个段存放.CS中存放的是现在正在执行的程序段的段基址.
数据段:用于存放当前使用的数据.需要第二个数据段时可以使用附加段.
堆栈段:是内存中的一块存储区,用来存放专用数据.如调用子程序时的入口参数,返回地址等,这些数据都按照"后进先出"的规则进行存放. 因为堆栈段只有一个出入口.
SS存放堆栈段的段基址,SP存放当前堆栈栈顶的偏移地址.SP的值在执行堆栈操作指令时根据规则自动地进行修改.
段基址要提前存放在对应的段寄存器里:CS,DS,SS,ES(ES,SS不常用,CS是自动装入的,实际只涉及DS).
段寄存器:偏移/指针是固定搭配的,(要记住固定搭配)
段基址表示一个段的起始地址的高16位.
偏移地址是段内偏移:怎么偏移也出不了段.偏移地址也称为段内地址
段首地址=段地址x16,如果本身就是十六进制,直接在后面+0即可.
地址加法器
功能:完成逻辑地址向物理地址的变换(自动玩完成).
物理地址:访问存储器的实际地址,用20位二进制表示.
方法:物理地址=段基址x16(即二进制左移4位)+偏移地址
一个存储单元的物理地址是唯一的,而它对应的逻辑地址是不唯一的.
指令指针寄存器IP-(16位)
功能:用来存放将要执行的下一条指令在代码段中的偏移地址.在程序运行过程中,BIU自动修改IP中的内容,使它始终指向将要执行的下一条指令.
注意:程序不能直接访问IP,但是可通过某些指令修改IP的内容.
指令队列缓冲器-(6字节)
BIU从存储器中读出指令送入6字节的指令队列.(8086是6字节,8088的是4字节)
总线控制逻辑:将CPU的内部总线与CPU引脚所连接的外部总线相连,是CPU与外部交换信息的必经之路.
总线接口部件和执行部件的管理:
协同工作