计算机是怎样跑起来的(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-03 20:46:25

点击下载

作者:[日]矢泽久雄

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

计算机是怎样跑起来的

计算机是怎样跑起来的试读:

前言

我从 10 年前开始担任企业培训的讲师。培训的对象有时是新入职的员工,有时是入职了多年的骨干员工。这期间通过与一些勉强算是计算机专家的年轻工程师接触,我感到与过去的工程师(计算机发烧友)相比,他们对技术的兴趣少得可怜。并不是说所有的培训对象都如此,但这样的工程师确实占多数。这并不是大吼着命令他们继续学习或用激将法嘲讽他们的专业性就能解决的问题。究其根源,是因为计算机对他们来说,并没有有意思到可以令他们废寝忘食的地步。为什么他们会觉得计算机没意思呢?通过和多名培训对象的交流,我渐渐找到了答案。因为他们不了解计算机。然而,又是什么造成了他们的“不了解”呢?

今天,计算机正在以惊人的速度发展变化着,变得越来越复杂,而这期间产生了许多技术,但是人们并没有过多的时间去深入学习每一门技术,这就是问题的根源。稍微看了看技术手册,只学到了表层的使用方法,觉得自己“反正已经达到目的了”,这就是现状。如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经“懂”了。不懂的话,做起来就会感到没意思,也就更不会产生想要深入学习的欲望了。若每日使用的都是些不知其所以然的技术,就会渐渐不安起来。令人感到遗憾的是,还有一些人在计算机行业遇到挫折后,就选择了离开这个行业。身为一名教授计算机技术的讲师,我由衷地感到自己应该想办法改变这种现状。

对于笔者以及昔日的计算机发烧友而言,虽然大家现在都已经 40 岁左右了,但即使是面对复杂的最新技术,似乎也还是可以轻松掌握的。其原因在于,从可以轻松买到最初的 8 比特微型计算机的那个时候开始,我们就幸运地接触到了计算机。面对为数不多的技术,我们可以从容地把时间花在学习计算机的基础知识上。而这些基础知识,即使到了今天也完全没有变化。因此,即便面对的是复杂的最新技术,一旦把它们回归到计算机的基础知识上,就变得可以轻松理解了。就算是和年轻的工程师们阅读同样的技术手册,我们领会其中的要点、抓住其本质的速度也要快得多。

其实不仅是计算机,其他学问亦是如此。首先要划出一个“知识的范围”,精通一门学问所必知必会的知识都在这个范围内。其次是掌握该范围内每个知识点中“基础中的基础知识”。最后是能独当一面的“目标”,即掌握了这些知识可以做什么。下面就以学习音乐为例说明这三点。首先,划出的“知识范围”是节奏、旋律、和弦这三个知识点。所谓“基础中的基础知识”,对于节奏来说就是四拍子(大、大、大、大),对于旋律来说就是 C 大调(do re mi fa so la si do),对于和弦来说就是大三和弦(do mi so)。以四拍子为基础就能理解更加复杂的三拍子或五拍子;以 C 大调为基础就能理解更加复杂的降 B 小调;以大三和弦为基础就能理解更加复杂的减三和弦。而最终的“目标”就是能够自己作曲并演奏,尽管这时仅能完成很简单的曲子。

本书的目的是想让诸位了解有关计算机技术的知识范围,掌握其基础中的基础知识,设定目标;同时又想让那些打算用计算机做点什么,却又因难以下手而犹豫不决的人,以及虽然就职于计算机行业,却又因追赶不上最新技术而苦恼的人,能够了解计算机的本质。其实计算机非常简单,谁都能掌握。只要掌握了,计算机就会越来越有趣。矢泽久雄本书将要讲解的主要关键词本书的结构

本书共分为 12 章,每章由热身问答、本章要点和正文三部分构成。全书还穿插了 2 个专栏。● 热身问答在各章的开头部分设有简单的问题作为热身活动,请诸位务

必挑战一下。设置这一部分的目的,是为了让诸位能带着问题阅

读正文的内容。● 本章重点各章的本章要点部分揭示了正文的主题。诸位可以读一读,

以确认这一章中是否有想要了解的内容。● 正文正文部分会以讲座的方式,从各章要点中提到的角度出发,

对计算机的运行机制予以解释说明。其中还会出现用 Visual

Basic 或 C 语言等编程语言编写的示例程序,编写时已力求精

简,即便是没有编程经验的读者也能看懂。● 专栏“来自企业培训现场”专栏部分将会与诸位分享笔者自担任讲师以来,从培训现场

收集来的各种各样的轶事。诸位可以时而站在讲师的角度、时而

站在听众的角度读一读这部分。专栏部分不仅有严肃认真的话题,

更有有趣逗乐的笑话,想必会对诸位有所帮助。第 1 章计算机的三大原则

热身问答

在阅读本章内容前,让我们先回答下面的几个问题来热热身吧。

问题

初级问题

硬件和软件的区别是什么?

中级问题

存储字符串“中国”需要几个字节?

高级问题

什么是编码(Code)?

怎么样?被这么一问,是不是发现有一些问题无法简单地解释清楚呢?下面,笔者就公布答案并解释。

答案

初级问题:硬件是看得见摸得着的设备,比如计算机主机、显示器、键盘等。而软件是计算机所执行的程序,即指令和数据。软件本身是看不见的。

中级问题:在 GBK 字符编码下,存储“中国”需要 4 个字节。

高级问题:通常将为了便于计算机处理而经过数字化处理的信息称作编码。

解释

初级问题:硬件(Hardware)代表“硬的东西”,而软件(Software)代表“软的东西”。是硬的还是软的取决于眼睛能否看得到,或者实际上能否用手摸到。

中级问题:存储汉字时,字符编码不同,汉字所占用的字节数也就不同。在 GBK 字符编码下,一个汉字占用 2 个字节。而在 UTF-8 字符编码下,一个汉字占用 3 个字节。

高级问题:计算机内部会把所有的信息都当成数字来处理,尽管有些信息本来不是数字。用于表示字符的数字是“字符编码”,用于表示颜色的数字是“颜色编码”。

本章重点

现在的计算机看起来好像是种高度复杂的机器,可是其基本的构造却简单得令人惊讶。从大约 50 年前的第一代计算机到现在,计算机并没有发生什么改变。在认识计算机时,需要把握的最基础的要点只有三个,我们就将这三个要点称为“计算机的三大原则”吧。无论是多么高深、多么难懂的最新技术,都可以对照着这三大原则来解释说明。

只要了解了计算机的三大原则,就会感到眼前豁然开朗了,计算机也比以往更加贴近自己了,就连新技术接连不断诞生的原因也明白了。本书以本章介绍的计算机的三大原则为基础,内容延伸至硬件和软件、编程、数据库、网络以及计算机系统。在阅读之后的章节时,也请诸位时常将计算机的三大原则放在心上。1.1 计算机的三个根本性基础

下面就赶紧开始介绍计算机的三大原则吧。

1. 计算机是执行输入、运算、输出的机器

2. 程序是指令和数据的集合

3. 计算机的处理方式有时与人们的思维习惯不同

计算机是由硬件和软件组成的。诸位可以把硬件和软件的区别理解成游戏机(硬件)和收录在 CD-ROM 中的游戏(软件)的区别。这样就能理解硬件和软件各自的基础了(三大原则中的第一点和第二点)。

在此之上,计算机有计算机的处理方式也是一条重要的原则。而且请诸位注意,计算机的处理方式往往不符合人们的思维习惯(三大原则中的第三点)。

计算机三大原则中的每一条,都是从事计算机行业 20 余年的笔者深切领悟出来的。诸位可以把这本书拿给你周围了解计算机的朋友看,他们应该会对你说“确实是这样的啊”“当然是这样的了”这类话。过去的计算机发烧友们在不知不觉中就能逐渐领悟出计算机的三大原则。而对于那些打算从今日开始深入接触计算机的普通人来说,三大原则中的有些地方也许一时半会儿难以理解,但是不要担心,因为下面的解释会力求让诸位都能理解三大原则的具体含义。1.2 输入、运算、输出是硬件的基础

首先从硬件的基础开始介绍。从硬件上来看,可以说计算机是执行输入、运算、输出三种操作的机器。计算机的硬件由大量的 IC(Integrated Circuit,集成电路)组成(如图 1.1 所示)。每块 IC 上都带有许多引脚。这些引脚有的用于输入,有的用于输出。IC 会在其内部对外部输入的信息进行运算,并把运算结果输出到外部。运算这个词听起来也许有些难以理解,但实际上就是计算的意思。计算机所做的事就是“输入”数据 1 和 2,然后对它们执行加法“运算”,最后“输出”计算结果 3。图 1.1 IC 的引脚中有些用于输入,有些用于输出

小型的 IC 自不必说,就连在观察银行的在线系统这类巨型系统时,或是编写复杂的程序时,也要时常把输入、运算、输出这三者想成是一套流程,这一点很重要。其实计算机就是台简单的机器,因为它只能做这三件事。“你说得不对,计算机能做的事远比这些多得多。”也许会有人这样反驳笔者。的确,计算机可以做各种各样的事,比如玩游戏、处理文字、核算报表、绘图、收发电子邮件、浏览网页,等等。但是无论是多么复杂的功能,都是通过组合一个又一个由输入、运算、输出构成的流程单位来实现的,这是毋庸置疑的事实。如果打算用计算机做点什么的话,就要考虑该如何进行输入、如何获取输出以及进行怎样的运算才能从输入得到输出。

输入、运算、输出三者必须成套出现,缺一不可。这样说的原因有几点。首先,现在的计算机还没有发展到能通过自发的思考创造出信息的地步。因此不输入信息,计算机就不能工作。所以,输入是必不可少的。其次,计算机不可能不执行任何运算。如果只是使输入的信息绕过运算环节直接输出,那么这就是电线而不是计算机了。可以说不进行运算,计算机也就没有什么存在的意义。最后,输入的信息如果经过了运算,那么运算结果就必然要输出。如果不输出结果,那么这也不是计算机而只是堆积信息的垃圾箱了。因此,输出也必不可少。图 1.2 计算机只会输入、运算、输出1.3 软件是指令和数据的集合

下面介绍软件,即程序的基础。所谓程序,其实非常简单,只不过是指令和数据的集合。无论程序多么高深、多么复杂,其内容也都是指令和数据。所谓指令,就是控制计算机进行输入、运算、输出的命令。把向计算机发出的指令一条条列出来,就得到了程序。这里成套出现的输入、运算、输出,就是之前在硬件的基础一节中说明过的流程。向计算机发出的指令与计算机硬件上的行为一一对应是理所当然的。

在程序设计中,会为一组指令赋予一个名字,可以称之为“函数”“语句”“方法”“子例程”“子程序”等。这里稍微说些题外话,在计算机行业,明明是同一个东西,却可以用各种各样的术语来指代它,这种现象请诸位注意。如果只想用一个名字的话,一般情况下笔者推荐称之为函数,因为这个名字通俗易懂。

程序中的数据分为两类,一类是作为指令执行对象的输入数据,一类是从指令的执行结果得到的输出数据。在编程时程序员会为数据赋予名字,称其为“变量”。看到变量和函数,诸位也许会联想到数学吧。正如数学中函数的表记方法那样,在很多编程语言中都使用着类似于下面的这种语法。y = f(x)

这句话表示若把变量 x 输入到函数 f 中,经过函数内部的某种运算后,其结果就会输出到变量 y 中。因为计算机是先把所有的信息都表示成数字后才对其进行运算的,所以编程语言的语法类似数学算式也就不足为奇了。但是在程序中有一点与数学不同的是,变量和函数的名字都可以由一个以上的字符构成,比如下面这种情况。output = operate(input)

也就是说,使用由多个字符构成的长名字也是可以的。甚至可以说,写成这样的情况更加普遍。

下面我们就举一个例子作为证据来证明程序是指令和数据的集合。请诸位看代码清单 1.1。这里列出了一段用名为 C 语言的编程语言编写的程序。C 语言中要在每条指令的末尾写一个分号“;”。第一行的“int a, b, c;”表示接下来要使用名为 a、b、c 的整数变量,其中 int 是 integer(整数)的缩写,用于告诉计算机“要用的是整数”。下一行的“a = 10”表示把整数 10 赋值给变量 a。同样地,“b = 20;”表示把整数 20 赋值给变量 b。等号“=”是赋值给变量的指令。再来看最后一行的“c = Average(a, b);”,这一行表示把变量 a 和 b 传给函数的参数,并将运算结果赋值给变量 c。其中使用了一个名为 Average 的神秘函数,它的作用是返回两个参数的平均值。通过上面这个例子,诸位就应该能明白程序确实只是由指令和数据构成的了吧。

代码清单 1.1 C 语言的程序示例片段int a, b ,c;a = 10;b = 20;c = Average(a, b);

虽然程序就是这样,但是那些稍微有些编程经验的人也许会说:代码清单 1.1 所示的程序逻辑简单,而真正的程序是使用了各种各样的语法、比这复杂得多得多的东西,绝不是用指令和数据的集合就能解释清楚的。其实并不是像他们想的那样,无论是多么复杂的程序,都只不过是指令和数据的集合。下面我们再拿出一个证据。

在一般的编程过程中,都要先编译再执行。所谓编译就是把用 C 语言等编程语言编写的文件(源文件)转换成用机器语言(原生代码)编写的文件。假设我们先把代码清单 1.1 中的代码保存到文件 MyProg.c 中,然后经过编译就可以生成可执行的程序文件 MyProg.exe 了。接下来使用能查看文件内容的工具查看 MyProg.exe,其内容应该与代码清单 1.2 类似。可以看到里面仅仅是数值的罗列(这里用十六进制数表示)。

代码清单 1.2 机器语言的程序示例C7 45 FC 01 00 00 00 C7 45 F8 02 00 00 00 8B 45F8 50 8B 4D FC 51 E8 82 FF FF FF 83 C4 08 89 45F4 8B 55 F4 52 68 1C 30 42 00 E8 B9 03 00 00 83

请选择一个代码清单 1.2 中的数值,随便哪个都可以。这个数值代表什么呢?是表示赋值或加法等指令的种类呢,还是表示将成为指令执行对象的数据呢?也有这样的可能(不过这终归是想象),第一个数值 C7 表示指令,第二个数值 45 表示数据。在诸位所使用的 Windows 个人计算机中,应该会有若干个以 .exe 为扩展名的可执行程序文件。无论是哪个程序,其内容都是数值的罗列,每个数值要么是指令,要么是数据。1.4 对计算机来说什么都是数字

计算机有计算机的处理方法,这是三大原则中的最后一点。计算机本身只不过是为我们处理特定工作的机器。如果计算机能自己干活的话,那么笔者一定会买几百台,让它们先替自己完成一整年的工作。但是,并没有这种会挣钱的计算机,计算机终究只是受人支配的工具。

迄今为止,使用计算机的目的就是为了提高手工作业的效率。例如,文字处理软件可以提高编写文档的效率;电子邮件可以提高传统邮件寄送的效率。总之,作为可以提高工作效率的工具,有些靠手工作业完成的业务可以直接交给计算机处理。但是也有很多手工作业无法直接由计算机处理。也就是说,在用计算机替代手工作业的过程中,要想顺应计算机的处理方法,有时就要违背人们的思维习惯。请诸位特别留心这一点。

用数字表示所有信息,这就是一个很具有代表性的计算机式的处理方法,这一点也正是和人类的思维习惯最不一样的地方。例如,人们会用“蓝色”“红色”之类的词语描述有关颜色的信息。可是换作计算机的话,就不得不用数字表示颜色信息。例如,用“0,0,255”表示蓝色,用“255,0,0”表示红色,用“255,0,255”表示由蓝色和红色混合而成的紫色。不光是颜色,计算机对文字的处理也是如此。计算机内部会先把文字转换成相应的数字再做处理,这样的数字叫作“字符编码”。总之计算机会把什么都用数字来表示。

熟悉计算机的人经常会说出一些令人费解的话,例如“在这里打开文件,获得文件句柄”“把用公钥加密后的文件用私钥解密”。那么,他们所说的“文件句柄”是什么呢? —— 是数字。“公钥”是什么呢?——是数字。“私钥”呢?——当然还是数字。无论计算机所处理的信息是什么形式,只要把它们都当成是数字就可以了。虽然这有些违背人们的思维习惯,但是处理数字对计算机来说却是非常简单的。

下面笔者就讲一件自己年轻时的糗事吧。事情发生在一次与老程序员探讨问题时,我问他:“用某某程序处理的某某数据,在计算机内部也是用数字表示的吧?”老程序员听后,吃惊得张开了嘴,回了一句:“这不是明摆着吗 !”1.5 只要理解了三大原则,即使遇到难懂的最新技术,也能轻松应对

有关计算机三大原则的说明到此结束。只要理解了这三大原则,即使遇到难懂的最新技术,也能轻松应对。下面就给诸位看一个具体的例子。这里摘录了一段有关 .NET 技术的介绍,.NET 是微软公司率先提出的一种新技术。如果要正式地介绍 .NET 技术,就会像下面这样进行说明。【有关 .NET 的说明之一】

微软公司率先提出了作为新一代互联网平台的 .NET 技术。作为 .NET 核心的 XML Web 服务使用通用技术 SOAP、XML,促使企业间的计算机协同工作。

真是不好理解的一段话啊。可是如果把 .NET 的核心技术对照着计算机三大原则再介绍一遍的话,就会像下面这样进行说明。【有关 .NET 的说明之二】

计算机是执行程序的机器。程序是指令和数据的集合。为了使互联网上相互连接的计算机能通过程序协同工作,微软公司采用了 SOAP 以及 XML 规范。SOAP 是关于调用指令的规范,XML 则是定义数据格式的规范。

只要定义出了指令和数据的规范,装有符合规范的程序的计算机自然就可以相互协作了。所谓计算机的协同工作指的是,输入到一台计算机中的数据,可以通过互联网传送到与这台计算机相连的其他计算机上执行运算,运算所输出的结果再返回给这台计算机。像这样部署在其他计算机上能执行某种运算的程序就叫作 XML Web 服务。

这回怎么样?应该变得容易理解了吧?如果又想到了其他的问题,比如“为什么不得不遵循 SOAP 和 XML 的规范呢?”或者“实际看了看 SOAP 和 XML 的规范,才发现也很复杂。”那么就可以把答案归结为“因为那些都是适合计算机的处理方式”。1.6 为了贴近人类,计算机在不断地进化

围绕着计算机的技术正在以狂奔般的速度不断进化,与其说是日新月异,倒不如说是“秒新分异”。虽然也许有人会觉得眼前的已经够用了,希望能停留在现有的技术水平上。但是计算机的进化是不会停止的,因为计算机还远远没有到达完善的地步。

计算机进化的目的只有一个——与人类更加相近。要想贴近人类,就必须从计算机的处理方式中摒弃不符合人们思维习惯的部分。请对照着计算机三大原则之一的“计算机有自己的处理方式”来记忆这个结论。

举例来说,键盘这种不好用的输入设备进化成了好用的鼠标。平面的 2D(二维)游戏进化成了立体的 3D(三维)游戏。无论是哪一种进化,都是为了使计算机的处理方式更加贴近人类。

这样发展下去的话,也许计算机进化的最终形态就是机器人了,有着与人类一样的外表,可以使用人类的语言。例如在 1985 年茨城县筑波市举办的筑波世博会上,就展示出了一台用 CCD 照相机识别乐谱,弹奏钢琴的机器人。也许有人会觉得:“数码音乐什么的用个人计算机不是也能完成吗?”但是这个发明的意义在于机器人能和人类做相同的事了。就在不久前,本田公司开发出的两足步行机器人也成为了热议的话题。也许又有人会觉得:“为什么非要特地用两只脚行走呢,装上轮子能动起来不也一样吗?”但是这个发明的意义还是在于机器人能和人类做相同的事了。有乐谱和钢琴就能演奏,人能走的道路或台阶它也能走,这样的机器人无疑才能更加方便地应用于人类社会。

若与十几年前相比,诸位身边的个人计算机也在逐渐贴近人类。20 世纪 80 年代中期盛行的个人计算机操作系统是 MS-DOS,其操作方法是靠在全黑的画面上敲入字符,把命令传给计算机。进入 90 年代后,MS-DOS 进化成了 Windows,用户可以在图形界面上通过鼠标的操作直观地下达命令(如图 1.3 所示)。开发出 Windows 的美国微软公司,正将目标锁定在用户体验(User Experience)上,旨在开发出超过现有 Windows、更加贴近人类的用户界面(计算机的操作方法)。Windows XP 和 Office XP 末尾的 XP,代表的就是 Experience(体验)。Windows 若能这样不断进化下去,早晚会有一天,面向个人计算机的语音输入和手写输入等技术将变得极为普及。图 1.3 为了贴近人类,个人计算机操作系统也在进化

诸位读者当中应该也有对编程感兴趣的人吧。编程方法也在进化,进化的成果是诞生了两种编程方法,面向组件编程(Component Based Programming)和面向对象编程(Object Oriented Programming)。这两者的进化目标一致,都是使程序员可以在编程中继续沿用人类创造事物时的方法。面向组件编程的方法是通过将组件(程序的零件)组装到一起完成程序;面向对象编程的方法是先如实地对现实世界的业务建模,之后再把模型搬到程序中。使用符合人类思维习惯的编程方法,可以实现高效率的开发。

但是,偏偏有这类程序员,他们对面向组件编程敬而远之,明明有各种各样现成的组件可供使用,却什么功能都要自己亲手做,仿佛不这样编程就不舒心。还有的程序员误认为面向对象编程难以理解。像这样的程序员人数还不少,特别是在昔日的计算机发烧友当中。总之就是因为他们太习惯于配合计算机的处理方式了,反倒认为计算机贴近人类这一发展趋势是在添乱。

笔者则认为,无论是刚入行的技术人员,还是有资历的老工程师,都应该由衷地欢迎技术的进化,坦率地接受新技术。如果是用祖传技艺制作出来的传统手工艺品的话,也许还有价值,但是没有人会稀罕靠一成不变的方法编写出的程序。1.7 稍微预习一下第 2 章

作为第 2 章的预习,在本章的最后先来简单地介绍一下计算机(特别是个人计算机)硬件的组成要素。这里讲得不会很难,请先看一下图 1.4,体会一下图中的要点。如图所示,计算机内部主要由被称作 IC 的元件组成。虽然在 IC 家族当中有功能各异的各种 IC,但是在这里希望诸位记住的只有三种:CPU(处理器)、内存以及 I/O。图 1.4 计算机硬件的组成要素

CPU 是计算机的大脑,在其内部可对数据执行运算并控制内存和 I/O。内存用于存储指令和数据。I/O 负责把键盘、鼠标、显示器等周边设备和主机连接在一起,实现数据的输入与输出。

在诸位所使用的 Windows 个人计算机中,多数都只装有一枚名为 Pentium(奔腾)的 CPU 吧。内存的数量则会根据所需存储的大小(少则 32MB,多则 256MB)装有多条。I/O 也会根据周边设备的多少装配有多个。可以认为个人计算机背板上有多少个插孔就有多少个 I/O。

只要用电路把 CPU、内存以及 I/O 上的引脚相互连接起来,为每块 IC 提供电源,再为 CPU 提供时钟信号,硬件上的计算机就组装起来了,还是非常简单的吧。所谓时钟信号,就是由内含晶振1的、被称作时钟发生器的元件发出的滴答滴答的电信号。如果是 Pentium CPU 的话,所使用的时钟信号会从几百 MHz 到 2GHz 不等。

1一种利用石英晶体(又称水晶)的压电效应产生高精度振荡频率的电子元件。——译者注☆   ☆   ☆

诸位辛苦了,至此第 1 章就结束了。想必诸位都已经理解了计算机的三大原则以及计算机为什么要进化了吧。因为这些知识真的非常重要,所以如果第一遍没有读懂,就请再反复多读几遍。也可以叫上公司的同事、学校的同学一起讨论本章的内容。如果能让有资历的老工程师也加入讨论,那么效果会更加显著。

在接下来的第 2 章中,我们将尝试着动手“制造”一台计算机。说是制造,也只不过是在纸上进行的“模拟体验”,而且笔者会带着诸位做,所以请不要担心。敬请期待!第 2 章试着制造一台计算机吧

热身问答

在阅读本章内容前,让我们先回答下面的几个问题来热热身吧。

问题

初级问题

CPU 是什么的缩写?

中级问题

Hz 是表示什么的单位?

高级问题

Z80 CPU 是多少比特的 CPU ?

怎么样?被这么一问,是不是发现有一些问题无法简单地解释清楚呢?下面,笔者就公布答案并解释。

答案

初级问题:CPU 是 Central Processing Unit(中央处理器)的缩写。

中级问题:Hz(赫兹)是频率的单位。

高级问题:Z80 CPU 是 8 比特的 CPU。

解释

初级问题:CPU 是计算机的大脑,负责解释、执行程序的内容。有时也将 CPU 称作“处理器”。

中级问题:通常用 Hz 来表示驱动 CPU 运转的时钟信号的频率。1 秒发出 1 次时钟信号就是 1Hz,所以 100MHz(兆赫兹)的话就是 100×100 万 = 1 亿次/秒。M(兆)代表 100 万。

高级问题:CPU 上数据总线的条数,或者 CPU 内部参与运算的寄存器的容量,都可以作为衡量 CPU 性能的比特数。在 Z80 CPU 中,无论是数据总线的条数还是寄存器的容量都是 8 比特,所以 Z80 CPU 是一款 8 比特的 CPU。而在 Windows 个人计算机中广泛使用的 Pentium(奔腾)CPU 则是 32 比特的 CPU。

本章重点

要想彻底掌握计算机的工作原理,最好的方法就是自己搜集零件,试着组装一台微型计算机。微型计算机(MicroCom)是 Micro Computer 的缩写,字面含义是微小的计算机,但一般也可用于指代 IC 元件外露的、用于控制的计算机。因为要制作一台真正的微型计算机既花时间又花金钱,所以本章就在纸上体验一下微型计算机的制作过程吧。需要让诸位准备的只有如图 2.1 所示的电路图和一根红铅笔。将电路图复印下来后,请诸位一边想象着元件之间传输的信号的作用,一边用红铅笔描画出笔者所介绍的电路,以此来代替实际的布线环节。当所有的电路都描红了,微型计算机也就完成了。

别看只是描了描线,却一样能学到很多知识,甚至可以说不费吹灰之力就能了解计算机的工作原理。从此之后不但消除了对硬件的恐惧感,而且还会感到和计算机更加亲近了。请诸位一定要借此机会体验微型计算机的制作过程。2.1 制作微型计算机所必需的元件

首先让我们来收集元件吧。制作微型计算机所需的基础元件只有 3 个,CPU、内存和 I/O,每种元件都是作为一块独立的 IC 在市场上出售的。CPU 是计算机的大脑,负责解释、执行程序。内存负责存储程序和数据。I/O 是 Input/Output(输入/输出)的缩写,负责将计算机和外部设备(周边设备)连接在一起。

这里我们使用 Z80 CPU 作为微型计算机的 CPU、TC5517 作为内存、Z80 PIO 作为 I/O。Z80 CPU 是一款古老的 CPU,在 NEC 的 PC-8801、SHARP 的 MZ-80 等 8 比特计算机广泛应用的时代,曾以爆炸般的速度普及过。TC5517 是可以存储 2K 的 8 比特数据的内10存。在计算机的世界里,K 表示 2 = 1024。TC5517 的容量是 8 比特 ×2×1024 = 16384 比特,即 2K 字节。虽然这点容量与诸位所使用的个人计算机比起来相差悬殊,但是对于用于学习的微型计算机来说是绰绰有余了。Z80 PIO 作为 I/O,经常与 Z80 CPU 一起使用。正如其名,PIO(Parallel I/O,并行输入/输出)可以在微型计算机和外部设备之间并行地(一排一排地)输入输出 8 比特的数据。在计算机爱好者们沉浸在制作微型计算机的那个年代,这些元件都是常见的 IC。这里要先跟诸位打声招呼,这里制作的微型计算机终归只是用于学习的模型,并没有什么实用的价值。

图 2.1 Z80 微型计算机的电路图

为了制作微型计算机,除了 CPU、内存和 I/O,还需要若干辅助元件。

为了驱动 CPU 运转,称为“时钟信号”的电信号必不可少。这种电信号就好像带有一个时钟,滴答滴答地每隔一定时间就变换一次电压的高低(如图 2.2 所示)。输出时钟信号的元件叫作“时钟发生器”。时钟发生器中带有晶振,根据其自身的频率(振动的次数)产生时钟信号。时钟信号的频率可以衡量 CPU 的运转速度。这里使用的是 2.5MHz(兆赫兹)的时钟发生器。

图 2.2 时钟信号的波形图

用于输入程序的装置也是必不可少的。在这里我们通过拨动指拨开关来输入程序,指拨开关是一种由 8 个开关并排连在一起构成的元件(如照片 2.1(a) 所示)。输出程序执行结果的装置是 8 个 LED(发光二极管)。到此为止,主要的元件就都备齐了。

剩下的就都是些细碎的元件了。表 2.1 是所需元件的一览表,里面也包含了之前介绍过的元件。请诸位粗略地浏览一遍。所需元件表中的 74367 和 7404 也是 IC,用于提高连接外部设备时的稳定性。表 2.1 本次用到的制作微型计算机的元件

电阻是用于阻碍电流流动、降低电压值的元件。为了省去布线的麻烦,这里也会使用将 8 个电阻集成到 1 个元件中的集成电阻(如照片 2.1(b) 所示)。电阻的单位是 Ω(欧姆)。电容是存储电荷的元件,衡量存储电荷能力的单位是 F(法拉)。要让微型计算机运转起来,5V(伏特)的直流电源是必不可少的。于是还需要使用一个叫作“开关式稳压电源”的装置,将 220V 的交流电变成 5V 的直流电。

照片 2.1 指拨开关和集成电阻2.2 电路图的读法

在开始布线之前,先来介绍一下电路图的读法。在电路图中,用连接着各种元件符号的直线表示如何布线。电路中有些地方有交叉,但若只是交叉在一起的话,并不表示电路在交叉处构成通路。只有在交叉处再画上一个小黑点才表示构成通路。

图 2.3 判断电路交叉时是否构成通路

图 2.4 电源的表示方法

本次制作的微型计算机工作在 +5V 的直流电下。虽然在实际的电路中要把 +5V 和 0V 连接到各个元件的各个引脚上,但是如果在电路图中也把这些地方都一一标示出来的话,就会因为到处都是 +5V 和 0V 的布线而显得混乱不堪了。所以要使用如图 2.4 所示的两种电路图符号来分别表示电路连接到 +5V 和连接到 0V 的情况。

IC 的引脚(所谓引脚就是 IC 边缘露出的像蜈蚣腿一样的部分)按照逆时针方向依次带有一个从 1 开始递增的序号。数引脚序号时,要先把表示正方向的标志,比如半圆形的缺口,朝向左侧。举例来说,带有 14 个引脚的 7404,其引脚序号就如图 2.5 所示。

图 2.5 如何数 IC 的引脚序号

如果按照引脚序号的排列顺序来画 IC 的电路图符号,那么标示如何布线时就会很不方便。所以通常所绘制的电路图都不受引脚实际排布的限制1。画图时,在引脚的旁边写上引脚的序号,在表示 IC 的矩形符号中写上表明该引脚作用的代号。代号就是像 RD(Read)表示执行读取操作,WR(Write)表示执行写入操作这样的代表了某种操作的符号。各个代号的含义等到为引脚布线时再一一说明2。

1有时也会遵循引脚序号的顺序绘制电路图,这样的电路图叫作实物布线图。

2写在引脚旁边的代号,其含义会写在 IC 生产厂商发布的资料中,但在这里为了保持文章的通俗易懂,改变了一部分代号的写法,这一点还望诸位谅解。例如,在厂商的资料中 TC5517 的第 20 个引脚的代号是 OE(Output Enable,输出使能),在这里则改为了含义相同的 RD(Read,读取)。2.3 连接电源、数据和地址总线

下面就开始布线吧。请假想自己正在制作微型计算机,并按照如下的说明用红铅笔在电路图中描画相应的电路。

首先连接电源。IC 与普通的电器一样,只有接通了电源才能工作。Z80 CPU、TC5517 和 Z80 PIO 上都分别带有 Vcc 引脚和 GND 引脚。Vcc 和 GND 这一对儿引脚用于为 IC 供电。下面请先将 +5V 电源连接到各个 IC 的 Vcc 引脚上,然后将 0V 电源连接到各个 IC 的 GND 引脚上。接下来还需要将 +5V 和 0V 连接到时钟发生器上。接通电源后这些 IC 和时钟发生器就可以工作了。

微型计算机所使用的 IC 属于数字 IC。在数字 IC 中,每个引脚上的电压要么是 0V、要么是 +5V,通过这两个电压与其他的 IC 进行电信号的收发。用于给 IC 供电的 Vcc 引脚和 GND 引脚上的电压是恒定不变的 +5V 和 0V,但是其他引脚上的电压,会随着计算机的操作在 +5V 和 0V 之间不断地变化。

稍微说一点题外话,只要想成 0V 表示数字 0、+5V 表示数字 1,那么数字 IC 就是在用二进制数的形式收发信息。也正因为如此,二进制数在计算机当中才如此重要。有关二进制的内容,本书并不会详细介绍,但是请先记住以下知识点:通常将 1 个二进制数(也就是数字 IC 上 1 个引脚所能表示的 0 或者 1)所表示的信息称作“1 比特”,将 8 个二进制数(也就是 8 比特)称作“1 字节”。比特是信息的最小单位,字节是信息的基本单位。这里制作的微型计算机是一台 8 比特微型计算机,因此是以 8 比特为一个单位收发信息的。

下面回到正题。计算机以 CPU 为中心运转。CPU 可以与内存或 I/O 进行数据的输入输出。为了指定输入输出数据时的源头或目的地,CPU 上备有“地址总线引脚”。Z80 CPU 的地址总线引脚共有 16 个,用代号 A0~A15 表示,其中的 A 表示 Address(地址)。后面的数字 0~15 表示一个 16 位的二进制数中各个数字的位置,0 对应最后一位、15 对应第一位。16 个地址总线引脚所能指定的地址共有 65536 个,用二进制数表示的话就是 0000000000000000~1111111111111111。因此 Z80 CPU 可以指定 65536 个数据存取单元(内存存储单元或 I/O 地址),进行信息的输入输出。

一旦指定了存取数据的地址,就可以使用数据总线引脚进行数据的输入输出了。Z80 CPU 的数据总线引脚共有 8 个,用代号 D0~D7 表示。其中的 D 表示 Data(数据),后面的数字 0~7 与地址总线引脚代号的规则相同,也表示二进制数中各个数字的位置。Z80 CPU 可以一次性地输入输出 8 比特的数据,这就意味着如果想要输入输出位数(比特数)大于 8 比特的数据,就要以 8 比特为单位切分这个数据。

作为内存的 TC5517 上也有地址总线引脚(A0~A10)和数据总线引脚(D0~D7)。这些引脚需要同 Z80 CPU 上带有相同代号的引脚相连。一块 TC5517 上可以存储 2048 个 8 比特的数据(如图 2.6 所示)。可是由于用于输入程序的指拨开关是以 8 比特为一个单位指定内存地址的,所以我们只使用 TC5517 上的 A0~A7 这 8 个引脚,并把剩余的 A8~A10 引脚连接到 0V 上(这些引脚上的值永远是 0)。虽然总共有 2048 个存储单元,最终却只能使用其中的 256 个,稍微有些浪费。下面就请诸位用红铅笔把 Z80 CPU 和 TC5517 的 D0~D7 以 及 A0~A7 引脚分别连接起来。

图 2.6 TC5517 的内部构造2.4 连接 I/O

下面开始连接 I/O。只有了解了作为 I/O 的 Z80 PIO 的结构,才能理解为什么要这样布线。诸位都知道“寄存器”这个词吗?寄存器是位于 CPU 和 I/O 中的数据存储器。Z80 PIO 上共有 4 个寄存器。2 个用于设定 PIO 本身的功能,2 个用于存储与外部设备进行输入输出的数据。

这 4 个寄存器分别叫作端口 A 控制、端口 A 数据、端口 B 控制和端口 B 数据。所谓端口就是 I/O 与外部设备之间输入输出数据的场所,可以把端口(Port)想象成是轮船装卸货物的港口。Z80 PIO 有 2 个端口,端口 A 和端口 B,最多可以连接 2 个用于输入输出 8 比特数据的外部设备(如图 2.7 所示)。

图 2.7 Z80 PIO 的内部构造

既然已经大体上了解了 Z80 PIO 的结构,下面就开始布线吧。因为 Z80 PIO 上也有 D0~D7 的数据总线引脚,所以先把它们和 Z80 CPU 中带有同样代号的引脚连接起来。这样 CPU 和 PIO 就能使用这 8 个引脚交换数据了。

接下来要把 Z80 PIO 的和引脚分别连接到 Z80 CPU 的地址总线引脚 A0 和 A1 上。若表示 IC 引脚作用的代号上划有横线,则表示通过赋予该引脚 0(0V)可使之有效,反之若没有横线,则表示通过赋予该引脚 1(+5V)可使之有效。因此若赋予引脚 1 则表示选中 B,反之赋予 0 则表示选中 A。同样地,若赋予引脚 1 则表示选中的是 C(C 即 Control,表示控制模式);反之赋予 0 则表示选中的是 D(D 即 Data,表示数据模式)。

通过 Z80 CPU 的 A0~A7(00000000~11111111 共 256 个地址)地址总线引脚可以选择内存(TC5517)中的存储单元。同样地,使用 Z80 CPU 的 A0~A1(00~11 共 4 个地址)地址总线引脚也可以选择 I/O(Z80 PIO)中的寄存器。

Z80 CPU 的 A8~A15 地址总线引脚尚未使用,所以什么都不连接。在电路图中可以用代号 NC(No Connection,未连接)表示引脚什么都不连接。IC 上的引脚有些只用于输出,有些只用于输入,还有些是输入输出两用的。对于只用于输出的引脚,不需要使用时的处理方法是这个引脚什么都不连接;而对于只用于输入或输入输出两用的引脚,不需要使用时的处理方法则是把这个引脚上的电压固定成是 +5V 或 0V。2.5 连接时钟信号

正如前文所述,Z80 CPU 和 Z80 PIO 的运转离不开时钟信号。为了传输时钟信号,就需要把时钟发生器的 8 号引脚和 Z80 CPU 的 CLK(CLK 即 Clock,时钟)引脚、Z80 PIO 的 CLK 引脚分别连接起来。时钟发生器的 8 号引脚与 +5V 之间的电阻用于清理时钟信号。

再插入一段题外话。诸位可以把 Z80 CPU 和 Z80 PIO 在时钟信号下运转的情景,想象成是它们在跟随着滴答滴答响的时钟同步做动作。据说 19 世纪英国的查尔斯·巴贝奇(Charles Babbage)曾向制造计算机的原型——分析机发起过挑战。分析机由齿轮组成,因当时科技水平的限制并未制造完成。可是如果把分析机改用电子元件制造出来的话,就是今天的计算机。2.6 连接用于区分读写对象是内存还是 I/O 的引脚

至此,我们已经先后把 Z80 CPU 连接到了 TC5517 和 Z80 PIO 上,这两次连接都使用了地址总线引脚 A0 和 A1。如果仅仅这样连接,就会导致一个问题,当地址的最后两位是 00、01、10 和 11 时,CPU 就无法区分访问的是 TC5517 中的存储单元,还是 Z80 PIO 中的寄存器了。

Z80 CPU 上的(即 Memory Request,内存请求)引脚和(即 I/O Request,I/O 请求)引脚解决了这个问题。当 Z80 CPU 和内存之间有数据输入输出时,引脚上的值是 0,反之则是 1。当 Z80 CPU 和 I/O 之间有数据输入输出时,引脚上的值是 0,反之则是 1。

若把 TC5517 的(即 Chip Enable,选通芯片)引脚设成 0,则 TC5517 在电路中被激活,若设成 1 则从电路中隔离,因为此时 TC5517 进入了高阻抗状态,所以即便它上面的引脚已经接入了电路也不会接收任何电信号。在 Z80 PIO 中,则是通过将引脚和引脚同时设为 0 或 1,来达到与 TC5517 的引脚相同的效果。若同时设为 0,则 Z80 PIO 在电路中被激活,若同时设为 1 则从电路中隔离(之所以使用两个引脚是因为这样更适合使用了多个 I/O 的情况)。

按照上面的讲解,下面需要把 Z80 CPU 的引脚连接到 TC5517 的引脚上。然后把 Z80 CPU 的引脚连接到 Z80 PIO 的引脚和引脚上。请诸位先用红铅笔把这些引脚分别连接起来吧。

对内存和 I/O 而言,还必须要分清 CPU 是要输入数据还是输出数据。为此就要用到 Z80 CPU 的引脚(即 Read,表示输入,为 0 时执行输入操作)和引脚(即 Write,表示输出,为 0 时执行输出操作)了。请把这两个引脚与 TC5517 上同名的引脚连接起来。Z80 PIO 虽然只有引脚,但由于数字 IC 引脚上的值要么是 0 要么是 1,所以只用 1 个引脚也能区分是输入还是输出,0 的话是输入,1 的话就是输出(如表 2.2 所示)。表 2.2 与读写内存、I/O 相关的引脚上的值Z80 CPU的操作引引脚引脚引脚脚从内存输入0101向内存输出0110从I/O输入1001

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载