为什么要学习汇编语言?

  编者注:该文章非编者原创,是台湾宏基公司 "仓颉输入法" 的作者朱邦复所写.

一、结构基础

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

二、个人体验

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

三、利人与利己

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