CSDN博客

img jiangtao

组 合 语 言 之 艺 术(一)

发表于2000/8/12 1:05:00  3917人阅读

//这是一篇90年的文章,从汇编语言角度讲软件开发,内容稍嫌陈旧,
//不过文章很多观点,我甚赞同
//朱先生是软件界大前辈,仓颉码发明人,現任香港文化傳信集團副主席
//發表「漢字基因工程」



    本书专供已具备写作组合程式语言( Assembly Language)能力及经验,且有志将组合语言视为常用工具之程式师,做进一步观念、技术上研讨用。
    微电脑由诞生迄今,不过短短廿载,一切观念及技术,尚处於开发阶段。可是利用一种不变的硬体机构,再加上可随实际需要而任意设计的程式,在相互配合下,完成某些指定的工作,却是最具效率的方法。
    且不论电脑硬体未来的发展如何,程式这种可塑性极高的软体,必然会成为人类文明的重要一页。甚至於随着时代的需要,大量人力、心智的投入,它又何尝不可能成为一种艺术?一种代表着人类智慧、涉及各种领域、且具备商业价值的综合性艺术?
    艺术具有开放性、观摩性、完美性的特徵,它可以充实人生、升华人性、活化心灵,是人类特具的一种创造行为。在每一个时代,随着环境及事物的变迁,都会有不同形式的艺术出现。人们运用心灵可以触及的各种素材,发挥到意识所及的最高境界,这就是艺术。
    我认为在这个资讯时代,电脑程式的设计及应用,正是一种划时代的艺术。目前还只是电脑艺术的拓荒期,由无到有,再由简而繁,以臻於至善,在这过程中,尚有待我们投入大量的劳力、心血以及无上的智慧。
    本书对初学程式语言者并无助益,读者起码应具备对电脑软硬体的认识,并略通组合语言的指令。更理想的是已经有一些应用上的经验,才能领会其中道理。
    组合语言系供机器控制用,因中央处理器(Centrol Proc-essing Unit,CPU) 或微处理器(Micro Processor)之不同而有所不同。本书仅针对8088 CPU指令,作技术性探讨。
    本书原系本人在两仪文化科技公司教学之讲义,後因各界需要,特加以整理发行。但因工作繁重,兼以视茫发苍,对有关细节,常有力不从心之叹。书中谬误之处甚多,尚请方家不吝指正是幸。
    正当本书要出版之际,我发现市面上有本“ZEN of Assembly Language” (Michael Abrash, Scott, Foresman and Company)的好书,这本书中的观念和我极为接近,只是在技术上更进一层,分析得非常透彻,值得向大家推荐。
    巧的是,在该书中也举了点阵放大的例子,且方法与我们用的很类似。读者有兴趣,正好详细比较一下,他山之石,可以攻错,能见到这样的好书,证明吾道不孤,颇令人安慰。
    我坚信当电脑成熟时,软体的制作将全靠模组,而模组必须建立在组合语言上。因此,到了最後,只需要少数人制作专用模组,并公开销售。至於应用软体,将会简单到人人都能设计,所以有志从事电脑工作者,应该由组合语言着手。
    本书由沈红莲小姐修辞、校正,刘莉小姐利用“聚珍整合系统”,以600 点雷射印表机制版,特此致谢。




                                      朱邦复  1990年7月


    第一章    观念正误

    第一节  电脑

一、前言

    电脑的到来,被喻为人类文化的第三波革命,由於它具有强大的资讯机能和弹性,正好弭补了人类记忆不足、反应迟钝、厌於重覆和受限於时空的缺点。遂在当今世事繁杂、变化多端的动态社会中,成为人类日常工作中有力的帮手。
    它之不同於人类其他的发明,是以机件的「硬体」结构,去执行可以随设计理念而改变的「软体」。这一来,机器便具有了灵活应用的弹性,只要有适合的软体,它就会忠实不渝地去处理各种繁琐的任务。
    在初,它的速度及容量很低,但已有足够的魅力,吸引了无数狂热的有心人士,为它尽智竭力,不断地改良更新。仅仅不过十馀年,它已脱胎换骨,蔚为龙象。
    这是一个崭新的天地,凡是思路广、创意新,能将各种抽象观念整理成为有秩序、有条理的人,都能利用电脑的特种「语言」,发展成为实用而成功的「软件」。随着软件大量的应用,工作绩效显着增进。终於,它的地位奠定了,整个人类社会的变化加速发展,对它的依赖也逐日加深。
    在这种形势下,我们要想充份掌握电脑的发展方向,就必须澈底了解电脑的本质,再进一步分析探讨可行的、最理想的途径。由於它还在发展阶段,一定存在着许多缺陷,也正因为它并不够完美,所以更需要我们用心力去浇灌。
二、正名

    任何一个行业,其专业术语的正确性、优雅性,代表了从事该业人士的文化水准。或许有人认为文化水准不重要,那麽还有什麽更重要呢?「信、雅、达」不是一种装饰,术语是供学习、沟通及表达之用。因此,文化水准在另一个角度来说,相当於该行业从业人员所具有的常识及智力水平。
    有人称电脑为「电子计算机」,就其源起而言,Computer确是这种定义,因为当时的电脑,仅仅具备计算能力。但是微电脑(Micro Computer)问世後,其计算能力已由小型计算器(Calculator)所取代,其主要功能反而是逻辑推理、图形及影象处理等。
    当今是一个演进淘汰极为剧烈的时代,举凡新生事物,由产生到消失,由稚弱到茁壮,无不历历在目。原名计算机,现在已证明是当时观念的不足,我们应该将错就错吗?而且,趋势所及,它必将朝向人工智能发展,成为道地的「电子」脑。所以,我们认为应该及时更正,名之为「电脑」。
    此外,将Assembly Language 译为「汇编语言」,这是理解的错误,因为绝大多数的程式都需要「汇编」,而Assemble的本意正是「组合」。名不正,理解就会发生偏差,对功能的实际应用就难以发挥。
    最不可原谅的错误是因为国人好吃成性,硬把在现代科技界「假借」使用的 MENU 「清单、目录」,全部直译为「菜单」!我国文字原有的优越性荡然无存矣,我无法想像当智慧电脑天天面对「菜单」时,要从何理解!
    有把Program 「程式」当作「程序」,这也是对文字概念认识不够所致,「程式」是一种具有「程序」的「式子」,而「程序」只是行事先後的「过程及顺序」,读者不可不知。
    又「硬体、软体」分指固定及可变的物理性质,「硬件、软件」则为某一具体的物件;「套件、软件包」是可以出售的商品;「硬、软盘」指附属机器上之设备;「软碟」是可取用的磁碟。
    还有 CALL 被译为「访问」,似乎太拟人化了,它本来就是「调用」特定子程式,名正言顺,何不「调用」?Run 被译为「跑」,则过於「写实」。这些译名不禁令我想到,在十多年前,1台湾曾有人将Backspace 翻译为「後悔」,结果贻笑大方,传为趣事。
    其他此类疏误尚多,我认为电脑界必须谦虚一些,邀请文学界专家学者,或博采众见,以免被讥为不学无术。
    实际上,由於概念的应用日趋精密,文字本身也在不停地调整变化。以《庄子》逍遥游为例,在汉朝时作「消摇游」。後来,改成以「  」为部首,代表「动作及行为的状态」的「逍遥游」,显然比「消摇游」更为妥贴,於是沿用迄今。
    连哲学上都如此,为什麽当今的高科技就做不到呢?

三、应用

    电脑发展的初期,不论硬体、软体,都出於个人的意向,其功能完全根据发展者自我的认知而定。
    现在,电脑软、硬体的技术迅速成长,社会上对它的要求越来越高,尤其是软件的复杂程度,已非任何一个个人能够掌握。於是,个人英雄主义消逝了,集体合作、功能强大的各种软件纷纷出笼,电脑的应用普及到社会上各行各业。
    人的愿望是永远无法满足的,随着技术的日新月异,使用者开始期待着一种万能软件,能一举解决他们所有的需求。然而,电脑虽然是一种商品,其涉及的技术层次甚高,只有少数专家洞悉其中奥秘。在理论上,只要把所有已知的功能,溶汇在一个套件中,就叫做「整合软件」,再不断改进,必然可以符合人的需求。
    这种整合软件,对西方的功利社会而言,只是可望而不可及的理想。他们制作软件纯为了牟利,成本越低,上市越早越好。既然他们才是掌握技术的专家,而要达到  财的目的,当然不想劳神费力,去为使用者考虑。
    设计软件的工具,称为「程式语言」,其种类甚多,最早用的是「机器码」,後来为了程式师使用方便,特在机器码与编程者之间建立了一个界面,此界面所用的字汇及语法,便是「组合语言」。
    由於技术发展之初,各种观念及认识尚不完整,一般程式师都嫌组合语言太琐碎,难学难用。故而又发展出一些比较容易应用的「高阶语言」。这种高阶语言制作的程式,在执行时不仅速度慢,又极占空间,使得容量有限的微电脑,常常被这种「高级」程式占满。
    虽然硬体逐年改进,而软体工作却也不断增加,如果采用高阶语言来制作,水涨船高之馀,整合的理想仍旧遥遥无期。电脑界一直有种谬论,咸认记忆体的容量越来越大,所以程式空间并不重要。这是最不负责任的态度!记忆体的增加,正宜用来强化电脑的功能,怎能无故挥霍浪费?
    组合语言则没有这种问题,在严谨的制作方式下,不仅其程式空间小,执行效率高,且制作容易。这一次,我们仅用了百馀个人月,170KB 的程式,完成了有视窗、文书、试算表、资料库、绘图、排版及通讯等功能的整合软件。
    更进一步,我们把这个整合软件的各个模组,继续发展成为“整合系统模组”,提供给各系统、软体公司,作第二次开发之用。由於利用现成模组可以节省程式制作的时间,藉着大量应用软件的开发,以提升电脑的功能。
    当然,各种电脑语言都有其优劣点,完全看设计者的理念及目的而定。原则上,其执行速度、占用的系统空间、在各个不同机种上的通用性、待处理资料的性质以及使用该语言需要的工作量等,都是必须详加考虑的因素。
    如果我们把眼光放在未来电脑的趋势上,人工智能必将是唯一的方向。要想微电脑具有人的智能,由於对空间速度的要求,只有借助组合语言始有可能。至於目前一些人工智能专用语言,则都是过渡时期的垃圾,毫无价值!
    不论从事任何工作,必须具有敏锐的眼光和判断力,等到人人都看到了,再行动手,则只有拚命追赶的份。组合语言正是一个崭新的领域,先把观念建立了,再下功夫钻研技术,将无往而不利。

