概述
计算机系统由 硬件 和 软件 组成,这篇文章主要简单介绍计算机的硬件系统。硬件系统由5大基础设备组成:运算器、控制器、存储器、输入设备、输出设备。
运算器和控制器被集成在一起统称为 *处理单元(CPU, Central Processing Unit),CPU是硬件系统的核心部件;存储器一般分为 内部存储器、外部存储器 两种,前者速度高容量小,后者反之;输入和输出设备统称为 外部设备,前者用于输入数据和命令,后者则用于输出结果。
本篇主要介绍CPU的基础组成。
*处理单元(CPU)
前面提到CPU由运算器和控制器集成,而实际上CPU的组成更为复杂,除了前两者外还有 寄存器组 和 内部总线 组成。下面对它们的前三者一一介绍,并在最后用Intel 8086的结构来做一个简单的印证:
运算器
它由 算术逻辑单元(ALU)、累加寄存器(AC)、数据缓冲寄存器(DR)、状态条件寄存器(PSW) 等组成,它主要负责完成计算机的 算术运算 和 逻辑运算。它由控制器指挥工作,所以它属于 执行部件。运算器每次运算二进制数的位数被称为 字长,通常有8、16、32、64位,寄存器、累加寄存器的长度一般会与算数逻辑单元相同。下面逐个介绍其组成部件:
-
算数逻辑单元(ALU, Arithmetic and Logic Unit)
该部件是运算器的核心,实际负责计算和逻辑的执行者。
-
累加寄存器(AC, Accumulator)
累加寄存器又被称作 累加器,它是一个通用的寄存器,为ALU提供工作区,给运算的中间结果和最后结果提供存放的空间。因为这个原因,运算器中至少会有一个累加器。
如做一次减法运算会从内存取出被减数放于AC中,随后再从内存储器中取出减数与AC相减,结果仍然放回AC中。
-
数据缓冲寄存器(DR, Data Register)
对内存储器读写时,会使用DR暂时存放一条指令或数据,将不同时间段读写的数据隔离。DR的主要作用就是作为CPU和内存、外部设备之间的中转站。在单AC结构的运算器里,DR还可以作为操作数寄存器。
-
状态条件寄存器(PSW, Program Status Word)
用于保存算术指令和逻辑指令或测试的结果建立的条件码,主要分为 状态标志和控制标志。这些标志通常分别由1位触发寄存器保存。
如运算结果进位标志、运算溢出标志、运算结果为0标志、运算结果为负标志、中断标志、方向标志、单步标志等等。
控制器
它通过产生不同的信号控制整个CPU的工作,决定了计算机的运行过程,不仅保证程序正确执行,还要处理异常事件。
控制器一般包括 指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑 等部分:
指令控制逻辑
负责对指令的读取、分析、执行,其过程分为 取指令、译码、操作、计算下个指令地址 等步骤,其中一般有如下部件:
-
指令寄存器(IR, Instruction Register)
CPU执行指令时会先从内存取到缓冲寄存器中,随后再放入IR中,译码器会根据IR的内容产生各种微指令控制其他部件完成工作。
-
程序计数器(PC, Program Counter)
它既负责寄存信息也负责计数,又被称为指令计数器。程序执行时可能是顺序的,也可能是跳跃的。在程序开始执行前,会将程序的起始地址放入PC。执行指令时CPU会自动的修改PC的内容,使其总是存放下一条待执行指令的地址。
-
地址寄存器(AR, Address Register)
保存当前CPU访问的内存单元地址。这主要由于CPU和内存存在速度上的差异,所以需要AR负责暂时记录地址信息,直至内存的I/O操作完成。
-
指令译码器(ID, Instruction Decoder)
指令分为操作码和地址码两部分,ID主要就是负责对操作码部分进行解释,发出具体的控制信号,以完成指令所需功能。
时序控制逻辑
负责为每条指令按时间顺序提供控制信号。
总线控制逻辑
负责多个部件之间提供信息通路的电路控制。
中断控制逻辑
负责根据中断请求的优先级对中断请求按顺序的交给CPU处理。
寄存器组
它保存从存储单元中读取的指令和数据,也保存状态信息,在CPU中又有 通用寄存器 和 专用寄存器 两类。
运算器和控制器中的寄存器就是专用寄存器,而通用寄存器的用途广泛,可以由程序员来使用,其数目因处理器的不同而不同。
Intel 8086 内部结构
图 Intel 8086 CPU简单内部结构
可以看到,CPU中存在刚才提到的各种结构。
从其ALU数据总线中可以看出这是一个16位的CPU。其中通用寄存器有AX、BX、CX、DX,它们都可以作为一个16位或两个独立的8位寄存器使用,于是乎每个里面又分为了高位(H)和低位(L),而SP、BP、DI、SI是地址指针寄存器。
另外各种专用寄存器则分布在ALU、PC周围,前文提到的各种专用寄存器均有一定程度的体现,而代码段寄存器(CS)、数据段寄存器(DS)、堆栈段寄存器(SS)、附加段寄存器(ES)、指令指针寄存器(IP)这些是对程序员可见的。另外上文中提到的那些专用寄存器则对程序不可见。
控制器就是图中的EU控制系统,可以看到在8086中它和ALU等部件高度紧密,根据指令队列控制ALU等部件的运行。