中央处理机(CPU)的组成
- cpu的任务—执行存放在存储器里的指令序列,除要完成算数逻辑操作外,还要担负CPU和存储器以及I/O之间的数据传送任务
- 早期的CPU芯片只包括运算器和控制器两大部分。从80386开始为使存储器速度更好的与运算器速度相匹配,已在芯片中引入高速缓冲存储器。其后生产的芯片随着半导体器件集成度的提高,片内高速缓冲存储器的容量也逐步扩大,但这部分器件就其功能而言还是属于存储器的。
CPU芯片中除高速缓冲存储器之外的组成
算术逻辑部件(ALU arithmetic logic unit)
用来进行算数和逻辑运算
控制逻辑
负责对全机的控制工作,包括从存储器取出指令,对指令进行译码分析,从存储器取得操作数,发出执行指令的所有命令,把结果存入存储器,以及对总线以及I/O的传送控制等
工作寄存器
每一个寄存器相当于运算器中的一个存储单元,但他们的存储速度比存储器要快得多。
用来存放计算过程中做需要的或所得到的各种信息,包括操作数地址、操作数及运算的中间结果等。
80x86 寄存器组
通用寄存器
*******16位
***AX、BX、CX、DX——数据寄存器
AX(accunulator)
作为累加器使用,算术运算的主要运算器。
用来存放操作数(在乘除等指令中)
所有的I/O指令都使用AX与外部设备传递信息BX(base)
常用作基地址寄存器(在计算机存储地址时)
CX(count)
常用来保存计数值
DX(data)
一般在做双子长运算时把DX 和 AX组合在一起,存放一个双子长数,DX用来存放高位字。
对某些I/O操作,DX可用来存放I/O的端口地址
***SP、BP、DI、SI四个16位寄存器(指针或变址寄存器)
可以像数字寄存器一样在运算过程中存放操作数
它们只能以字(16位)为单位使用
他们更经常的用途是在存储器寻址时,提供偏移地址
**BP、SP都可以与堆栈寄存器SS连用来确定堆栈段中的某一存储单元的地址
SP( stack pointer 堆栈指针寄存器)
表示段顶的偏移地址
BP(base pointer 基地址指针寄存器)
可作为堆栈区中的一个基地址,以便访问堆栈中的信息
**SI、DI一般与数据段寄存器DS联用,用来确定数据段中某一存储单元地址
DI(destination pointer 目的变址寄存器)
在串处理指令中,SI、DI作为隐含的源变址和目的变址寄存器时 ,DI 和 附加段寄存器 ES 联用,达到在附加段中寻址的目的。
SI(source index 源变址寄存器)
在串处理指令中,SI、DI作为隐含的源变址和目的变址寄存器时,SI 和 DS 联用达到在数据段中寻址的目的。
****32位
EAX(专用于乘除法和I/O指令)、EBX、ECX(具有计数特性)、EDX、ESO、EBP、ESI、EDI(和ESI作为串处理指令专用的地址寄存器),并与8086/8088 和80286 的AX、BX、CX、DX一一对应。
-可以用来保存不同宽度的数据
EAX保存32位数据
AX保存16位数据
AH或AL 保存8位数据
**在计算机中,8位二进制数可组成一个字节
8086/8088 和 80286 的字长为16位,因此,两个字节组成的16位数称为字。
可以以双字的形式对其低16位以字的形式被访问,其中EAX、EBX、ECX、EDX 的低16位还可以以字节(8位)的形式被访问。
当这些寄存器以字或字节的形式被访问时,不被访问的其他部分不受影响。
在8086/8088 和 80286 中只有4个指针和变址寄存器以及BX寄存器可以存放偏移地址,用于存储器寻址。,在80386机器后继机型中所有2位通有寄存器即可以存放数据也可以存放地址,这些存储器都可以进行存储器寻址
专用寄存器
IP(instruction pointer 指令指针寄存器)
用来存放代码段中的偏移地址。
在程序运行的过程中,始终指向下一条指令的首地址,与段寄存器 CS 联用确定下一条指令的物理地址
当这一地址一送到存储器后,控制器可以取得下一条要执行的指令,而控制器一旦取得这一条指令就马上修改IP的内容,使它指向下一条指令的首地址SP(stack pointer 堆栈指针寄存器)
与堆栈寄存器联用,来确定堆栈段中栈顶的地址,即栈顶的偏移地址
FLAGS(标志寄存器 又称 PSW program status world)
是一个存放条件码的标志、控制标志和系统标志的寄存器
必要时。可以用以下指令来建立状态信息。条件码标志
用来记录程序运行结果的状态信息,是根据有关指令的运行结果由CPU自动设置的
OF(overflow flag 溢出标志)
在运算过程中,如操作数超出了机器能表示的范围,称为溢出,此时,OF 置为1,否则,置为0。
SF(sign flag 符号标志)
记录运算结果的符号,结果为负置为1,否则置为0。
ZF(zero flag 零标志)
运算结果为零时置为1,否则置为0。
CF(carry flag 进位标志)
记录运算从最高有效位产生的进位值。
例如执行加法指令时,最高有效位有进位时置1,否则置0。AF(auxiliary carry flag 辅助进位标志)
记录运算时第三位(半个字节)产生的进位值。
例如:执行加法指令第三位有进位值时置1,否则置0。PF(parity flag 奇偶标志)
用来为机器中传送信息时可能产生的代码出错情况提供检验条件。
当结果操作数中1的个数为偶数时置1,否则置0。
控制标志位为DF(direction flag)方向标志,用作在串 处理指令中控制处理信息的方向
系统标志位
可以用于I/O、可屏蔽中断、程序调试、任务切换和系统工作方式等的控制
TF(trap flag 陷阱标志)
用于调试时的单步方式操作。
当TF为1时,每条指令执行完后产生陷阱,由系统控制计算机;
当TF为0时,CPU正常工作,不产生陷阱。IF(interrupt flag)
当IF位为1时,允许CPU响应可屏蔽中断请求,否则关闭中断。(详见第八章)
IOPL(I/O privilege level)
I/O特权级,在保护模式下,用于控制对I/O地址空间的访问(详见第八章)
NT(nested task 嵌套任务标志)
指示当前任务嵌套于另一任务之内。
CPU用此位来控制被中断和被调用任务的链接RF(resume flag 重新启动标志)
该位由调试器设置,可以暂时关闭调试故障,以便在一次调试故障之后,指令可重新启动工作,以免立即引起另一次调试故障。
VM(virtual-8086 mode)
虚 8086 模式位,当该位为1时,处理机处于虚8086模式,在这一模式下,可模拟8086处理器的程序设计环境。
AC(ailgnment chek mode 对准检查方式位)
80x86中为了保证以更少的存储周期数从存储器读取一个数对存储单元地址有一定要求:字节操作数可以任意地址访问,字操作数应以偶地址数访问,双字操作数应以4的整数倍的地址访问,4字操作数(如 双精度浮点数)应以8的整数倍的地址访问等。
当AC位为0时,对访问的地址不加以限制,操作数可同样存取。
当AC位为1时,如访问地址不符合要求,则系统将自动实现地址对准,以提高访问速度。AC位只适用于特权级为3的用户方式下。
VIF(virtual interrupt flag)
虚拟中断标志
VIP(virtual interrupt pending flag 虚拟中断未决标志)
VIP和VIF 组合在一起允许多任务环境下的应用程序由虚拟的系统IF标志,VIF 即为 IF 位的虚拟映像。
ID(identification flag 标识标志)
程序有设置和清除ID标识的能力,以指示处理机对CPUID指令的支持。
在调试程序DEBUG中提供了测试标志位的手段,他用符号表示某些标志位的值
|标志名 |:标志为1: |标志为0: |
|OF 溢出(是/否)| OV | NV|
|DF 方向(增量/减量)|DN|UP|
|IF 中断(允许/关闭)|EI|DI|
|SF符号(负/正)|NG|PL|
|ZF零(是/否)|ZR|NZ|
|AF辅助进位(是/否)|AC|NA|
|PF奇偶(偶/奇)|PE|PO|
|CF进位(是/否)|CY|NC|
段寄存器
是一种专用寄存器,专用于存储器寻址,用来直接或间接的存放段地址
段寄存器的长度为16位
在80286以前的存储器中,只有代码段CS(code segment)、数据段DS(data segment)、堆栈段SS(stack segment)和附加段ES(extra segment)4个寄存器。
从80386起,增加了FS、GS两个段寄存器,属于附加的数据段。