标志位
FLAGS
标志寄存器FR,共十六位,只用9位,其余备用
存放运算结果的特征信息,负责指令译码
状态标志位
CF:进位标志位
用于无符号加(减)法运算,若最高位由进(借)位则CF=1
OF:溢出标志位
当算数运算结果超出了有符号数可表达范围时,OF=1
ZF:零标志位
当运算结果位零时ZF=1,否则为零
SF:符号标志位
当运算结果的最高位位1时(补码表示即为负数),SF=1
计算机不会判断是否为有符号数,因此计算机判断溢出
最高位又进位,但次高位没有进位,或者最高位无进位,但次高位有进位:即最高位和次高位进位不一致时溢出
PF:奇偶标志位
运算结果的低八位中“1”的个数为偶数时 PF=1 奇数则为0
AF:辅助标志位
加减操作中,若
bit3
向bit4
有进位或借位,AF=1
控制标志位
TF:跟踪标志位
使CPU处于单步执行指令时的工作方式
IF:中断标志位
IF=1使CPU可以响应可屏蔽的中断请求
DF:方向标志位
在数据操作时确定操作方向
总线接口单元(BIU)
组成部件
- 4个16位段寄存器(CS;PS;SS;ES)
- 16位指令偏移地址寄存器(IP)
- 指令队列寄存器(8086CPU:6字节;8088CPU:4字节)
- 形成20位物理地址的加法器
- 与EU通讯的内部寄存器
- 总线控制逻辑
实现过程
实现CPU与寄存器 与储存器或I/O之间的数据传送
- 自动按CS值和IP值组成20位实际地址的存储器中去取指令,一次取两个字节指令放到指令队列中
- 由EU从指令队列中取指令,并根据EU请求,BIU将20位操作地址传送给储存器
- 取操作数经总线控制逻辑传送到内部EU数据总线,由EU完成内部操作
- 操作结果:若EU提出请求,则由BIU负责产生20位实际目标地址,将结果存入储存器里
功能
- 从内存中取指令到指令队列;(并行流水工作的基础,并没有数据预取)
- 负责与内存或输入/输出接口之间的数据传递
- 在执行转移程序时,biu使指令预取队列复位,从指定的新地址取指令,并立即传给执行单元执行
内存储器管理
- 8088/8086cpu是16位体系结构微处理器
- 可同时处理(产生)16位二进制编码
- 可以产生216 (64k) 个编码,可管理64k个内存单元
- cpu需要1MB(分段管理实现)
地址加法器
- 用于产生20位物理地址
- 8088/8086的寄存器均为16位,管理1MB的内存空间位装载20位(220=1MB) 物理地址
段寄存器
作用:用于存放相应逻辑段的段基地址,段寄存器的值表明相应逻辑段在内存中的位置
8086/8088内存中逻辑的类型
CS 代码段寄存器→存放指令代码(存放代码段基地址) DS 数据段寄存器→存放操作的数据(操作段基地址) ES 附加段寄存器→存放操作的数据(数据段基地址) SS 堆寨段基地址→存放暂时不需要但需保存的数据(存放堆寨段基地址)
- 寻找每个模块的地址(门牌号305,3楼05号房间)
- 增加”楼号”
- 1MB内存实现访问
- 每个内存单元在整个内存空间必须具备唯一地址——物理地址(20位)内存地址变换,将16位编码变为20位物理地址
各逻辑段之间可以部分、完整覆盖,连续、不连续等非常灵活
- 内存每个单元的地址在逻辑上都由两部分组成(楼牌号“305”)
- 段(基)地址(16位)(三楼)
- 指示存储单元在整个内存空间中处于哪个区域(段)
- 段内地址(相对地址/偏移地址,16位)(05号房间)
- 指示存储单元在段中的相对位置(与段中第一个单元的距离)
- 段地址共32位,转为20位物理地址(唯一的)
- 逻辑地址:段地址+ 偏移地址(不唯一)
地址计算
- 内存物理地址由段基地址和偏移地址组成
- 物理地址 = 段基地址×16 +偏移地址 (段基地址×16 = 段首地址)
- 转化为物理地址需要段基地址向左移动四位,乘24
段基地址:CS、DS、SS、ES
偏移地址:BX、BP、SP、SI、DI、IP
IP 指令指针寄存器
下一条要去的指令的偏移地址
注:存放偏移地址的有:BX、BP、SP、SI、DI、IP
指令队列
- 从内存中取指令得到指令队列(并行流水工作基础,并没有数据预取)
- 使EU和BIU两部分同时进行
- 提高了CPU效率,降低了对存储器存取速度的要求
GitHub Discussions