第一章程序漫谈 1.1硬件、软件、程序 1.2计算机语言 1.3语言和实现语言的工具 1.3.1机器语言 1.3.2汇编语言 1.3.3高级语言 1.3.4语言实现工具 1.3.4.1C++ Builder的基本功能 1. 3.4.2 VCL vS. MFC 1.1硬件、软件、程序 对于计算机,也许你是老鸟,也许你是菜鸟… 但不管怎样,如果你此时此地你要学习编程,那么你应该多多少少知道点什么叫硬件什 么叫软件一一反正我不管你懂不懂,为了面子,我很不乐意你问我什么叫硬件什么叫软件 我做在这凳子半个小时了,一直想不出如何给二者下个定义 美国一个电脑神童说:“凡是摔到地上会坏的就是硬件。”我深感不妥,众所周知,如果 把硬盘摔到地上,那么硬盘坏了,里头的那些数据一一都是软件一一也一样地坏得让你我 心疼。 倘若按字面上理解,那就更加的矛盾重重:硬盘硬是硬件:软盘软也是硬件, 还一种说法是:看得见摸得着的为硬件,看不见摸不着的为软件。刚觉得它说得不错,但 马上我就发觉了它的破绽:我现在用的Word2000,它就在屏幕上,界面美观,操作方便
第一章 程序漫谈 1.1 硬件、软件、程序 1.2 计算机语言 1.3 语言和实现语言的工具 1.3.1 机器语言 1.3.2 汇编语言 1.3.3 高级语言 1.3.4 语言实现工具 1.3.4.1 C++ Builder 的基本功能 1.3.4.2 VCL vs. MFC 1.1 硬件、软件、程序 对于计算机,也许你是老鸟,也许你是菜鸟…… 但不管怎样,如果你此时此地你要学习编程,那么你应该多多少少知道点什么叫硬件什 么叫软件——反正我不管你懂不懂,为了面子,我很不乐意你问我什么叫硬件什么叫软件 ——我做在这凳子半个小时了,一直想不出如何给二者下个定义。 美国一个电脑神童说:“凡是摔到地上会坏的就是硬件。”我深感不妥,众所周知,如果 把硬盘摔到地上,那么硬盘坏了,里头的那些数据——都是软件——也一样地坏得让你我 心疼。 倘若按字面上理解,那就更加的矛盾重重:硬盘硬是硬件;软盘软也是硬件。 还一种说法是:看得见摸得着的为硬件,看不见摸不着的为软件。刚觉得它说得不错,但 马上我就发觉了它的破绽:我现在用的 Word2000,它就在屏幕上,界面美观,操作方便……
无奈之下,我搬出金山词霸,它说:“硬件:计算机及其它直接参与数据运算或信息交 流的物理设备”。挺好。硬件就是设备。平常我们生活中的各种设备,洗衣机,冰箱,电 视,还有螺丝刀,钳子,都是硬件。 软件呢?“软件:控制计算机硬件功能及其运行的指令、例行程序和符号语言”。指令 程序和符号语言是什么且不说,至少我们得知:软件是用来控制硬件的运行的。 这就好办点。我们可以打比方:譬如汽车,其本身自然是硬件,但关于驾驶车的那一套 技术,及有关交通规则,我们可称为软件,因为后者控制了前者的运行方式 (一般不传之秘笈:如果你英语一般,学习编程时,别忘装上金山词霸。并且装上后立 即上网升级词霸) 现在来谈“指令、程序、和符号语言”。我想交通方面的“软件”确实就是这些东西。 我不会驾车,但曾多次看到警察在我上班坐的班车前用指头一指,就令我们的司机脸色发 青。之后,一套既定的处罚程序被执行。很快,听说我们的司机又在学习那些用来表示“单 行”、“只许右拐”、“不许停车”、“禁鸣”等奇奇怪怪的符号语言了 事实上,说软件看不见摸不着其实也正确。因为它们是思想,精神,规则,逻辑。本身 是抽象的,确实不可触及。但软件总是要有载体来存放,要有表达或表现方式,这些使得 它们变得形象具体起来。在此意义上,说软件是摔在地上坏不了的东西,也相当行得通 神童毕竟是神童 最后,什么是程序?我决定斗胆来给它下个定义: 程序是一组按照一定的逻辑的进行组合的指令 因此,在以后的学习过程上,很多时候,我们会觉得程序就是指令;同样很多时候,我 们会觉得程序就是逻辑
无奈之下,我搬出金山词霸,它说:“硬件:计算机及其它直接参与数据运算或信息交 流的物理设备”。挺好。硬件就是设备。平常我们生活中的各种设备,洗衣机,冰箱,电 视,还有螺丝刀,钳子,都是硬件。 软件呢?“软件:控制计算机硬件功能及其运行的指令、例行程序和符号语言”。指令、 程序和符号语言是什么且不说,至少我们得知:软件是用来控制硬件的运行的。 这就好办点。我们可以打比方:譬如汽车,其本身自然是硬件,但关于驾驶车的那一套 技术,及有关交通规则,我们可称为软件,因为后者控制了前者的运行方式。 (一般不传之秘笈:如果你英语一般,学习编程时,别忘装上金山词霸。并且装上后立 即上网升级词霸) 现在来谈“指令、程序、和符号语言”。我想交通方面的“软件”确实就是这些东西。 我不会驾车,但曾多次看到警察在我上班坐的班车前用指头一指,就令我们的司机脸色发 青。之后,一套既定的处罚程序被执行。很快,听说我们的司机又在学习那些用来表示“单 行”、“只许右拐”、“不许停车”、“禁鸣”等奇奇怪怪的符号语言了…… 事实上,说软件看不见摸不着其实也正确。因为它们是思想,精神,规则,逻辑。本身 是抽象的,确实不可触及。但软件总是要有载体来存放,要有表达或表现方式,这些使得 它们变得形象具体起来。在此意义上,说软件是摔在地上坏不了的东西,也相当行得通, 神童毕竟是神童。 最后,什么是程序?我决定斗胆来给它下个定义: 程序是一组按照一定的逻辑的进行组合的指令。 因此,在以后的学习过程上,很多时候,我们会觉得程序就是指令;同样很多时候,我 们会觉得程序就是逻辑
当然,更多的时候,我们并不区分程序和软件二者。也许前者更趋于抽象,而后者趋于 具体。比如我们在写那些表达我们的思想逻辑时,我们喜欢说“写程序”:而当程序完成 可以待价而沽时,我们称它为软件产品。 1.2计算机语言 程序用计算机语言写成。编程的实质就是你用计算机语言来表达你解决问题的逻辑。 那么,什么叫计算机语言? 先不必去解释。因为,计算机是机器,机器不是生物,它怎么能有语言?小猫小狗有语 言我尚可相信,机器也有语言,还要我们去学习,这似乎有渎人类之尊严。 如果我不把这个结解开,可能部分特别在意人类尊严的学生对学习编程从此产生心理障 碍,无法继续学习… 狭义上,我们讲的语言,汉语英语广东话,它是语言,有声音。小鸟之间吱吱喳喳,大 抵也是语言。但其实语言二字虽都带口,却不是说非得有声才称为语言:哑语无声,但它 也是语言。广义上讲,语言是沟通、交流的一种手段。基于此,我们认为所有的机器或工 具,也就包括计算机,都有它们自己的语言。比如锤子,它的语言是敲打:比如螺丝刀, 它的语言是拧,如果你非要拧锤子,非要敲打螺丝刀,那么结果就像你用法语和广东佬交 谈,用粤语和法国佬说话一样莫名其妙。 一般地,越复杂的机器,人类与其沟通的语言也越复杂。譬如汽车,你想驾驭它,你就 必须去驾校参加学习。想一想,开车的时候,我们的确是在和车进行沟通。如果你俩之间 的沟通出现差错一一你心里右转,手却一个劲向左转方向盘,向机器发出了错误的命令 这将多么可怕 至此,我们的心理障碍可以消除了。小猫小狗有语言是因为它们聪明,而机器有语言却 是因为它们的笨:它们笨,没办法像动物一样可以通过培训来理会人类的意愿,所以,让
当然,更多的时候,我们并不区分程序和软件二者。也许前者更趋于抽象,而后者趋于 具体。比如我们在写那些表达我们的思想逻辑时,我们喜欢说“写程序”;而当程序完成, 可以待价而沽时,我们称它为软件产品。 1.2 计算机语言 程序用计算机语言写成。编程的实质就是你用计算机语言来表达你解决问题的逻辑。 那么,什么叫计算机语言? 先不必去解释。因为,计算机是机器,机器不是生物,它怎么能有语言?小猫小狗有语 言我尚可相信,机器也有语言,还要我们去学习,这似乎有渎人类之尊严。 如果我不把这个结解开,可能部分特别在意人类尊严的学生对学习编程从此产生心理障 碍,无法继续学习…… 狭义上,我们讲的语言,汉语英语广东话,它是语言,有声音。小鸟之间吱吱喳喳,大 抵也是语言。但其实语言二字虽都带口,却不是说非得有声才称为语言:哑语无声,但它 也是语言。广义上讲,语言是沟通、交流的一种手段。基于此,我们认为所有的机器或工 具,也就包括计算机,都有它们自己的语言。比如锤子,它的语言是敲打;比如螺丝刀, 它的语言是拧,如果你非要拧锤子,非要敲打螺丝刀,那么结果就像你用法语和广东佬交 谈,用粤语和法国佬说话一样莫名其妙。 一般地,越复杂的机器,人类与其沟通的语言也越复杂。譬如汽车,你想驾驭它,你就 必须去驾校参加学习。想一想,开车的时候,我们的确是在和车进行沟通。如果你俩之间 的沟通出现差错——你心里右转,手却一个劲向左转方向盘,向机器发出了错误的命令— —这将多么可怕! 至此,我们的心理障碍可以消除了。小猫小狗有语言是因为它们聪明,而机器有语言却 是因为它们的笨:它们笨,没办法像动物一样可以通过培训来理会人类的意愿,所以,让
人类来反过来为它们定一套沟通的规则,然后人自己去学会这些语言,从而可以方便控制 机器 再所以,我们推论,凡是机器语言都是笨笨的语言。机器语言可以分低级语言和高级语 言,但无论何者,都是笨得可爱—一学得越多你就会越发现它的笨和可爱。另外,当我说 越复杂的机器,其语言也越复杂时,我用“一般地”加以修饰。这是因为,发明和发展机 器的智者们会为机器制造出越来越高级的语言,这些高级语言,最终越来越接近人类的自 然语言。就像计算机,我们有信心相信,终有一天,它能听懂我们的语言一一这就是流传 在程序员中的一个梦。当程序员熬红眼敲打数万行代码时,他们便会想起这个梦:闭上双 眼,伸腰,对PC说:“ BEGIN…”:深呼吸一次,然后说:“EN”。张眼时发现计算机 已完成了所有工作 一般不传之秘笈:程序员必备之工具:日产乐敦牌眼药水一瓶,用于预防角膜炎:韩 产777牌指甲刀一枚,用于铰除因击键刺激而疯长的指甲:国产肛泰若干,治疗因长期坐 姿不当而导致的痔疮) 回到计算机。它是机器,也是人类有史以来,继发明使用火、电、电子这些改善人类生 活的工具后,最为重要,最为先进,最为广泛使用的工具。它的机器语言之复杂程度可想 而知,已经复杂到必须成为一门大学的专业课程。然而别忘了我们前面的结论,语言只是 沟通的手段。在这个意义上,当你用鼠标或键盘在计算机上进行输入时,只要你输入的是 正确操作,我们都认为你在使用计算机语言,因为你确实是在用一种特定的方式或动作, 进行和计算机的交流 当然,这里的课程并不特意教你任何有关计算机的基本操作。计算机的基本操作主要是 指如何使用计算机内已有的软件产品,比如 Windows本身(操作系统是软件,称为系统软 件):比如办公系统 Ms Office或 WPS Office(这些实现工作生活中具体应用需求的称为 应用软件):比如游戏(一种特定的,只拿来玩的应用,称为游戏软件)。但我们不同 我们学的是如何编写软件。也就是说,我们将是发明人,设计师,创造者:而他们(到今 天仍拒不学习编程的家伙)都只是使用者。(我突然有些不安:这么说其实纯属煽情。公 平地讲,任何人的任凭创造都是别人的劳动成果之上,任何人也都在创造自己的杰作)
人类来反过来为它们定一套沟通的规则,然后人自己去学会这些语言,从而可以方便控制 机器。 再所以,我们推论,凡是机器语言都是笨笨的语言。机器语言可以分低级语言和高级语 言,但无论何者,都是笨得可爱——学得越多你就会越发现它的笨和可爱。另外,当我说 越复杂的机器,其语言也越复杂时,我用“一般地”加以修饰。这是因为,发明和发展机 器的智者们会为机器制造出越来越高级的语言,这些高级语言,最终越来越接近人类的自 然语言。就像计算机,我们有信心相信,终有一天,它能听懂我们的语言——这就是流传 在程序员中的一个梦。当程序员熬红眼敲打数万行代码时,他们便会想起这个梦:闭上双 眼,伸腰,对 PC 说:“BEGIN……”;深呼吸一次,然后说:“END”。张眼时发现计算机 已完成了所有工作…… (一般不传之秘笈:程序员必备之工具:日产乐敦牌眼药水一瓶,用于预防角膜炎;韩 产 777 牌指甲刀一枚,用于铰除因击键刺激而疯长的指甲;国产肛泰若干,治疗因长期坐 姿不当而导致的痔疮) 回到计算机。它是机器,也是人类有史以来,继发明使用火、电、电子这些改善人类生 活的工具后,最为重要,最为先进,最为广泛使用的工具。它的机器语言之复杂程度可想 而知,已经复杂到必须成为一门大学的专业课程。然而别忘了我们前面的结论,语言只是 沟通的手段。在这个意义上,当你用鼠标或键盘在计算机上进行输入时,只要你输入的是 正确操作,我们都认为你在使用计算机语言,因为你确实是在用一种特定的方式或动作, 进行和计算机的交流。 当然,这里的课程并不特意教你任何有关计算机的基本操作。计算机的基本操作主要是 指如何使用计算机内已有的软件产品,比如 Windows 本身(操作系统是软件,称为系统软 件);比如办公系统 MS Office 或 WPS Office(这些实现工作生活中具体应用需求的称为 应用软件);比如游戏(一种特定的,只拿来玩的应用,称为游戏软件)。但我们不同, 我们学的是如何编写软件。也就是说,我们将是发明人,设计师,创造者;而他们(到今 天仍拒不学习编程的家伙)都只是使用者。(我突然有些不安:这么说其实纯属煽情。公 平地讲,任何人的任凭创造都是别人的劳动成果之上,任何人也都在创造自己的杰作)
程序(或软件)是用计算机语言写出来的。 ·写一个程序,大致是这么一个过程 ·人有一个问题或需求,想用计算机解决 ·人想出解决问题或实现需求的思路… ·人将思路抽象成数学方法和逻辑表达或某种流程的模式…… ·程序员将数学方法,逻辑表达中的数据和流程用计算机语言表达,称为代码…… 用计算机高级语言写成的代码被语言的实现工具(VC,VB, Delphi,或C++ Builder) 转换成计算机的最低级机器语言。这就完成了人与机器在程序制定上的最后沟通 可见,你的思路是先用人类自己的语言思考,然后用一门计算机语言写成代码,最终, 需要一个语言工具来将它转换成机器可以理解的机器语言。我们要学的就是一门承上启下 的计算机语言。这样语言有很多: BASIC, Pascal,C,C++,Java,C#…我们学C和C+。 它是使用最多的语言。有关C,C++的更多特点,我们将在下一节谈到。 尽管你完全可以直接用最低级的计算机语言一一机器语言——来写代码,那样就不需要 语言工具了,但在这里你要弄清了,我们不是教机器语言。下一节,你会明白用机器直接 能懂的语言一一不妨称之为原始的机器语言一一写软件,在今天是多么的不现实。 1.3语言和实现语言的工具 1.3.1机器语言 你知道香蕉叫什么吗?就叫香蕉?叫 banana? 错,都错。 香蕉叫“牙牙
程序(或软件)是用计算机语言写出来的。 • 写一个程序,大致是这么一个过程: • 人有一个问题或需求,想用计算机解决…… • 人想出解决问题或实现需求的思路…… • 人将思路抽象成数学方法和逻辑表达或某种流程的模式…… • 程序员将数学方法,逻辑表达中的数据和流程用计算机语言表达,称为代码…… 用计算机高级语言写成的代码被语言的实现工具(VC,VB,Delphi,或 C++ Builder) 转换成计算机的最低级机器语言。这就完成了人与机器在程序制定上的最后沟通。 可见,你的思路是先用人类自己的语言思考,然后用一门计算机语言写成代码,最终, 需要一个语言工具来将它转换成机器可以理解的机器语言。我们要学的就是一门承上启下 的计算机语言。这样语言有很多:BASIC,Pascal ,C, C++, Java, C#……我们学 C 和 C++。 它是使用最多的语言。有关 C,C++的更多特点,我们将在下一节谈到。 尽管你完全可以直接用最低级的计算机语言——机器语言——来写代码,那样就不需要 语言工具了,但在这里你要弄清了,我们不是教机器语言。下一节,你会明白用机器直接 能懂的语言——不妨称之为原始的机器语言——写软件,在今天是多么的不现实。 1.3 语言和实现语言的工具 1.3.1 机器语言 你知道香蕉叫什么吗?就叫香蕉?叫 banana? 错,都错。 香蕉叫“牙牙
这是一个baby的语言,一个婴儿还没学会人类的主要语言,所以面对喜欢的东西总是 发出咿咿呀呀的声音,也许你听不懂,但这是她的语言。符合小孩特点的语言。 计算机的机器语言也一样,必须符合计算机的硬件特点。而痛苦就在这里,越符合机器 的特点,同时也就越不符合人类的特 计算机,全称电子计算机,20世纪40年代,无线电技术和无线电工业的的发展为电子 计算机的研制准备了物质基础。1943年1946年美国宾夕法尼亚大学研制的电子数字积分 和计算机 ENIAC( Electroic Numerical Integrator And Computer)是世界上第一台电 计算机。ENAC计算机共用了18000多个电子管,15000个继电器,占地170m2…… 这是计算机的始祖,一堆电子管。随后,电子计算机进入第二时期,小巧的晶体管取代 了电子管:再后,集成电路又取代晶体管,电子计算机进入第三时期 但无论是哪一时期(以后也许不是),计算机始终采用电子器件作为其基本器件因此,电 子器件的特点,就是计算机的特点 为什么使要电子?为什么木头不能做计算机——还真别说不能,您也应该知道,最早出 现的用于计算的机器,真是木头的。你用过计算尺吗?算了,这玩意儿太简单。以前有人 用木头作成齿轮,经过设计,当表示个位数的齿轮转动一圈时,就会带动表示十位数上的 齿轮转动1格。以此原理,只要你转动转轴,木头机器就会算出123+456=579 电子元件没有齿轮,但它们的特点是它们有两种很稳定的状态:导电或不导电,假如用 不通电时表示0,通电时表示1,再通过集成电路实现进位的机制。于是,计数功能就有了 基础。我们用图表示: 0:通电,1:不通电)000110 代表的十进制数
这是一个 baby 的语言,一个婴儿还没学会人类的主要语言,所以面对喜欢的东西总是 发出咿咿呀呀的声音,也许你听不懂,但这是她的语言。符合小孩特点的语言。 计算机的机器语言也一样,必须符合计算机的硬件特点。而痛苦就在这里,越符合机器 的特点,同时也就越不符合人类的特点。 计算机,全称电子计算机,20 世纪 40 年代,无线电技术和无线电工业的的发展为电子 计算机的研制准备了物质基础。1943 年~1946 年美国宾夕法尼亚大学研制的电子数字积分 和计算机 ENIAC(Electroic Numerical Integrator And Computer)是世界上第一台电子 计算机。ENIAC 计算机共用了 18000 多个电子管,15000 个继电器,占地 170 m2 …… 这是计算机的始祖,一堆电子管。随后,电子计算机进入第二时期,小巧的晶体管取代 了电子管;再后,集成电路又取代晶体管,电子计算机进入第三时期。 但无论是哪一时期(以后也许不是),计算机始终采用电子器件作为其基本器件因此,电 子器件的特点,就是计算机的特点。 为什么使要电子?为什么木头不能做计算机——还真别说不能,您也应该知道,最早出 现的用于计算的机器,真是木头的。你用过计算尺吗?算了,这玩意儿太简单。以前有人 用木头作成齿轮,经过设计,当表示个位数的齿轮转动一圈时,就会带动表示十位数上的 齿轮转动 1 格。以此原理,只要你转动转轴,木头机器就会算出 123+456 = 579…… 电子元件没有齿轮,但它们的特点是它们有两种很稳定的状态:导电或不导电,假如用 不通电时表示 0,通电时表示 1,再通过集成电路实现进位的机制。于是,计数功能就有了 基础。我们用图表示:
我们生活中常用的数逢十进一,称为10进制。而计算机,由于其电子元件的特点,它 是二进制数。这里简单地对比一下这两种进制造成的区别,以帮助你更容易看明白上图。 十进制数:最低位称为个位,高一位称为十位,再高一位称为百位。为什么这样称呼? 因为在个位上,0表示0,1表示1,2表示2,3表示3…:在十位上,0表示0,1表示 0,2表示20,3表示30…总之,每高一位长十倍,为十进制。 二进制数:最低位仍可称为个位,但这里称为1位。1位上,0表示0,1表示1,2呢? 没有2,因为逢2就得进1(后面同)。高一位称为2位,0表示0,1表示2,再高一位称 为4位,0表示0,1表示4。可以看出,每高一位长2倍,为二进制。 现在看上面的图,00,01,10,是三个二进制数。根据上面的进位方法,你可以算出它 位分别表示十进制数的0,1,2来吗?如果你算得出来,不错,值得表扬。算不出来,别 急,我来告诉你。首先,当你面对二进制数时,先要扳过来它们从低到高(从右到左)的 位依次不再是个位十位百位,而是:1位,2位和4位 00:都是0,所以它就是0 01:2位为0,1位为1,表示0个2和1个1,所以是1: 10:2位为1,1位为0,表示1个2和0个1,所以是2。 计算机的机器语言正是由这些0和1组成。事实上,计算机里的所有数据,无论是一个 程序,一篇文稿,一张照片,一首MP3,最终都是0和1。 世界就是这样奇妙。万事万物五彩缤纷,但进了计算机,却只是个0和1的组合。不由 得你会想起道教的古老玄机:“无极生太极,太极生两仪,两仪生四象,四象生八卦,八 卦生十六爻” 严重跑题
我们生活中常用的数逢十进一,称为 10 进制。而计算机,由于其电子元件的特点,它 是二进制数。这里简单地对比一下这两种进制造成的区别,以帮助你更容易看明白上图。 十进制数:最低位称为个位,高一位称为十位,再高一位称为百位。为什么这样称呼? 因为在个位上,0 表示 0,1 表示 1,2 表示 2,3 表示 3……;在十位上,0 表示 0,1 表示 10,2 表示 20,3 表示 30……总之,每高一位长十倍,为十进制。 二进制数:最低位仍可称为个位,但这里称为 1 位。1 位上,0 表示 0,1 表示 1,2 呢? 没有 2,因为逢 2 就得进 1(后面同)。高一位称为 2 位,0 表示 0,1 表示 2,再高一位称 为 4 位,0 表示 0,1 表示 4。可以看出,每高一位长 2 倍,为二进制。 现在看上面的图,00,01,10,是三个二进制数。根据上面的进位方法,你可以算出它 位分别表示十进制数的 0,1,2 来吗?如果你算得出来,不错,值得表扬。算不出来,别 急,我来告诉你。首先,当你面对二进制数时,先要扳过来它们从低到高(从右到左)的 位依次不再是个位十位百位,而是:1 位,2 位和 4 位。 00:都是 0,所以它就是 0; 01:2 位为 0,1 位为 1,表示 0 个 2 和 1 个 1,所以是 1; 10:2 位为 1,1 位为 0,表示 1 个 2 和 0 个 1,所以是 2。 计算机的机器语言正是由这些 0 和 1 组成。事实上,计算机里的所有数据,无论是一个 程序,一篇文稿,一张照片,一首 MP3,最终都是 0 和 1。 世界就是这样奇妙。万事万物五彩缤纷,但进了计算机,却只是个 0 和 1 的组合。不由 得你会想起道教的古老玄机:“无极生太极,太极生两仪,两仪生四象,四象生八卦,八 卦生十六爻” 严重跑题
机器语言尽是0和1,于是我们可以想像当时(还没有其它语言时)的程序员是如何编 写程序的。他们写程序不用坐在计算机前,而在家里或什么地方,拿笔在纸上画圈,一圈 两圈三圈(感觉有点象阿Q?),圈够了就给专门的打孔小姐照着在纸带上打成孔。最后这 些纸带被计算机“吃”进去并读懂,然后执行 来看一眼侏罗纪的程序吧: 101 (如用孔表示1,则左图表示三行数110,011,101) 面对这样的“程序”你是否表示狐疑?别以为我瞎说,也许你的电脑很先进,是P4吧? 但在你的电脑上,仍有那种程序历史遗迹:软驱是也。如果有软驱,那你应该能找到一张 软盘。知道软盘有写保护吗?仔细看看那个写保护的开关一一就是一个方孔一一打开,告 诉软驱本张软盘不能进行写操作,关闭,告诉软驱本张软盘可以进行写操作。 1.3.2汇编语言 前面说机器语言尽是0和1,那么是不是可以随便写一串0和1就算是程序呢?不是 就像汉语是由汉字组成,可我要是说下面这一串汉字
机器语言尽是 0 和 1,于是我们可以想像当时(还没有其它语言时)的程序员是如何编 写程序的。他们写程序不用坐在计算机前,而在家里或什么地方,拿笔在纸上画圈,一圈 两圈三圈(感觉有点象阿 Q?),圈够了就给专门的打孔小姐照着在纸带上打成孔。最后这 些纸带被计算机“吃”进去并读懂,然后执行。 来看一眼侏罗纪的程序吧: (如用孔表示 1,则左图表示三行数 110,011,101) 面对这样的“程序”你是否表示狐疑?别以为我瞎说,也许你的电脑很先进,是 P4 吧? 但在你的电脑上,仍有那种程序历史遗迹:软驱是也。如果有软驱,那你应该能找到一张 软盘。知道软盘有写保护吗?仔细看看那个写保护的开关——就是一个方孔——打开,告 诉软驱本张软盘不能进行写操作,关闭,告诉软驱本张软盘可以进行写操作。 1.3.2 汇编语言 前面说机器语言尽是 0 和 1,那么是不是可以随便写一串 0 和 1 就算是程序呢?不是。 就像汉语是由汉字组成,可我要是说下面这一串汉字:
天爱我京门北安 你觉得我是在说人话吗? 机器也有自己固定词汇,在机器语言里,称为机器指令,程序是由指令及数据组成。这 些指令是一些固定的0和1的组合(不同产商不同型号的机器,其指令又有不同)。作为 程序员,就得将这些指令一次次正确地用0和1拼写出来。 你决不会将“我爱北京天安门”说成上面的话,但你极有可能将10101101写成 10010101,对不?所以很自然地,出现了用符号来表示这些固定的二进制指令的语言,这 就是汇编语言 下面是一段我从C++ Builder的CPU调试窗口摘出的代码,它实现的功能是 已知b等于1;c等于2;然后计算b+c值,并将该值赋给a 把这段代码的机器语言(左)和汇编语言(右)进行对照,你可看出二者各自特点。 100010100101010111000100 mov edx,[ebp-0x3c] 0000001010101011100000 add edx,[ebp-0x40] 100010010101010111001000mov[ebp-0x38],edx 汇编语言仅是机器语言的一种助记符,没有本质的区别,所以很多时候,我们把二者等 同视之。 无论是机器还是汇编语言,都让人看了头痛,好在我们并不去学它们
天爱我京门北安 你觉得我是在说人话吗? 机器也有自己固定词汇,在机器语言里,称为机器指令,程序是由指令及数据组成。这 些指令是一些固定的 0 和 1 的组合(不同产商不同型号的机器,其指令又有不同)。作为 程序员,就得将这些指令一次次正确地用 0 和 1 拼写出来。 你决不会将“我爱北京天安门”说成上面的话,但你极有可能将 10101101 写成 10010101,对不?所以很自然地,出现了用符号来表示这些固定的二进制指令的语言,这 就是汇编语言。 下面是一段我从 C++ Builder 的 CPU 调试窗口摘出的代码,它实现的功能是: 已知 b 等于 1; c 等于 2; 然后计算 b + c 值,并将该值赋给 a 。 把这段代码的机器语言(左)和汇编语言(右)进行对照,你可看出二者各自特点。 10001010 01010101 11000100 mov edx,[ebp-0x3c] 00000011 01010101 11000000 add edx,[ebp-0x40] 10001001 01010101 11001000 mov [ebp-0x38],edx 汇编语言仅是机器语言的一种助记符,没有本质的区别,所以很多时候,我们把二者等 同视之。 无论是机器还是汇编语言,都让人看了头痛,好在我们并不去学它们
1.3.3高级语言 汇编语言和机器语言虽然很难记难写,但它们的代码效率高,占用内存少,这相当符合 当时计算机的存储器昂贵,处理器功能有限等硬件特点。 众所周知,计算机的硬件发展飞速,功能越来越强大。一方面,它有能力,人们也要求 它能处理越来越复杂或庞大数据量的计算功能,机器/汇编语言已经无法胜仼实现这些需 求:另一方面,硬件的发展和关键元件价格的降低,使得程序员不需要在程序的降低内存 占用,运算时间上花太多的精力,这样,各门高级语言便接二连三地出现了。 那么,高级语言“高级”在何处呢?前面我们说过,一门计算机语言“越符合机器的特 点,同时也就越不符合人类的特点”。人类总是希望凡事能舒服点就舒服点,于是某一天 先知先觉们一声怒吼“是该到让计算机语言接近人类的时候了!”从此冒出了 Pascal,冒出 了C,C艹, BASIC语言等数百种高级语言,现在又有Java,C#等等。高级语言高级在哪 里呢?就高级在它总是尽量接近“高级动物”的自然语言和思维方式 那么多高级语言,我们为什么挑了C++呢? 向来头痛这种问题,其实无论是 Pascal, BASIC,还是C++,甚至C和C++相比,每一种 语言都有极大的相通之处,又都有各自的独到之处。我大致鼓吹一下C++吧 首先,这是全世界用得最多的计算机程序语言。 其次,C/C++语言既有高级语言的优点,又在很多方面保留了低级语言速度快,可进行 很多具有可直接映射硬件结构的操作的长处,我们无时不用的 Windows等操作系统,就是 用C和汇编写成。事实上很多人称它为中级语言,这样两头俱备的语言,当然值得学。 再次,C语言本身,只有32个关键字(固定词),C++也只是进行了有限的扩展。另外, C/C++语言是众多语言中最简洁,紧凑,灵活的语言,学得易,用得爽!
1.3.3 高级语言 汇编语言和机器语言虽然很难记难写,但它们的代码效率高,占用内存少,这相当符合 当时计算机的存储器昂贵,处理器功能有限等硬件特点。 众所周知,计算机的硬件发展飞速,功能越来越强大。一方面,它有能力,人们也要求 它能处理越来越复杂或庞大数据量的计算功能,机器/汇编语言已经无法胜任实现这些需 求;另一方面,硬件的发展和关键元件价格的降低,使得程序员不需要在程序的降低内存 占用,运算时间上花太多的精力, 这样,各门高级语言便接二连三地出现了。 那么,高级语言“高级”在何处呢?前面我们说过,一门计算机语言“越符合机器的特 点,同时也就越不符合人类的特点” 。人类总是希望凡事能舒服点就舒服点,于是某一天, 先知先觉们一声怒吼“是该到让计算机语言接近人类的时候了!”从此冒出了 Pascal,冒出 了 C, C++, BASIC 语言等数百种高级语言,现在又有 Java, C#等等。高级语言高级在哪 里呢?就高级在它总是尽量接近“高级动物”的自然语言和思维方式。 那么多高级语言,我们为什么挑了 C++呢? 向来头痛这种问题,其实无论是 Pascal, BASIC,还是 C++,甚至 C 和 C++相比,每一种 语言都有极大的相通之处,又都有各自的独到之处。我大致鼓吹一下 C++吧。] 首先,这是全世界用得最多的计算机程序语言。 其次,C/C++语言既有高级语言的优点,又在很多方面保留了低级语言速度快,可进行 很多具有可直接映射硬件结构的操作的长处,我们无时不用的 Windows 等操作系统,就是 用 C 和汇编写成。事实上很多人称它为中级语言,这样两头俱备的语言,当然值得学。 再次,C 语言本身,只有 32 个关键字(固定词),C++也只是进行了有限的扩展。另外, C/C++语言是众多语言中最简洁,紧凑,灵活的语言,学得易,用得爽!