怎样动手“造”一台冯·诺依曼架构计算装置

2018-08-23 02:07陈凯
中国信息技术教育 2018年13期
关键词:记事本计数器存储器

陈凯

关于冯·诺依曼架构计算机,很多教材提及的一是五大部件之功能,二是其利用存储器存储和调用程序之能力。然而,如果仅用文字和图片将冯·诺依曼架构计算机之组成和特征概括讲解一番,虽然能够完成基本教学任务,但如果问及为什么冯·诺依曼架构计算机具有存储和调用程序之能力,其运行程序过程具体为何,为什么说此种架构计算机可实现通用计算,估计很多信息技术教师也不知道其根本。虽然现今计算设备高度集成,硬件组成原理不容易触及,并且若要具体描述冯·诺依曼架构计算机工作过程,其间所涉及原始指令代码,与日常应用相距甚远,然而,若能在較短时间内,针对某特定简单运算问题,将冯·诺依曼架构计算机之核心工作过程做直观展现,则既能彰显隐藏于课程教授内容背后之技术思想,又能为学有余力者指引问题解答路径。此前确已得见多位教师尝试在课堂中展示冯·诺依曼架构计算机具体工作流程,其中有的用动画课件演示数据和控制信号变化,有的借用拼插积木在游戏交互中演示数据和控制信号变化。无论动画还是积木玩具,均不可称为真正编写程序代码,自然无从体现存储程序通用计算之能。若借助程序语言设计平台,如派森、爪哇之类的编写模拟器,提供可交互运行之冯·诺依曼架构计算机模拟平台,不免耗时耗力;又因当前几乎任何高级程序语言均为图灵通用系统,以此模拟冯·诺依曼架构通用计算过程,难免有倒果为因的嫌疑。因此,本文以八个记事本模拟冯·诺依曼架构计算机中各主要部件,辅以按键精灵录制“复制、查找、粘贴”过程展现架构中数据和控制信号变化,在计算机桌面上创生出一套可模拟运行的存储程序通用计算系统。

冯·诺依曼架构计算机存储结构的简单展示

在冯·诺依曼架构计算机中,存储器中既可以存储数据,也可以存储程序代码。为了简化问题,假设某冯·诺依曼架构计算机存储器含四个单元程序代码区,其中所存储程序代码作用为二进制数字由零开始反复加一操作,另含两个单元的数据区,用作加一操作的数据存储,其结构简化后如下页图1所示。

图1中,灰色部分为存储索引,不可更改,白色部分可读可写。为了描述问题简便起见,每个存储单位高低部分各可存储三位二进制数,总共可以存储六位二进制数,存储器共设六个存储单位,索引号自000编到101。当然,实际应用中,无论是存储单元还是每个单元的存储位数都远远多于本文的示例。

如何看出表中存储究竟为程序代码还是数字?只要高位全零,则表示所存为数据;除此之外即是程序代码指令,高位为操作码,表示操作动作类别,低位为操作数。一般操作数指向实际操作数字之存储器索引号,以图1为例,指令“001101”中高位“001”表示取数,低位“101”表示101号存储空间,则实际取出数字为“001”。上述程序代码先取出101号存储空间之“001”,随后将其与100号存储空间之“000”相加,并将结果存储于100号存储空间中,继而跳转至000号存储空间重复执行程序代码,如此即实现由零开始反复加一计数功能。实际上,冯·诺依曼架构系统中还有其他若干指令,如判断(Test)、减法(Dec)、停机(Halt)等,使之具有完整通用计算能力,这里限于篇幅不一一列举。

冯·诺依曼架构计算机运算过程剖析

冯·诺依曼架构框架图常见于教材或网络,如图2所示,其核心部件及部件之间关系虽然清晰,但也因过于概括,无法展现其具体运算细节,因此,本文借助表格稍做细化,如图3所示。

冯·诺依曼架构核心部件细化表中,控制器内控制器寄存器、计数器和指令地址之数据,运算器中运算器寄存器之数据,总线中数据总线和地址总线之数据,均可读可写。以加一操作为例,下页表展现出各指令具体工作过程。

调用程序及具体指令交错运行,但如果要追问加一计算何以可行,还要将冯·诺依曼架构计算装置实际搭建出来,然后按以上步骤一一验证。

冯·诺依曼架构计算装置的“组装”

如下页图4所示,冯·诺依曼架构计算装置组装方法颇为奇特,在操作系统中打开八个记事本窗口,分别作为运算器、运算器寄存器、存储器、控制器寄存器、控制器计数器、控制器指令地址、数据总线和地址总线。将记事本窗口平铺于桌面之上,其中指令地址、运算器寄存器、控制器寄存器、地址总线、数据总线默认置为“000”。

其他元件使用方法如下。计数器:只要连按三次删除键,即可作计数器使用。存储器:第一行写存储单位索引号,第二行对应索引号写存储单位高低位数据。运算器:通过穷举法实现三位二进制数加法运算,比如“000101 101”表示“000”加上“101”得“101”;实际上,记事本确能实现真正二进制运算,具体方法可参考本栏目往期文章。

记事本冯·诺依曼架构计算装置的使用

随后,按指令操作动作表,用鼠标和键盘模拟操作动作即可,如每次执行具体指令前均要先执行“调用程序”,其步骤如下:操作计数器给地址总线时,用鼠标将计数器中最前三位数字复制到地址总线中即可;操作存储器(根据地址总线的地址)给数据总线时,先复制地址总线中数据(如一开始时是“000”),然后在存储器中查找该数据,接着按键盘“下”,选中该索引号所对应的数据(如“001101”),再将该数据替换数据总线中的数据……

为了实现自动操作,可用“按键精灵”软件将上述动作录制下来。笔者用“按键精灵”录下二进制加一程序所需全部动作,排列组合后即可成为不同指令,如图5所示。“按键精灵”软件开发大约是为方便游戏玩家按键操作,开发者恐怕不曾想到会用于信息技术教学。

为了使“按键精灵”实现自动操作,须灵活使用记事本中“查找”功能,如为能使计数器反复使用,每次跳转(Jump)后,可将计数器中数字重新从000到111写好,然后在记事本中查找需要跳转至存储器之索引号,将之前数码删除即可(按若干次Backspace)。将上述录制键盘鼠标操作排列组合,即可实现取数(Take)、加法(Add)、存储(Save)、跳转(Jump)、调用(Fetch)等各个指令的操作动作。一旦操作动作录制完成,其后如要写入新的程序,或者修改程序,均不需重新录制,只要在“按键精灵”中将先前各项录制动作重新排列组合即可,于是就使得记事本具有“准通用”计算能力。之所以称“准通用”,是因为必须将记事本存储器中的指令与“按键精灵”中动作顺序保持一致方可运行。然而,能否不改变“按键精灵”录制动作顺序,只改变记事本存储器指令,即使“按键精灵”自动识别出记事本中指令代码?此种需求,须当“按键精灵”具有将其自身录制编辑动作之行为亦复录制下来的功能,方可实现,此类动作便称作递归。不难想象,当今高级语言之判断或循环,究其根本,都架构于基本的自我“录制”的递归基础之上。

猜你喜欢
记事本计数器存储器
基于Multisim10.1的任意进制计数器的设计与实现
小小记事本
SR620型与53230A型计数器的性能测试
土拨鼠的记事本
记事本里的信息技术课
独立拼装手机
算盘是个“小气鬼”
存储器——安格尔(墨西哥)▲
Buffalo推出四硬盘网络存储器 主打Soho一族
测试小型存储器阵列的新方法