前言
在了解8088内部结构之前,我们先来聊聊这部分内容大致是个什么情况。对于我们初学者来说,这部分内容相对是比较枯燥而且迷茫的,因为我们不知道在学什么,或者说听了之后感觉没什么收获,这是应该是我们大部分人的感受了,但我想说,既然是8088结构的概述,那我们就听个大概就行了,当然这个大概不是广度上的大概,不是说老师在课堂上讲了100%,你选择听80%。而是深度上的大概,初次接触我们能理解消化为自己的知识,那是祖师爷赏饭吃;理解不了就大概知道有这么个东西,因为日后会分解开来逐渐深入讲解,所以不要焦虑,只要一直在路上就不怕达到不了目的地。
8088内部结构
8088微处理器内部结构大致分为两个部分(注意不是整个计算机内部结构):
我们知道CPU主要是用来运算和控制整个计算机各个部件的协同工作的,那么据此可以分为运算和控制两大部分:
EU(执行单元):分界线左半部分,负责运算部分。
BIU(总线接口单元):分界线右半部分,负责CPU与其他部件交流与控制。
注意分界线是为了便于区分而认为画的。接下来我们根据CPU处理指令过程为序来介绍各个内部结构部件的作用,
1.取指令---->2.控制部件取数据---->3.取数据---->4.运算---->5.暂存数据---->6.运算结果---->7.输出。
1.取指令
在CPU开始工作之前要通过总线取指令,取到的指令放在指令队列里等待执行,类似于排队接水。8088有四个位置,最多取四个等待执行。
2.控制部件取数据
取指令之后,由EU控制部件控制调取数据。
3.取数据
想要取数据就要知道数据的地址,数据(泛指)存放在CPU外部的主存里,数据就像存放在仓库里的货物,段寄存器就是对数据的分类:
CS:代码段寄存器,存放代码段段基地址,就像第一层仓库的第一个房间号;
DS:数据段寄存器,存放数据(特指计算用的数值)段段基地址,就像第二层仓库的第一个房间号;
ES:附加段寄存器,存放当前计算辅助数的段基地址,就像第三层仓库的第一个房间号;
SS:堆栈段寄存器,存放堆栈段端基地址,就像第四层仓库的第一个房间号。
IP:程序计数器,相当于现代计算机中的PC(自动加一的那个),具有自动加一功能。
关于内部通信寄存器我也不太了解它是干嘛的,不过我自己理解为各部件协调完成一个较为复杂的程序时存放状态信息或地址的。
地址加法器就是将段寄存器的值经过转换与左边箭头传送过来的偏移地址相加得到数据存放的具体地址,这个原理会在实地址模式详细讲解,现在知道有这么一回事就行。
4.运算
![](https://i-blog.csdnimg.cn/blog_migrate/db1ba3271330c6cde4a63cf61d363850.png#pic_center)
从低到高:
CF:进位标识,CF=1代表结果向上有进位,例如两个8位数相加,运算结果向第九位进一。
PF:奇偶标识,PF=1代表低八位1的个数是偶数,反之1的个数是奇数,有点类似于奇校验。
AF:辅助进位标识,运算过程中bit0~bit3是低四位,AF=1代表bit3向bit4有进位,反之代表无进位。
ZF:0标识位,ZF=1代表运算结果等于0,反之运算结果不等于0。
SF:符号标识位,SF=1代表运算结果是负数,反之运算结果是正数。
TF:状态标识位,TF=1代表CPU处于单步运行状态。
IF:中断允许标识位,IF=1表示可以响应可屏蔽中断,反之可屏蔽中断不许执行。
DF:方向标识位,串操作时指明数据传输方向,DF=1代表地址递减方向传送,反之递增传送。
OF:溢出标识位,OF=1代表运算结果溢出,反之代表运算结果无溢出。
上边我们介绍了完成运算的ALU和表示运算状态的FLAGS,下面我们来看同属EU内的通用寄存器:
所有通用寄存器都具有一个基本功能:存放运算中间数据,比如计算1+2+3+4那么计算机会先算1+2=3将3暂时存放在通用寄存器,除了这一项基本功能之外,他们又有各自独特的专属功能,就像是工人,医生,科学家他们所具有的技能不同,但是他们都会呼吸。
其中上边四个寄存器AX,BX,CX,DX分别是由两个8位寄存器组成的16位寄存器。下面分别介绍这些寄存器的专属功能:
AX:常用作累加器。
BX:基址寄存器。
CX:计数寄存器。
DX:数据寄存器,存放端口地址,32位运算时存放高16位数据。
SP:堆栈指针,特指栈顶。
BP:堆栈指针,指向栈内任意元素。
SI:存放串操作源变址。
DI:存放串操作目标变址。
大致先有个印象,寄存器的功能不是脱离指令执行过程而独立存在的,只有将他们放在过程中才能对它们有深刻的理解,至此8088内部结构概述完结,加油!