8086/8088内部结构
从功能上可以分为总线接口单元BIU和内部执行单元EU。
总线接口单元
负责完成CPU和存储器以及IO接口之间的数据传送。
总线接口单元内有4个16位段寄存器,即代码寄存器CS,数据段寄存器DS,堆栈段寄存器SS和附加数据段寄存器ES,一个16位的指令寄存器IP,一个20位的地址加法器。一个6字节指令队列缓冲区,一个EU通信的内部寄存器和总线控制电路等。
-
段寄存器
8086CPU地址引脚有20根,能提供20位的地址信息,可以直接对1M个存储单元进行访问。当CPU内部可用来提供地址信息的寄存器是16位。所以8086/8088处理器使用段结构的内存管理方法:
将指令代码和数据代码分别存储在代码段,数据段,堆栈段,附加数据段中,这些段地址分别由段寄存器,CS,SS,DS,DS提供,而代码或者数据在段内的偏移地址则由有关寄存器和立即数形式的偏移地址给出。
代码段用来存储相关的指令代码,下一条要读取的=指令在代码段的偏移地址由指令寄存器IP提供,数据段寄存器用来存放程序当前使用的数据段的段地址。 -
指令指针寄存器
指令指针IP用来存放下一条要读取的指令在代码段中的偏移地址。IP在程序中能自动修正加1。从而使其总是指向要执行的下一条指令的代码段的偏移地址。
- 20位地址加法器
负责产生访问存储单元的20位地址
存储器中的地址两种表示方式:
逻辑地址:段地址:段内偏移地址
物理地址:CPU与存储器进行数据交换时在地址总线上提供的20位地址信息。
由逻辑地址求物理地址:
物理地址=段地址×10H+段内偏移地址
- 指令队列缓冲器
8086指令队列有六个字节,8088有4个字节。
指令队列的引入使得EU和BIU可以并行执行。在BIU读指令的时候,并不影响EU从指令队列中取指令。
执行单元
执行单元负责BIU获取的指令。
16位算数逻辑单元(ALU):用于进行算数和逻辑运算。
16为标志寄存器FLAGS:用来存放CPU运算结果的状态特征和控制标志。
数据暂存寄存器:协助ALU完成运算,暂存参加运算的数据。
通用寄存器:包括4个16为数据寄存器,AX,BX,CX,DX和4个16位指针与变址寄存器,SP,BP与SI,DI。
EU控制电路:控制,定时与状态逻辑电路。接收从BIU取来的指令,经过指令译码形成各种控制信号。对EU各个部件形成特定的定时操作。
-
8086和8088的差异:
外部数据总线位数不同:8086为16位,在一个总线周期可以输出一个16位数据,而8088外部数据总线为8位,在一个总线周期只能输出或输入8位。
指令队列缓冲区的大小不同:8086指令队列可容纳6个字节,而8088只能容纳4个字节。一些引脚定义有区别。 -
通用寄存器
CPU内部有14个16位寄存器,按照功能可以分为两大类:通用寄存器,段寄存器和控制寄存器。
通用寄存器:
4个数据寄存器,两个变址寄存器。两个地址指针寄存器和两个变址寄存器。
数据寄存器:AX,BX,CX,DX
数据寄存器
AX称为累加器,用该寄存器存放运算结果可以使指令简化,提高指令的执行速度。所有IO指令都使用该寄存器与外设端口交换信息。
BX称为基址寄存器:在这两种CPU中有两种寄存器,BP和BX,BX存放操作数在内存数据段中的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。
CX称为计数器:在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序执行效率。
DX称为数据寄存器:在寄存器间接寻址的IO指令中存放IO端口地址,在作双字节乘除法运算时,DX和CX一起存放一个字节长的操作数,其中DX存放高16位数。
地址指针寄存器:SP,BP
SP称为堆栈指针寄存器,在使用堆栈操作指令(PUSH或者POP)对堆栈进行操作时,每执行一次进栈或者出栈操作,系统会自动将SP的内容减2或者加2,以使其始终指向栈顶。
BP称为基址寄存器,作为通用寄存器可以存放数据,但更重要的作用时用来存放堆栈段内的偏移地址。
变址寄存器SI和DI
SI称为源变址寄存器,DI为目的变址寄存器,这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段的偏移地址。
段寄存器:
CS称为数据段寄存器,用来存放代码段的段地址
DS称为数据段寄存器,用来存放数据段的段地址
SS称为堆栈段寄存器,用来存放程序当前使用的堆栈端的段地址
ES称为附加数据段寄存器,用来存放程序当前使用的数据附加段的段地址
控制寄存器:
IP称为指令指针寄存器。用来存放要执行下一条指令在代码段的地址。
FLAGS称为标记寄存器,他是一个16位寄存器,但只用了9位,这九位包括六个状态标志位和3个控制标志位。
状态标志位:
CF进位标志位,当进行加减运算的时候,若最高位发生进位或者错位,则CF为1,否则为0.主要用于判断无符号数运算结果超出了计算机所能表示的范围。
PF标识位,当指令执行结果的低八位中含有偶数个1,PF为1,否则为0。
AF 辅助标识位,当执行一条加法或者减法指令时,若结果低字节的低4位向高四位有进位或者有错位,则AF为1,否则为0。
ZF零标志位,SF符号标志位。OF溢出标志位。
控制标志位:
TF跟踪标志位
IF中断允许标志位
DF方向标志位
总线周期的概念:
CPU与存储器或者IO端口交换数据时需要启动一个总线周期。
按照数据的传送方向,总线周期可以分为读总线周期,CPU从存储器或者IO端口读取数据,和写总线周期,CPU将数据写入存储器或者IO端口。