本节将在最小系统的基础上进行扩展,打造一个符合冯·诺依曼体系结构的原型系统。冯·诺依曼体系结构是现代计算机的基础,现在的大多数计算机仍是冯·诺依曼计算机体系结构,在这种体系中,计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
原型系统1
扫描上方二维码可观看知识点讲解视频
原型系统2
扫描上方二维码可观看知识点讲解视频
原型系统的结构如图3-13所示。
图3-13 原型系统的结构
在原型系统中:
· 存储器为内存。
· 运算器(ALU)在CPU内部,与最小系统中ALU的功能相同。
· 输入设备为一个数字小键盘。为简单起见,假设输入的数字都是三位(不足三位的前面补0,例如001表示1、019表示19),并且大小不会超过127(因为本系统中整数只有一个字节)。
· 共有四个8位通用寄存器R0、R1、R2、R3,一个标志寄存器G,一个程序计数器PC,其中程序无法直接给寄存器G和PC赋值,所以在图3-13中没有画出。
· 输出设备为一个四位数码显示管。
控制器是整个原型系统的核心部件,主要功能是执行系统的指令,本原型系统设计的指令集中只包括12条指令,格式如表3-1所示。
表3-1 原型系统的指令格式
(续)
在机器启动时,可以对内存空间进行划分,例如16字节的内存中,规定前面3字节(0000~0010)为数据段,只存储数据,最后一个字节为显存,用于保存显示输出的数据,中间的12字节用于存放代码,控制器的代码执行初始值可定义为0011,即第一条指令存放在0011处,然后顺序执行或跳转执行,直到遇到停机指令。其示意图如图3-14所示。
图3-14 原型系统内存空间划分示意图
下面以两个简单的C语言程序为例,来说明原型系统的工作原理。
第一个程序的功能是输入一个大于1的数字a,计算1+2+…+a的值并显示出来,代码如下:
显然,我们的原型系统是无法运行这段C程序代码的,因此需要将该程序转换成原型系统能够执行的指令,这个转换过程也称为“编译”。此程序编译完成后的指令如下:
编译完成后,可以将此代码装载进内存中,此时原型系统的状态如图3-15所示。
图3-15 执行第一个程序后原型系统的状态
本书编写了一个程序来模拟原型系统,读者可在封底指示的网站下载相关代码,运行hnuvspm即可模拟原型系统的运行。
第二个程序的功能是输入两个数,保存这两个数,并输出其中的最小值。C程序代码如下。
编译完成后的指令如下:
编译完成后,可以将此代码装载进内存中,此时原型系统的状态如图3-16所示。
图3-16 执行第二个程序后原型系统的状态