组 合 语 言 之 艺 术(一)
//不过文章很多观点,我甚赞同
//朱先生是软件界大前辈,仓颉码发明人,?F任香港文化?餍偶??F副主席
//?l表「?h字基因工程」
序
本书专供已具备写作组合程式语言( 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 不限 科学计算
理┣ ╋ ╋ ╋ ╋
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论