奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> 汇编 >> 汇编语言的艺术(组合语言的艺术)--观念正误
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • JDBC专题介绍(1)

  • 全面解析JDBC(9)

  • 全面解析JDBC(6)

  • 全面解析JDBC(5)

  • 全面解析JDBC(4)

  • 全面解析JDBC(1)

  • MySQL中修改密码及访问

  • SQL语法参考

  • 汇编语言的艺术(组合语言的艺术)--观念正误
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-21

    汇编语言的艺术(组合语言的艺术)--观念正误:    第一节  电脑

    一、前言

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

        任何一个行业,其专业术语的正确性、优雅性,代表了从事该业人士的文化水准。或许有人认为文化水准不重要,那么还有什么更重要呢?「信、雅、达」不是一种装饰,术语是供学习、沟通及表达之用。因此,文化水准在另一个角度来说,相当于该行业从业人员所具有的常识及智力水平。
        有人称电脑为「电子计算机」,就其源起而言,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 │  不限  │科学计算│
    │理├────┼────┼────┼────┼────┼────┤
    │  │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语言近年来有取代组合语言的趋势,尤其在系统设计上,由于硬体速度的改进,组合语言的边际效益已日渐减少。
        然而,从附录的程式测试中可以看出,只有组合语言的写作变化多、弹性大,能够精雕细琢,将程式的效率发挥得淋漓尽致。纯以技术的立场、以及成本的分析来看,真正有实用、推广的价值的软件,其初期的开发费用及时间等成本根本微不足道。
        硬体之速度及记忆空间每增进一倍,其产品之售价亦上涨一倍,故组合语言仍有其绝对的优势。至于通用性问题,以目前发展的趋势来看,机种日渐统一,故丝毫不足为虑。
        还有一点也常被忽视的,是程式的积累价值。效率不高、功能不强的程式,很容易就被扬弃掉。反之,则可以不断地重覆利用,甚至累积起来,成为日后软件继续发展的基石。像这样,程式的制作效率将会随着累积的程度而直线增加。当然,没有长远的眼光和妥善的规划,是难以竟功的。
        要发挥组合语言真正的效益,必须先澈底认识其特性及机能,并应用各种技巧,整理出一套法则,以便推广应用。这样虽然辛苦,但是,以未来社会对电脑的需求量,不论成本、效益,也不论硬体发展到什么程度,唯有组合语言才能使软体更上一层楼。

        第二节  组合语言

    一、结构基础

        物质文明之有今天的成就,是因为人类掌握了物质的基本结构。物质的种类无穷,但是却都由基本元素交互组成,只要根据一定的法则,就能得到一定的结果。
        电脑技术虽然日新月异,应用软件的变化也无止无尽,而其基本因子却非常有限。各种微处理器的组合语言,正是电脑软体的基础结构,任何要通过软件以完成的动作,都是经由组合语言的指令群,逐步执行的。
        因为电脑结构复杂,各种任务分工极精,即使是一位资深的高级程式师,终其生也不过局限在若干固定的程式中钻研,很难以宏观的立场认知全貌。再加上市场需求的压力,局外人莫名其奥妙,局中人又忙得不可开交,所以还没有任何人能作出全盘的评估。
        组合语言首先成为被误解的牺牲者,包括应用它的系统工程师在内,都一致认为它「难学难用」,(中文也是一种组合形式的应用,其所组合者是人的概念。无独有偶,人们在不求甚解之余,都视之为畏途。)事实上大谬不然,现在是科学挂帅,而科学的精义就在于系统的分类和应用。问题是我们能不能归纳出一些学习、应用的法则,将组合的过程化繁为简,以符合各种应用范畴。

    二、个人体验

        我个人对此感受极为深切,我原是个十足的外行,1978年第一次接触电脑,曾以不到两周的时间,就学会电脑操作,并应用「培基语言」设计完成“仓颉输入”程式。当时我认为培基语言易学易用,是电脑上最好的工具。
        后来,我开始用培基语言设计“仓颉向量组字”程式,每秒可生成两个字,当时与我合作的宏基公司建议我采用组合语言,他们说组字程式速度要快,培基语言不能胜任。如改用组合语言,效率可提高十倍,由此开始了我与组合语言的不解之缘。1979年9月我们正式推出了由国人自行设计、具有完整的电脑功能、可运用数万中文字的“天龙中文电脑”。
        宏基公司动用了三位资深工程师,采用 Z80 MCZ系统,以六个月的时间完成了向量组字及系统程式,记忆空间占60KB,处理速度每秒约组成30字。
        这是我首次发现到组合语言的威力,深究之下,才理解到电脑的全部工作原理。简单说来,组合语言就是组合电脑所有功能的控制指令,利用它,就可以直接控制电脑。
        其他高阶语言,只是让人省事,用一些格式化的手续,把人的想法化为过程的指令,这种情形就相当于为了迁就开车的人,建了密如蛛网的高速公路。本来走路只要几分钟就可到达的地方,以车代步的结果,反而需要耗费半个小时。
        1980年,我决定自己动手,又重新设计了一套字数较多,字形较美观的组字程式。只用了三个月的时间,结果不仅记忆空间缩小了三分之一,速度也快了十倍,达到每秒 300字。这个产品,就是1苹果机上用的「汉卡」。
        1983年,再经分析,我发现以往写的程式很不精简,技术也不成熟。我坚信中文字形在电脑上的应用,将是中国文化存亡兴衰的根本因素,不仅值得投注自己的时间及精力,且也有此必要。所以我又拋掉了一切,重头设计,加入更多的变化参数,并根据人的辨识原理,设计成第三代至第五代等多种字形产生器。每一代之间,速度都明显地提高,功能也不断加强。在这样一再重覆的摸索中,尝试了各种可行的途径,充份认识了组合语言的特性及长处。
        由于组合语言灵活无比的特性,我发现它就如同画家的画笔一般,只为了牟利,可以用它画成各种廉价速成的商品;一旦投入自己的理想与心智,画笔就不再只是一枝笔,而成为人心与外界的界面,画出的作品立时升华成为艺术,进入一个更高的境界!
        1985年,我再次重新设计规划,采用人的智能原则,把人写字、认字的观念化为资料结构,程式只是用来阐释资料、控制电脑的界面。该字库的字形可做到无级次放大缩小,字体、字型皆能任意变化 (每字可以产生数亿种变形) 。而且除了现今各种字典已收的六万余字外,还可以组成完全符合中文规则的新字六百万个,足敷未来新时代新观念的发挥应用。
        不仅如此,组字速度又提高了,每秒可以组成 30*30的字形两千个!当然现在用的是15mhz 80286 ,比以往的4.75 mhz的z80 已经快了近六倍。但是,改良后的新程式,其功能的增加,处理过程的繁杂性已远非当年可比。
        这些成果,用了很多特殊的资料结构技巧,不可能经由高阶语言来完成。既然用组合语言所制作的程式能一再大幅度地改进,这就说明了组合语言的弹性极大,效率相去千里。如不痛下苦功钻研,程式写完,能执行就算了事,又怎能领悟其中奥妙?
        所以,我并不认为组合语言祗是一种程式语言而已,它是一种创造艺术品的工具,它能赋与无知无觉的电子机器一种「生命」,由无知进而有知,由有知而生智慧。通过对组合语言的研究探索,我整理出一些规律,写成这本书,以便于理解及应用。但是,要真正将组合语言发展成为艺术,尚有待青年朋友们继续努力,在这个资讯时代,开拓出一片崭新的天地。
        无意义的音符能编成美妙的音乐,无规律的色彩可幻化为缤纷的世界,为什么电脑的机器指令,不能架构出资讯的理性天地?
        这就是艺术,作为艺术家,就必须奉献出自己的心血,以真、善、美为最高境界。
        要达到这种目的,就要认真的作好准备动作,再一步一步地追求下去。

    三、利人与利己

        任何一种商业产品,当然是以利益为先,利己后而利人。如果是艺术品创造,则刚刚相反,唯有能忽视己利,沥血泣心地探索,虔诚狂热地奉献,才会迸发出人性的光辉,创造不朽的杰作。
        艺术家之伟大,在于此,人性之可贵,在于此。
        对组合程式语言,有人视为商品,将写作技巧当作专利,轻不示人。相信这也是迄今尚无一本像样的参考书籍之根本原因,我买了不少这类书,但书中除了指令介绍以及编程、侦错的手续外,完全没有技巧的说明,好像懂得指令就可以把程式写好一般。当我自己下了不少功夫,得到了一些心得,再回过头来看那些参考书,才发现连作者本人所举的例子,都是平铺直叙,毫无技巧可言。
        (更正,在序言中我曾提到有本最近出版的“禅-组合语言”,是唯一的例外,希望读者不要错过。)
        多年来,我一直想写本有关组合语言写作技巧的书,可惜都得不到机会。这次,为了实现「整合系统」革命性的计划,所有招收的工程师,一概从头训练。由于没有可用的教材,只好自己动手,于是初步有了讲义,再经修改,便成此书。
        我认为,既然组合语言是种艺术,我们不仅不应该藏私自珍,而且要相互探讨,交流切磋,以期发扬光大。
        不过,技术本身与利用该技术所创造的产品却不能混为一谈,产品是藉以谋生的工具,能够生存,大家才有研究发展的机会,也才能把成果贡献给社会。如果国人不尊重别人的产品权利,只是互相抄袭盗用,或能受惠于一时,但影响所及,人人贪图现成,不事发展,则观念停顿,技术落伍,其后果不堪设想。

        第三节  效率定律

    一、效率的定义

        在宇宙中,大至物种的演进、变化,小至个人的工作、运动等,都严格地遵守效率法则。 
        效率的定义是:
        ┌─────────────────────────┐
        │F=E/t,即特定的能量在特定的时、空中所作的「功」。 │
        └─────────────────────────┘
        由上式 F = E/t 可知,特定的「能量」在特定的「时空」中所作的「功」,是一恒定值,既为恒定值,表示不可能有任何浪费。当能量不变时,时、空的延长往往会导致「功率」的不足,从另一个角度看,可以说是能量不够,效率低。
        对电脑而言,如果写作程式的「功率」能接近此一「恒定值」,而又具有长远的使用价值,则我们可以假定,这种程式的效率最高。
        由人类文明的演进,可以看出,因为技术日渐专业化,工作的难度不仅没有减低,反而更加复杂。这种藉着职业专家的投入,以节省一般应用者宝贵时间的方法,事实上可以说就是效率的追求。
        因为人的生命仅存在于有限的时间,所以其价值极高。每一个电脑程式,其最终目的都是为了服务大多数的使用者,制作程式者仅仅是少数人,其制作时间的长短,永远无法与大多数的使用者,在操作中所耗费的时间相提并论。
        此外,以写作程式为职业的人,一生中所需写作的程式,也一定有相当的数量。如果能重复应用写过的程式,将更缩短其写作时间。无论从哪一个角度,若要追求效率,组合语言应是唯一的选择。
        作为电脑的从业者,在职业良知上,理应禀着服务人类、追求效率为最高准则。

    二、电脑的效率性

        电脑的发明,是人类追求效率最具代表性的成就。
        目前电脑的机能尚局限在资料处理以及自动控制上,人们利用电脑,所期望得到的效率不外乎下述六点。
        1,节省工作时间及工作成本。
        2,取代繁琐、重覆性高或具有危险性的作业。
        3,追求精密无误的资料、讯息。
        4,贮存或运算大量的数据或资料。
        5,远距离的通讯或遥控作业。
        6,自动化工业生产或一般性服务。
        然而,电脑发展方兴未艾,上述数点难以表达于万一。因此,我们有必要将人类所期望的效率整理归类,以作为分析判断的依据。

    三、四大效率定律

        兹以人类社会中,有关作业过程、生产成本及应用价值等三方面,分别假设定律如下:

        定律一:
            在作业过程上,能以最少步骤产生最大功率者,效率最高。
        定律二:
            在生产成本上,时、空间及原料最节省者,其效率最高。
        定律三:
            在应用价值上,功能及成果能一再累积者,其效率最高。
        定律四:
            最佳的效率,是最符合实际需求的最大边际效应。

        电脑的应用,纯粹是为了追求工作效率,据此,硬体、软体的设计,都应严格遵守效率定律。可是事实却不然,由于电脑发展迄今,一直是「卖方市场」,美其名为「高科技」,内行人高利、高酬,外行人则唯恐后人,亦步亦趋。
        电脑界为了谋取近利,在软件设计的过程上,常采用最缺乏工作效率的高阶语言。但是由于高阶语言易于制作,生产成本低,只是苦了「无知无觉」的买者,为了追求效率往往要花费更多的代价,购买更昂贵的、更新型的硬体,以满足其效率的需要。
        有人说高阶语言制作的程式还有一个组合语言无法比拟的优点,就是很容易「转移」到其他的机种上。事实上,目前微电脑市场仅存两种机型:一为IBM PC系列及其兼容机,另一为MACINTACH ,而这两者所有的软件,不论采用哪一种语言,都无法轻易地「转移」!
        一般说来,任何一种新的微电脑上市,其执行速度及记忆容量每增加一倍,其价格亦成正比上升。是不是有必要非改进硬体,才能达到效率的要求呢?如果我们能澈底瞭解程式语言的特性,当会明确地认知怎样才具最大边际效益。
        这也是进化的基本法则之一,当电脑技术成熟之时,真正的效率才会受到重视。同理,在电脑应用效率达到最高点时,也就是电脑技术成熟的时机。我们如果能掌握这个原则,自不难看到长远的发展趋势,洞烛机先。

    四、组合语言之效率

        根据定律一,组合语言之效率是不容置疑的,因为组合语言相当于电脑运行的「机器命令」,能直接产生「功率」。
        生产成本有多种意义,在此我们仅讨论其中两点:一是生产过程所需的时间,一是产品的直接成本。
        组合语言能以最小的空间,发挥最大的功能。显然,在等效的功能下,其成品所占空间最小,成本最低。但是对生产过程所需时间而言,组合语言就处于相当不利的地位。除非能有一种方法,可以改进组合语言制作的效率。
        这正是本书的主要目的:介绍一种方法,以提高组合语言之制作效率。
        我们的目标不仅在提高数倍的制作效率,并且还要证明,用一种特殊的手段,能将组合语言设计的「模组」,如同砌砖一般,建造出资讯的金字塔来。这样不仅能满足定律三,而且完全符合定律四的要求。
        最重要的,是这种效率的达成,在于利用人的「智力」。我认为在宇宙进化的过程中,到目前为止,「人智」就是最高效率的结晶。任何人若要追求效率,应自己先下手,与其坐待硬体的改进,不如充实程式写作的方法及技巧,至少,这些都操纵在自己的手里。

    五、模组的效率

        模组并不是一个新观念,在人类文明发展史上,人一直致力于瞭解自己身处的宇宙。这种瞭解,实际上就是模组应用的观念,将宇宙大环境,分解成为人所能认知的小环境,进而将小环境再分解成为个人的经验素材。
        这样一层层地分解下去,便有了「概念、知识」。换句话说,概念及知识,就是一个个代表人类对客观认知的模组。
        基于模组的特性,人才能灵活地加以应用,因而产生了「人类文明」。同理,当电脑的软件,也演化为模组方式,进一步大量推广运用时,电脑文明的时代,即将到来。
        模组的效率是结构性效率的最高表现,在我们处身的宇宙中,无处没有结构,无一不受到结构的支配。有关模组规划、制作和应用,将在第四章第三节、模组观念中详加讨论。

        第四节  程式价值

    一、程式的种类

        因为目的不同,一般说来,程式可以分为以下四种。

      1,应用程式:
            凡专门提供给用户,作某种特殊应用的软件,皆称为用程式。通称「套装软件」( Application Package),即成套包装的软件。

      2,系统程式:
            即为系统所提供的「通用程式」,包括在 DOS环境下运行的「命令」(Command) 及「基本中断程式」等。这些程式都是支援系统硬体,供用户应用的工具。

      3,介面程式:
            介面意为「介」于多个「面」之间,凡电脑各系统、硬体与软体、软体与软体之间,皆可称之为介面。
            对程式师而言,写作程式需要「程式语言」的发展环境,所谓的介面程式,即为此类发展环境所必需者。
            此外诸如网络及通讯等,也可以称为介面程式。

      4,控制程式:
            利用程式控制机器运作者,此类程式完全依赖硬体独特的机能,专业性极强。

    二、价值观念

        不论什么程式,都应该以「正确、精简、效率」为基本原则。但在目前,除了系统程式比较重视精简及效率外,其他的程式多半只重视正确性而已。
        人们往往以为只有硬体才具有价值,其实大谬不然。硬体的变化有限,软体则永无止境;硬体的价值容易衡量,软体却祗有行家才能判断其良窳。在商业利益挂帅的今天,所谓的「行家」,经常就是「既得利益者」。消费大众是盲目的,也是无辜的,行家为了自身的利益,很少愿意道破其中原委。
        此外还有另一层原因,硬体生产需要技术、材料、资金及设备环境,而软件则人人都可以随手盗用。对一个从事软件设计的程式师,尽管有心将工作做得尽善尽美,但一想到其呕心沥血发展出来的精品,很可能剎时之间就被不尊重软件价值的消费者偷抄盗卖,哪里还有兴致去精雕细琢?
        如果我们能先将软体的价值观建立起来,且人人尊重软体应有的价值,如此真正受惠的,将是广大的消费大众。否则,这样恶性循环下去,电脑只能靠硬体的改进,来达到效率的追求,软体不过是一种「速食」性的消费品,永远没有价值。
        以金额来看,硬体的市场边际价值远不如软体为高。因为硬体的生产成本高,用户每购买一台,就满足了基本需求。故此必须经常推陈出新,以资获利。当然,市场也有其平衡的法则,高利之下,竞争者多,过时的、效率低的硬体又因恐遭市场淘汰而大幅度的降价。
        从过去的经验中可以推出,硬体效率的改进,大约每年一次,而软体则完全建立在其「价值观」之上。如果值得,设计者愿意投入,软体可以在很短的周期中,或因观念的突破,或因工具的特性,功能及效率立即提高了十百倍!问题在于,连从事程式设计的程式师,对软体的认识都不够充分,所制作的软件尚无法满足使用者的需求,充其量只是速成品罢。故不论是程式师或使用者,对软件的价值观都难以建立。
        上述的工具是指「组合语言」,而观念则是将组合语言视作「艺术」。当然,这些只是理想,基于人性,理想永远祇属于少数人。可是,少数人的理想经常会推动时代,为多数人谋取福利。

    三、创造价值

        资讯时代方兴未艾,可以预期到只要有人类存在,电脑将是不可或缺的伴侣,永远伴着人类不断朝向超高效率的境地迈进。且不论硬体技术如何改进、变化,应用软体才是电脑生命的灵魂。一个有价值的软件,在千锤百炼之下,经过人智的洗礼,其意义绝不是物质报酬可以比拟的。
        再换一个角度来看,电脑的硬体技术日新月异,体积日趋轻巧。虽然记忆量也在不断增加,但是软件却刚刚相反,由于对高阶语言的依赖,程式占用系统的空间越来越大,以致于抵消了硬体演进所创造的价值。
        当然这都是软件工程师的责任,如果从事软件开发者,不立时觉悟,电脑将不过是「金玉其表,败絮其内」。同理,从事软件开发者,如果仅顾眼前的方便、急功近利,能抄就抄,能偷就偷,长此以往,电脑永远不能形成气候。
        因此,钻研软体的制作技术,创造软件的实用价值,才是资讯时代的主导方向。从这个角度上来看,组合语言所具备的效率优势,远较高阶语言容易制作的优点更有意义。
        对程式师而言,仅把程式当作一种工作,而不追求效率价值,则其技术及境界将止于此,其成就亦可想而知。唯有殚精竭虑,不断追求完美的人,无论观念和技术都将逐步提升,则在未来的资讯时代中,将会占有一席之地。

    四、追求价值

        那么,究竟应该如何去追求最高的价值呢?我们不妨从几个不同的角度来分析。

      1,程式价值的定义:
            前面说过,组合语言是一种艺术工具,用组合语言所写的程式则是艺术品。而艺术品的价值是很难加以衡量。可是,程式又是一种工具,对工具而言,它是客观存在,必然具有客观的价值。
            因此,我们可以站在客观的立场,将用组合语言所制作的程式、以及其应有的价值,分门别类予以定义。在此我们不考虑其他程式语言所制作的软件,并不表示这些价值定义不适用,而是认为这种比较不公平。因为以下的定义,都是根据组合语言的特性而考虑的。

        1-1 成本价值=目标1×目标2/成本
                「成本价值」是一种人人都知其然而不知其所以然的观念,是指以某一固定成本,在目标1与2两者之间,根据效率定义,何者价值高,即为其成本之代价。
                在现实世界里,人所从事的工作,有抽象的精神或心理代价,也有金钱或物质代价,甚至两者兼而有之。不论如何,也不论成本为何,其价值高者,经常是人所追求的目标。在这种基础上投入的成本,其价值的高低,将视人所追求的目标而定。
                由于「理想」很有可能只是某种特殊的目标或影响,其利益经常远大于经济上的获利。因此,要提高成本价值,绝非仅仅降低成本而已,而是如何提高其影响力。
                再若经济上的获利高于理想,以现实的角度而来看,人不可能轻易放弃利益,而去追求价值不足的「理想」。
                在这种理论下,人的发展方向,是从事理想的追寻抑或物质利益的满足,端视理想与获利两者,对个人的成本价值而定。同理,人工作的方式及对工作的要求,亦因成本价值而有所取舍。
                采用组合语言制作程式,就是明显的成本价值观念。因为组合语言的效率高,追求效率的实现就是一种理想,为此,投下时间及各种难以估计的成本,对那些有能力牟利者说来,当然是不值得。可是在不知「阿堵物」为何者,除了理想的追求,还待何为?
                以上面的公式来看,降低成本仍可提高其价值,获利的增加亦然,这是必然的,即所谓的「附加价值」。关键在于如果「理想」的价值低于获利,自然而然,其目标将转移为获利。反之,为了牟利,也可能在发现了理想价值后而改途转向。
                附带的产生了一个话题,若矢志追求理想的人又想兼顾金钱利益,一旦金钱利益的成本价值超过了理想时,根据前述理论,此人随时可能变节。至少,在我个人的见闻中,还没有例外的。

        1-2 功能价值
            绝对价值=采用后效益/未采用前效益
            相对价值=各软件间绝对价值比
                任何软件,如果没有实用的功能,就不可能有真正的价值。至于软件的功能价值如何测定,多多少少要看使用者的主观条件而定。
                在这里,我们提出一个简单的方法,先要知道在采用软件的前后,是否真具有效益?这种效益,是绝对的,没有大、小的比较。
                然而,如果一个软件没有效益,就不可能成为商品。所以,任何软件的功能价值,应该是比较性的,在类似软件中,取其绝对价值之比值即可。

        1-3 效率价值=程式功能价值/占用空间×执行时间
                效率是可以精确衡量的,只要得到前述的功能价值,其它诸如程式占用的系统空间、执行所需要的时间等参数,都可以透过测试得到。
                当程式的功能价值极高时,相对的看来,其空间及速度的影响不大,但这种程式迄今尚未诞生。尤其是目前电脑硬体的机能还在启蒙阶段,一般说来,现有的软件占有的空间太大,而且速度太慢,故效率不高。正当这个关头,软件所扮演的角色,可以说是举足轻重,效率自然不能忽视了。
                由于软件界还没有注意到这一点,有识之士可以想见,只要能掌握住效率价值,就可以出人头地。

        1-4 累进价值=效率价值×使用频率×软件生命期
                硬体是消耗品,用到一定的时限后,就失去了再利用的价值。而软体则永远没有损耗,除非应用观念的改变,其实用的价值如常。
                不仅如此,应用观念虽然会改变,只要软件是由模组结合而成,其中的共用模组永远不变。略作适当的修改,或再增加功能后,又面貌一新。
                这种共用模组就具有累进价值,也就是说,用模组方式制作的软件,只要分割适当,就应具有累进价值。凡是有累进价值的程式,其边际效益最高。因此品质的要求也相对加高。如上面公式所表示的,累进价值等于该程式本身的效率,以及在不断累积使用下频率和生命期的乘积。只有基于组合语言的高效率,才可能产生这种价值。
            在资讯时代,程式师必须认识软件的重要性及其所具有的价值,才能充份发挥。
      2,程式师应有的态度:
        自动自发,谦虚学习,掌握重点,认真负责,追求完美

            写程式完全是脑力活动,除非是行家,程式师是否真是在工作,别人很难从外表上看出来。同时,如果程式师不是自动自发,对工作无热忱,甚至心存歧见,则不可能把程式写好。
              自动自发是指发自内心的原动力,且不论是基于名、利、个人成就感或是好奇、赌气、逞强,只要有了这种动力,问题没解决,就会形成悬疑,不断地萦绕脑际,难以休息,直到解决为止。
            但是,人的智力相去甚远,经验亦各自不同。姑不论个人的才智,在解决问题时,集思广益,虚怀若谷,必然是最有效、最正确的态度。
            问题在于,越是执着、好强,或者自卑自傲的人,其自我观念越重。遇事即采惯性行事,而且坚持不变,这种人不可能谦虚,更无法学习。
            就像艺术家一样,不参考他人的作品,不学习新的技巧及观念,固步自封,则难成大师。如果程式师不能谦虚学习,不随着时代的变化成长,创作出来的程式,其价值可想而知的。
            天下英才比比皆是,然而出类拔萃的人却不多。究其因,在学习、思考时,当是原则重于细节,然而在执行的过程中,却是细节重于原则。此外,事物变化的组合无穷无尽,主事者必须能针对目标,随时根据实际状况,逐步处理。
            在各种状况中,如若程式师不能掌握当前的重点,则凡事皆如有千头万绪,难以下手。事实上,从成事败事的观点来看,人只有两种,有能力者,是把复杂的事简化;无能力者,经常把简单的事变得复杂无比。而这种能力的差异,就在于能否掌握当前的重点。
            观念清楚了,就看当事人是否能认真负责,坚持贯彻到底。人间世事成败,完全基于这种态度。不认真,工作时草草了事,不可能有好的成绩;不负责更糟,没有问题也会产生问题,发生问题后,更是无人解决;若参与工作的人多,彼此推卸责任,这样做人处世必将失败,程式制作亦然。
            所谓认真负责,具体说来,即是在事先要彻底瞭解该做什么?要做什么?以及如何去做?工作时要考虑怎样做最有效率?每一步骤会产生什么结果?而工作完成后要彻底检查,目标是否已达成?能否再加以改进?
            最后,是对程式的品质及技巧的完美性,应锲而不舍地追求。一般人常把完美当作不必要的奢侈,其实不然,完美是一种永远无法达到的理想。重要的观点是,人只有在追求完美的过程中,才能不断地进步、升华。一个人若没有理想,就与动物无异,一个程式师若没有理想,套句爱因斯坦的名言,不过是只「训练有素」的小狗罢了。
            态度来自习惯,习惯则来自于学习及锻炼,有志向上者,应该自我要求,努力学习。等到锻炼久了,习惯成自然,有了良好的态度,终有成为大师的一天。

      3,软件开发的原则:
        分工合作,量材施用,慎重计划,严格执行,市场导向

            此处所说的软件开发,是指具有相当规模的程式,需要多数人员共同工作者。人多固然力量大,但是人与人的相处和沟通,问题也特别多。若处理得好,力量是正值,反之,则为负值。不仅彼此的力量相互抵消,有时还有不良的后果。
            软件开发,应该有一个主事的重心人物,如果要谈民主,不妨去搞政治。负责人首先要对工作内容详加分判,然后根据性质分配工作。分配时应注意工作量、时间要求、个人特性及相互的配合等因素,责任要划清,交待要明确,俾能集中众人力量,分工合作。
            成事在人,如果用对了人,则成功在望。每个人都有其独特的个性、能力及态度,适合于不同性质的工作和方法。所以应事先瞭解每个程式师的个性、能力及缺点,再行分配适合的工作。
            不仅分配工作时要度量才干,管理时亦然,人不是机器,不可能绝对适应同一种工作方式。但是,若每个人以他自己适应的方式工作,对整体而言,又有步骤不一、难以相互配合的弊病。
            比较理想的解决方式,是对参与工作的人员,施以再教育,使之习惯于一种统一的方式,藉着训练的过程,也可增进对每个工作人员的认识瞭解。
            再就是工作计划,将工作分成几个阶段,并配合人员的分工及设备器材的条件,逐步实施之。
            工作计划相当于建筑蓝图,一旦确定了就难以修改。一个完整周详的计划,应包括了工作目标,人员分配,时间进度,执行细则,沟通方式,解决问题的程序等。
            有了计划,还要有监督执行的专责人员。这种人才必须有足够的经验,对全部计划能瞭解透彻,有敏锐的判断力,并敢于担当。工作时执行要严格,待人要宽厚,处理事务要果断。
            最后一项原则,才是真正的成败关键,那就是,产品要以市场需求为导向。不能符合使用者需求的产品,一定「没有用」,没有用的产品,则不具备任何价值。
            要测试产品是否「有用」,其实很简单,以程式师为例,如果自己都不愿采用,显然是用处不大。有人会说,程式师又不是使用者,在没有必要时,再好的产品都不肯用。这话并不尽然,人喜爱美好的、尤其是与自我有关的事物。如果程式真有用,制作的程式师一定会想尽方法去    玩赏、测试,而且乐此不疲。
            同理,程式师只有当自己不断的试用后,才会发现实际应用上,所可能面临的问题。而当问题解决以后,用得方便,有了实际效益,市场才有可能接受。

      4,工作环境的建立:

        环境安静,资料齐全,消息流通,压力合宜

            从事软件工作的人,可以说就是一个艺术家,艺术需要注入心智,需要个人无保留地投入。在这种情形下,环境相当重要,必须事先安排妥当。
            环境的物质条件并不重要,但是安静、卫生,却关系着艺术家心理及生理上的平衡。喧哗、吵闹会令人心烦意乱,难以专心。对艺术家而言,不能专心,就毫无创造佳作的可能性。当然,若只把软体发展视作生产线上的生产工作,那就不在话下了。
            程式是运用资料、处理资料的工具,写程式最怕的是资料不全,因为缺乏一点必须具备的资料,而使得整个计划受阻,是最可惜的事。同时,程式本身也是一种广义的资料,尤其是一些软件开发所必须的工具,都应事先准备齐全。
            由于电脑发展日新月异,新观念、技术层出不穷,资料永远难以收集完整。所以消息的流通性非常重要,在一个闭塞的环境里,埋头苦干的结果往往会落在别人的后面而尚不自觉。更何况世界各国从事电脑工作者多不胜数,他山之石可以攻错,消息的流通常可使软件工作者节省大量的心力。
            最后是工作的压力,为了效率,压力要大;但站在人的立场,不论身、心,实在是经不住长期或太大的压力。所以,如何求取一个合宜的折衷点,是不容忽视的。
            以我的经验,一般人受年龄、经验、动机及意志力等的影响,承受压力的能力,不一而同。大概说来,年轻、初学者,在适当的动机下,能够承担长达三至五年、持续性的重大压力;有经验、年龄稍长,除非有极强的动机,再加上坚定的意志,才能维持下去。
            软件开发需要劳心劳力,艺术创作则更需要坚持执着的毅力,技术有方法、有步骤,一定可以实现。艺术则要有观念、有创意,加上心智的投注。两者融合,观念由大处着眼,技术由细部着手,是则,理想终将成为事实。
    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.