东北大学-计算机硬件技术基础


EU负责指令的执行,不与外部系统总线相连,执行的指令和数据从BIU的指令队列缓冲区中取得,执行指令的结果或执行指令所需的数据,都是通过EU向BIU发出请求,然后由BIU对存储器对存储器或外设存入或读取。
BIU根据EU的请求,完成CPU与存储器,与I/O端口之间数据的传送。
8086的指令队列为6字节。指令队列是CPU内部的硬件机构,按照先进先出(First In First Out)的原则使用。8086/8088在指令执行的同时,从内存中取一条或几条指令,取来的指令就存放在指令队列中。
BIU和EU并行工作的管理原则
- 当8086指令队列中有2个字节(8088空1个字节)为空时,BIU自动将指令存到指令队列中。
- 当EU执行一条指令时,它先从指令队列的队首取出指令代码,再用几个时钟周期去执行指令。在指令执行的过程中,如果必须访问存储器或I/O设备,则EU请求BIU进入总线周期去完成访问内存或I/O端口的操作。如果BIU此时正好空闲,则立即响应总线请求。如果此时BIU正在取指令,需完成当前取指令周期,然后去响应EU的总线请求
- 当指令队列已满,而且EU对BIU无总线请求,BIU进入空闲状态。
- 当执行转移(如JMP),调用和返回(RET)指令时,指令队列清零,BIU再向指令队列中装入另一个程序段的指令。原因是下面要执行的指令不再是指令队列中的下一条指令。
8086内部结构

通用寄存器
通用寄存器的高八位和低八位可分别编址,例如AX可编址为AH和AL
|
|
| AX |
存放算术逻辑运算的操作数 |
| AH |
可操作字节乘法,字节除法 |
| AL |
可操作字乘法,字除法,字I/O |
| BX |
在寻址过程中用于存放基地址,进行扩展寻址,起变址作用,操作转移指令 |
| CX |
在汇编程序中用于存放循环次数,起隐含计数器的作用 |
| CL |
可操作变量移位或循环 |
| DX |
用于存放数据,在某些I/O操作期间用来保存I/O端口地址,还用于字乘法和除法 |
|
|
| SP |
SP的内容指向当前堆栈的栈顶偏移地址。 |
| BP |
BP的内容指向堆栈段中某一块数据区的首地址。 |
| SI |
SI存放源数据串的偏移地址 |
| DI |
DI存放目的数据串的偏移地址。 |
SP必须和SS一起才能确定堆栈实际位置。 IP要与CS配合才能形成指令的实际物理地址。
PSW
| 15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
OF |
IF |
DF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
|
|
| CF |
当算术运算结果最高位有进位或借位时置1,否则置0,循环指令会影响这一标志。 |
| PF |
当运算结果中的'1'的个数为偶数时置1,为奇数置0。 |
| AF |
执行加法运算时,低4位向高位进位,或者执行减法运算高4位向低4位借位,置1,否则置0。AF一般用于BCD码运算中。 |
| ZF |
运算结果为0,置1,运算结果不为0,置0。 |
| SF |
运算结果的符号位一致。负置1正置0。 |
| OF |
运算结果产生溢出置1,无溢出置0。 |
| DF |
决定字符串处理方向,用于串操作指令中SI和DI的增量或者减量的修改。若DF = 0,则按照SI和DI的地址指针上升的方向处理(从低地址到高地址),DF = 1,按地址指针递减方向处理(从高地址到低地址)。 |
| IF |
IF为0时,CPU不能对可屏蔽中断请求作出响应;如果IF为1时,CPU可以接受可屏蔽中断请求。 |
| TF |
TF为1时,CPU每执行一条指令则暂停,供用户跟踪指令的执行。 |
地址寄存器
|
|
| IP |
在CPU中用于产生和保存下一条待取指令地址的寄存器。程序执行过程中,每取一条地址后IP内容自动加1,指向下一条要取指令的地址。在遇到转移指令时,转移后的指令地址送入IP,然后按该地址到内存取指令,从而实现程序转移 |
| SP |
其内容指向堆栈顶。每执行一次进栈或出栈操作后。SP自动加减,使SP的内容始终指向栈区的栈顶 |
| SI |
存放源数据串的偏移地址 |
| DI |
存放目的数据串的偏移地址 |
段地址寄存器
|
|
| CS |
保存当前执行程序的段寄存器值,CS内容左移4位,加上IP的内容,即下一条要取出的指令地址 |
| DS |
保存有数据段寄存器值,数据段用来保存当前程序的操作数据和变量。DS内容左移4位,再加上指令中的有效地址(偏移量)EA,即对数据段指定操作单元的地址 |
| SS |
保存当前堆栈段寄存器值,SS内容左移4位,再加上SP的内容,即指向堆栈顶的指针 |
| ES |
附加段进行字符串操作时,作为目的段地址使用 |