按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
IAC的建造工作并正在设计它的第二代产品,最后定名为电子离散变量运算计算机(IDVAC)。
埃克特、莫奇利和戈德斯坦与冯?诺伊曼会面后地几个月,这种可存储程序计算机的蓝图就形成了。计算机的核心由5部分组成,冯?诺伊曼称它们为中央控制器、中央运算器、输入、输出设备和存储器。存储器能够同时记住程序指令和正在处理的数据。后来,埃克特和莫奇利为EDVAC申请专利时说,这些概念是他们自己思考的结果,但是专利申请并没有获得批准。他们的确是建造EDVAC的电子行家,而冯?诺伊曼显然是制造EDVAC的主要逻辑学家。他在一份达101页的〃报告草稿〃中描述了这种能够存储程序的计算机。
当埃克特和莫奇利成立了公司并寻求将他们的计算机转变为财富时,冯?诺伊曼却尽可能多地使公众了解计算机领域的重大突破。他不希望把科学创造的这种神奇的工具变成一个由少数人掌握的秘密,并因此影响公众对它的了解。他想方设法从军方和私人企业那里获得资金以后,在普林斯顿高等研究院的地下室里开始了自己的计算机工程。他和他的小组在那里建造的计算机,加上他们撰写并广泛分发的研究报告,使这间地下室逐渐赢得了〃冯?诺伊曼建筑〃的称号。在本世纪此后的几十年里,大多数的计算机都与他们建造的这一台在某些方面有些相似之处。
事实上,电脑的发展过程和人脑的形成过程有某种相似之处。我们在学会复杂的思维之前,首先接触到的是数字的概念,通过计数学会了加减法,然后才是更加复杂的算术和语言。最早的电脑只能进行简单的加减法,在半个多世纪的发展历程之后,电脑已经能够表达非常复杂的语言和思想了,自然语言理解也从实验室开始走向实用阶段。而最新的IBM“深蓝”已经可以在国际象棋领域打败卡斯帕罗夫。
二进制、十进制、位、字和字节
电脑的基础是二进制,那么,什么是二进制呢;为什么需要二进制呢?在早期设计的机械计算装置中;使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。
配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。
电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。
常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“00101000”直接可以转换成16进制的“38”。
一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。
语言、汇编语言、高级语言和其他
电脑能理解的东西只有二进制的序列,在这里我们要熟悉一下一些最基本的概念了。什么是语言,语言是一种表达的形式,语言是有结构的,比如说主语、谓语等,语言还是有意义的,语言是对事物或者某种行为的描述。语言的存在有一个最基本的条件,就是需要有两个交流的主体,在我们日常的交流中,是说话的双方,或者书的作者和读者(就是我和你),在计算机的世界中,就是程序员和计算机。
根据说话的双方和所说的东西,我们可以将计算机语言分成下面几大类:
* 机器语言:
使用这种语言说话的双方是计算机和史前的程序员,在这里史前程序员直接告诉计算机把什么数据放到什么地方,进行什么样的计算等等,这种语言说出来的话就是一串串的二进制数,比如说:
“00 E9 B3 00”的意思就是
“把寄存器CL的内容加上寄存器CH的内容,结果放到CL中,在寄存器BL中放入0”
* 汇编语言:
和机器语言没有什么本质的区别,唯一不同的是,程序员不用直接说出二进制的数字了,他可以使用一些简单的英文单词或者缩写来表示自己的意思。比如说刚才的机器语言片段,用汇编语言来说就是下面这个样子:
“ADD CL,CH”
“MOV BL,00”
由于计算机能够理解的只有二进制数字,所以在程序员使用的汇编语言和计算机使用的二进制机器语言之间需要翻译(程序),我们把汇编语言翻译成机器语言的程序叫做汇编程序,把机器语言翻译成汇编语言的程序叫做反汇编程序。
* 高级语言:
使用机器语言或者汇编语言写程序是一件非常非常困难的事情,如果没有高级语言的出现,现在我们绝对不会有多姿多彩的因特网,也不会有VCD、DVD等数字化的娱乐的出现,实际上,如果没有逻辑性更强,更接近人类思维习惯的高级语言出现,使用穿孔纸带和直接针对寄存器的操作指令,编写长达几百万行仍然可以正常运行的程序是不可想象的。
所谓的高级语言,是在汇编语言(机器语言)和人类所使用的自然语言之间的一种折衷,可以叫做严格(受限)自然语言,通过抽象出变量、语句以及随后出现的结构、对象的概念,可以让程序员用接近正常思维的方式来表示现实世界的逻辑和流程。
高级语言的代表有早期的FORTRAN(公式翻译语言)、COBOL(商用计算机语言),中期的C、PL/1、PASCAL、BASIC和比较新的JAVA、C++、ADA等。
高级语言和机器语言之间同样需要翻译,我们把高级语言翻译到机器语言的程序叫做编译器,而进行反向翻译的程序非常难以编写,需要进行这种翻译的时候一般都是人工通过经验进行的,我们把这种反向的翻译称为“逆向工程”。
高级语言的表达能力和机器语言是完全一样的(语言的表达能力,是指某种语言能否完整的描述某个事物或者某种行为,比如说,一种语言如果没有相对时间的概念,没有词汇可以表示“先”、“后”,那么,这种语言就不具有表达下面这个行动的能力:“先把鸡蛋放在碗里,然后再把盐放进去”)。科学家已经从理论上证明,一种语言只要有存储、判断、跳转等几个最基本的功能,就可以表达出所有现有的电脑上可能有的机器语言所能够表达的事物和行为。
所以使用高级语言并不会使计算机的功能下降,唯一损失的可能就是速度和效率了,但是在计算机速度越来越快、资源越来越丰富的今天,和高级语言带来的可理解性和强大的表达能力相比,这点损失是微不足道的。
* 因特网语言、脚本语言
这些语言实际上都是属于高级语言,但是鉴于他们在因特网时代的重要地位,在这里单独对他们进行描述,所谓的因特网语言,包括JAVA Script,VBScript、ASP、PHP等,这些语言基本上都是脚本语言。
他们设计出来主要是供因特网应用程序使用的,可以对网页、浏览器、服务器的页面进行操作,语法比较简单,基本上是解释执行的,不需要编译成二进制代码。功能受到限制,但是开发简单方便。
程序、代码、可执行文件
当你接触到电脑世界的时候,除了碰到计算机(也就是电脑以外),另外一个最常见的名词肯定是程序、代码或者可执行文件之类。其实这些名词指的都是同一个东西,就是可以运行的一块代码,那么什么是代码?什么是可执行的代码呢?
看到这本书的时候,中国队已经进入了世界杯,我们就来凑一下热闹,以足球运动员为例吧。假设有一个天才的足球运动员,他有很多天才的技能,比如说向前带球、向左带球、传球、射门等等,但是唯一的缺点是,这个运动员没有大脑,不知道在球场上该做什么。这个运动员很像一台无所不能但是没有装入任何程序的电脑。现在我们告诉这个运动员一些简单的规则:
1。 拿到球直接向前带球。
2。 如果发现正面有一个人拦截,就过掉他。
3。 如果发现有两个人拦截,寻找左边的接应队员,如果找到传给左边。否则寻找右边的接应队员,找到后传给右边。如果都没找到,尝试过掉两个人。
4。 如果发现有三个人拦截,把球向后传。
5。 如果和球门之间的距离小于10米,并且和球门之间少于两个防守队员则射门。
6。 如果。。。
这些规则的全部就是一个踢球者程序,告诉一个忠实的执行者—天才足球运动员(计算机)在什么情况下该做什么。程序是由代码组成的,代码就是一条一条的指令,指令就是告诉运动员(计算机)做什么,什么情况下做什么。
在电脑上,程序总是表示成文件的形式,实际上,电脑上的任何东西都表示成一个文件。一个文件,如果本身是一个程序,我们就称它为可执行文件,意思就是这个文件包括了很多指令,可以告诉电脑应该做什么。可执行文件一般是二进制的机器代码,但是随着操作系统的进步,可执行文件的范围越来越宽,很多批处理、脚本和其他解释语言的指令集合也可以看成是可执行文件,比如VBS文件等。
双击的陷阱
大家都已经非常熟悉的视窗环境,引入了(对不起,如果我没有记错的话,应该是苹果机首先引入了了程序关联的概念,视窗操作系统“借鉴”了这样一个概念,实际上鼠标、图标桌面等等名词都是来自一个非常著名的实验室,施乐的PARC实验室,最早出现在个人电脑上的图形界面、鼠标和应用程序关联,应该是苹果公司的麦金塔上的操作系统)。
随着视窗环境的流行,可执行文件的意义也扩展了,我们认为“凡是能够双击打开的都可以认为是可执行文件”,这种可执行文件的观念,扩展到很多脚本语言的程序,比如说VBS等,更加严重的是,甚至以。txt为后缀名的文件也能起到可执行文件的作用,也就是说可以做到双击之后打开之后不是简单的文本,而是功能强大的脚本语言,可以执行任何危险的操作!
感谢媒体的大力宣传,现在任何用户在收到带有附件的电子邮件的时候,在打开可执行文件之前都会三思而后行。但是病毒或者恶意代码的制造者是专家而您不是,所以他们有无数的新把戏可玩。一个最简单的办法就是让您以为那些附件只不过是没有危险的文本文件或是图像文件等。由于目前大多数人使用的是windows操作系统,windows的默认设置是隐藏已知文件扩展名的,而当你去点击那个看上去很友善的文件,那些破坏性的东西就跳出来了。您可能说这我早就知道了,那么下面讲述的。txt文件的新欺骗方法及原理您知道吗?
假如您收到的邮件附件中有一个看起来是这样的文件:QQ靓号放送。txt,您是不是认为它肯定是纯文本文件?我要告诉您,不一定!它的实际文件名可以是QQ靓号放送。txt。{3050F4D8…98B5…11CF…BB82…00AA00BDCE0B}。
{3050F4D8…98B5…11CF…BB82…00AA00BDCE0B}在注册表里是HTML文件关联的意思。但是存成文件名的时候它并不会显现出来,您看到的就是个。txt文件,这个文件实际上等同于QQ靓号放送。txt。html。那么直接打开这个文件为什么有危险呢?
您可能以为它会调用记事本来运行,可是如果您双击它,结果它却调用了HTML来运行,并且自动在后台开始格式化d盘,同时显示〃Windows is configuring the system。Plase do not interrupt this process。〃这样一个对话框来欺骗您。您看随意打开附件中的。txt的危险够大了吧?
欺骗实现原理:当您双击这个伪装起来的。txt时候,由于真正文件扩展名是。{3050F4D8…98B5…11CF…BB82…00AA00BDCE0B},也就是。html文件,于是就会以html文件的形式运行,这是它能运行起来的先决条件。