计算机是一个由不同组件构成的复杂系统。但其心脏,或称为大脑,是进行实际计算的组件,我们称其为中央处理器(Central Processing Unit,CPU)。在现代的台式计算机中,CPU是一块约一平方英寸大小的芯片,它的工作是执行程序。
  一个程序仅仅是一些无歧义的、由计算机机械地执行的指令。计算机能够执行那些由一种叫机器语言(Machine Language)所编写的指令,并且每种类型的计算机都有其自己的机器语言。因此,只要你的程序由相应的机器语言来表达,计算机便能直接执行它。(如果用其他种类的编程语言编写程序,并将其转换成相应的机器语言,你的程序同样可以执行。)
  当CPU执行一个程序的时候,这个程序存储于主存(Main Memory,也可称为Random Access Memory,RAM)之中。除了程序本身,主存中也存有该程序使用或处理的数据。主存由一系列按顺序编号的存储单元(Location)构成,这些单元的编号即为它们各自的主存地址。主存地址提供了一种从存储于主存中的数以百万计的信息中选出特定信息的方法。当CPU需要从特定的存储单元访问程序的指令或者数据,它会让单元的地址通过一个信号发送给主存。接着,主存会将指定单元所包含的信息返回给CPU。同样,CPU也能通过指定需要存储到主存的信息以及存储它的单元地址,将信息存入主存中。
  从机器语言层面看来,CPU的操作是相当简单的(尽管其中的细节相当的复杂)。当执行一个以一系列机器语言指令的形式存储于主存之中的程序时,CPU总是在重复地从主存中提取(Fetch)一条指令,然后执行(Execute)它。这个过程——读取一个指令然后执行它,再读取另一条并执行,如此往复——称作读取-执行周期(fetch-and-execute cycle)。这便是CPU全部的工作,不过也有一个例外情况,我将在下一节说明。
  对你来说,了解读取-执行周期的细节并不是非常重要,但是有一些基础知识你需要知晓:CPU包含几个内置寄存器,每个寄存器是一个能够保存一个数字或者一条机器指令的小型的内存单元。CPU用其中一个称为程序计数器(Program Counter,PC)的寄存器来保持对正在执行的程序指令执行位置的跟踪。PC仅保存CPU将要执行的下一条指令的主存地址。在每一个读取-执行周期开始前,CPU将确保PC知道CPU将要提取哪一条指令。在周期的过程当中,PC中的数值将更新为下一个循环中CPU所需执行的指令的主存地址。(下一循环的指令往往是同一程序中紧挨当前指令的下一条。)
  计算机机械地执行机器语言程序——即不会去理解或思考它们,采用这种方式与计算机的物理组成方式有关。要理解这个概念可能有些困难,我们需要知道:一台计算机由数百万个叫晶体管(Transistor)的微小开关(Switch)构成,这些开关用某种特定的方式集成在一起,并使其具有如下属性:一个开关开闭产生的输出信号能够改变另一个开关的开闭状态。当计算机进行计算时,这些开关按照连接方式及正在执行的程序共同决定的模式,互相控制闭合与断开。
  机器语言指令以二进制数的方式表示。一个二进制数仅能为0或1。每个0或1称为1位(Bit)。所以,一条机器语言的指令是一个由一些0和1构成的序列。每个特定的序列编码了一些特定的指令。计算机操作的数据也是一些二进制数编码而成。在现代计算机中,主存中的每一个存储单元储存1字节(Byte)空间的信息,每字节代表一个8位的序列。(一条机器语言指令或者一段数据通常占用多个字节空间,并且保存在连续的主存存储单元中。)
  计算机可以通过二进制数直接工作,是因为开关能够轻易地表达二进制数值——闭合开关即表示1、断开开关即表示0。机器语言指令以控制某些开关闭合或断开的模式存储于主存之中。当一条机器语言指令被读入CPU中,将会发生的便是指定的那些开关按照指令所编码的模式闭合或断开。CPU可以轻松地响应这种由指令编码的模式,因为构成它的开关都是连接在一起的。
  所以,对于计算机是如何工作的问题,你应该有了以下的认识:主存存储着编码成二进制数的机器语言程序和数据。CPU机械地从主存中一条一条地读取并执行机器语言指令,而不去思考或者理解它们做了什么。CPU所执行的程序必须是功能完备且无歧义的,因为除了按照程序的内容去执行它以外,CPU什么都不管。以下是一张能初步了解计算机的原理图: