|
组合语言之艺术 作者: 朱邦复 第一节 计算机
一、前言
计算机的到来,被喻为人类文化的第三波革命,由于它具有强大的信息机能和弹性,
正好弥补了人类记忆不足、反应迟钝、厌于重复和受限于时空的缺点。遂在当今世事繁
杂、变化多端的动态社会中,成为人类日常工作中有力的帮手。
它之不同于人类其它的发明,是以机件的「硬件」结构,去执行可以随设计理念而
改变的「软件」。这一来,机器便具有了灵活应用的弹性,只要有适合的软件,它就会
忠实不渝地去处理各种繁琐的任务。
在初,它的速度及容量很低,但已有足够的魅力,吸引了无数狂热的有心人士,为
它尽智竭力,不断地改良更新。仅仅不过十余年,它已脱胎换骨,蔚为龙象。
这是一个崭新的天地,凡是思路广、创意新,能将各种抽象观念整理成为有秩序、
有条理的人,都能利用计算机的特种「语言」,发展成为实用而成功的「软件」。随着
软件大量的应用,工作绩效显著增进。终于,它的地位奠定了,整个人类社会的变化加
速发展,对它的依赖也逐日加深。
在这种形势下,我们要想充份掌握计算机的发展方向,就必须澈底了解计算机的本
质,再进一步分析探讨可行的、最理想的途径。由于它还在发展阶段,一定存在着许多
缺陷,也正因为它并不够完美,所以更需要我们用心力去浇灌。
二、正名
任何一个行业,其专业术语的正确性、优雅性,代表了从事该业人士的文化水准。
或许有人认为文化水准不重要,那么还有什么更重要呢?「信、雅、达」不是一种装饰,
术语是供学习、沟通及表达之用。因此,文化水准在另一个角度来说,相当于该行业从
业人员所具有的常识及智力水平。
有人称计算机为「电子计算器」,就其源起而言,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 Servi
ces 基本中断服务程序) 以及 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 │ 不限 │科学计算│
│理├────┼────┼────┼────┼────┼────┤
│ │Basic │ 720.0 │ 8.1 │ 1.0 │ 不限 │ 有限 │
├─┼────┼────┼────┼────┼────┼────┤
│ │Assembly│ 1.0 │ 1.0 │ 10.0 │限于机种│ 无限 │
│排├────┼────┼────┼────┼────┼────┤
│ │C │ 3.0 │ 3.0 │ 1.5 │ 不限 │ 无限 │
│序├────┼────┼────┼────┼────┼────┤
│ │PASCAL │ 6.0 │ 6.0 │ 2.0 │ 不限 │一般应用│
│处├────┼────┼────┼────┼────┼────┤
│ │FORTRAN │ 8.0 │ 7.5 │ 3.0 │ 不限 │科学计算│
│理├────┼────┼────┼────┼────┼────┤
│ │Basic │ 10.0 │ 8.0 │ 1.0 │ 不限 │ 有限 │
└─┴────┴────┴────┴────┴────┴────┘
由于个人写作能力,以及程序不同的特性,这种比较并无绝对的价值。不论从什么
角度看,汇编语言效能最佳,但制作时间较长,且限于机种,是其不利之处。据统计,
C语言近年来有取代汇编语言的趋势,尤其在系统设计上,由于硬件速度的改进,汇编
语言的边际效益已日渐减少。
然而,从附录的程序测试中可以看出,只有汇编语言的写作变化多、弹性大,能够
精雕细琢,将程序的效率发挥得淋漓尽致。纯以技术的立场、以及成本的分析来看,真
正有实用、推广的价值的软件,其初期的开发费用及时间等成本根本微不足道。
硬件之速度及记忆空间每增进一倍,其产品之售价亦上涨一倍,故汇编语言仍有其
绝对的优势。至于通用性问题,以目前发展的趋势来看,机种日渐统一,故丝毫不足为
虑。
还有一点也常被忽视的,是程序的积累价值。效率不高、功能不强的程序,很容易
就被扬弃掉。反之,则可以不断地重复利用,甚至累积起来,成为日后软件继续发展的
基石。像这样,程序的制作效率将会随着累积的程度而直线增加。当然,没有长远的眼
光和妥善的规划,是难以竟功的。
要发挥汇编语言真正的效益,必须先澈底认识其特性及机能,并应用各种技巧,整
理出一套法则,以便推广应用。这样虽然辛苦,但是,以未来社会对计算机的需求量,
不论成本、效益,也不论硬件发展到什么程度,唯有汇编语言才能使软件更上一层楼。
|