四、美国市场的程式语言应用

    我手头唯一的资料,是美国 COMPUTER 杂志在1983年五月刊载於第65页的文章,讨论当时的 362种软件发展工具,存贮在一个「相关性资料库」中,并且对该资料库中工具的利用情况,一一分析。
    文中列举了34种程式语言,以及其他各种应用工具,兹将程式语言部份,抄录如後。
  ┏                  ┳    ┳                  ┳    ┓
      程  式  语  言    数量    程  式  语  言    数量 
  ┣                  ╋    ╋                  ╋    ┫
    FORTRAN              110  COBOL                41 
    JOVIAL                15  Structured FORTRAN    10 
    Assembly              8  Basic                  5 
    CICS                  4  Object Code Input      4 
    PL/1                  3  IFTRAN                3 
    SRTRAN                3  PASCAL                3 
    Structured COBOL      3  ADA                    3 
    Compass                2  RATFOR                2 
    LISP                  2  C                      2 
    DMATRAN                2  Memory Dump            2 
    BAL                    1  SMAL/80                1 
    PCL                    1  SCOBOL                1 
    APL                    1  HAL/S                  1 
    CHILL                  1  ALGOL                  1 
    SNOBOL                1  JCVS                  1 
    CSL                    1  MODULA                1 
    MEFIA                  1  CMS-2                  1 
  ┗                  ┻    ┻                  ┻    ┛
    经过了七年的市场选择,C已是目前最主要的系统工具,PASCAL则取代了 COBOL成为商业软件的发展工具。BASIC 仍为学生及业馀玩家的伴侣;只有组合语言,大约仍停留在原有的水准上。除了少数的系统程式,如IBM BIOS ( Basic Input  Output Services 基本中断服务程式) 以及 DOS (Disk Operating System 磁碟作业系统) 等外,使用者不多。
    这种现象导致了国人极大的偏见,咸认为美国观念、技术遥遥领先,他们对软件发展工具的选择,必然有独到的眼光。学校教学,系统公司应用,莫不亦步亦趋、拾人牙慧。
    美国是以商业为导向,利用逐年更新设备的手段,以加速产品的改进。所以,他们重视硬体的效率,以及程式写作的成本,但对程式语言本身的特性,并未受到应有的重视。
    不容讳言,目前我们在软体上,处於相当落後的地位。如果在这个关键的时刻,我们还看不清事实的真相,妄想东施效颦,其後果未卜可知。
    我认为,只有采用组合语言,大力开发各种应用程式,将最低档微电脑的性能提升到极致。这样,我们才能发挥人多势众的优点,提升高科技水准。

五、各种语言的性能比较

    为了具体了解各种常用电脑语言间性能之优劣,我们选用了五种为测试对象,下表即为测试所得之各种统计数据。表中以一为基数,效率高者,其数值相对增加。
    在附录一、二中,我们将各种测试的原程式、所采用的技巧、以及考虑的细节,分别列举,并一一说明。主要的目标是为了认识程式写作的技术,和追求效率的手段。
    我们测试的指标有二,一是针对各种程式语言本身的适用范围;一是程式语言之间的差异。根据对时、空效率的分析,我们发现,程式语言之间,有着极大的差异。就是使用同一语言,程式写作的技巧,也显着地有所不同。至於程式语言的适用范畴,则因取材有限,未能得出可靠的结论。
    我们选了两个题目,一是点阵图形处理,将一个 24X24点阵字形,左右、上下各放大一倍,以得到 48X48的字形。这种点阵处理,有很多高阶语言难以胜任,所以只好在常用的语言中,选了五种。另一是排序,一般语言都能处理,只是效率相去甚远。
┏  ┳        ┳        ┳        ┳        ┳        ┳        ┓
      语言类别  执行速度  占用空间  制作时间  通用机种  应用限制 
┣  ╋        ╋        ╋        ╋        ╋        ╋        ┫
      Assembly    1.0        1.0      2.1  限於机种    无限   
  图┣        ╋        ╋        ╋        ╋        ╋        ┫
      Turbo C      7.2        3.2      1.4    不限      无限   
  形┣        ╋        ╋        ╋        ╋        ╋        ┫
      PASCAL      6.8        8.1      1.4    不限    工商应用 
  处┣        ╋        ╋        ╋        ╋        ╋        ┫
      FORTRAN      8.0        6.9      1.0    不限    科学计算 
  理┣        ╋        ╋        ╋        ╋       
0 0

相关博文

我的热门文章

img
取 消
img