组合语言之艺术
第二节 系统分析

  所谓系统分析,即为有系统、有规则地去分析「对象」,以计算机术语而言,对象
指的是所使用的硬件及软件。
    系统是一系列有组织且统属的整体,从宏观角度来看,系统所涵盖的有:
  1,目的:
 任何一种系统,必然有一个特定的目的,如果不能对其目的先作分析,甚至于不知道目
的为何,又怎能发挥系统的功能?
  2,结构:
 系统之组成,是基于其特殊结构,也可以说是组件、部件或或部门,端视其系统特性而
定。了解结构,分析结构的性质,再配合各种条件,才能达到目的。
  3,效应:
 效应指预期的结果,系统分析的意义是为了实现,唯有透过对目的的认识,对结构的了
解,才能设计出方案。可是这种方案所产生的效应,如不能料于机先,又怎知是否符合
理想?
    同时,系统分析还有另一层意义,天下所有的事都是相互的,单一的系统没有分析
的可能与必要。比如说分析一部汽车而不理会其行经的路况,不顾使用的条件、油料、
配件、人员素养等因素。则我们可以断言,这种分析的结果,除了提供参考外,毫无实
用价值。
    在计算机上亦不例外,计算机术语上的系统分析,概指对硬件机种的性质、设备以
及使用者的需求范围等的分析、了解和设计而言。在下面我们将对这些一一进行分析。
一、硬件机种
    以 IBM PC/AT作为发展对象,本来不必讨论其硬件机种。只是,站在系统分析的立
场,则不能不加以说明,因为这是系统分析必要的步骤之一。
    根据市场分析,国内 IBM及与其兼容的微电脑几乎占 80%以上,中文系统是特为国
人发展的,而且是种「附属程序」。以目前的形势看来,可以说是别无他途。
    既然决定了系统,进一步是探讨系统的规格。
    硬件系统的规格,不妨参考随机而来的手册或说明书,数据越齐全,对工作越方便。
尤其是「程序员手册」(Programm-er's Manual)更是必备,应事先收集妥当,随时可以
取用。
    有了硬件的规格数据,再看哪些与程序本身有关,摘录下来,一条一条地比对,直
到全部有了答案,机体的系统分析才算完成。
    兹以一、所述的任务为目标,并假定使用的机种为 IBM的AT 兼容机。
    其相关的规格有:
    系统内存   640KB
    硬磁盘   20 MB
    软磁盘   360KB
    屏幕显示卡   Hercules Graphic Card
    键盘   101键,型号 CSK-1101
    操作系统   DOS 3.3 版本
    其它外围无关宏旨,从略。
    此外,为了应用中文,假定采用了"聚珍整合系统",本系统程序包括所有中
文字形及七大应用软件,占 440KB。
    作为一个系统,使用者能支配的空间越大越好,既然要用中文,而中文系统程序又
是一种附属程序,难免就会占用部份空间。
    因此,要想使中文的应用功能不弱于原系统,必须非常有效地利用时间及空间。既
然已经用了 440KB,千万不要再多事浪费。
    有些中文系统的设计,是把中文字形存贮在硬磁盘中,从表面上看来,空间并没有
浪费多少。但是不要忘了,硬盘的读写次数有其极限,如果每个中文字要读取一次,大
概不到半年的时间,硬盘就会损坏。不仅如此,这种方法速度很慢,用起来也不方便。
    有些设计为了避免上述的缺点,便以扩充存贮器的办法,先将「常用字」装入扩充
区内。这样速度加快了,硬盘的损耗也减低了,可是成本却大大增加。也有人认为,硬
件在不断改进,光盘问世后,容量不再是问题,何必多虑?
    软件工程师的责任,是要在自己的技术能力上,发挥最大的边际效益。不论硬件是
否能够改进,都应该不辞辛劳,努力将程序写好。一方面当目前硬件尚不够理想时,效
率高的软件有立足之地,即使未来硬件改进了,优良的软件仍然占有高效率的优势。
    当今计算机的应用观念尚未充份发挥,似乎光盘的容量大得超过我们的想象。可是,
在未来的计算机时代,才真是「寸土寸金」,分秒必争的关头。尤其是一旦计算机成为
普遍使用的「大众化产品」后,成本之高低将决定产品的成败。中国本来就贫穷,需要
的计算机数量又多,能节省一分钱,对整个市场说来,就是一笔天文数字。更何况硬件
技术越进步,计算机的体积越缩小,笔记型、口袋型计算机相继问世,其所面临的储存
问题并不是光盘能解决的。
    假如真能因为多花一点钱,一劳永逸地解决了问题,倒也值得,事实上却不然。文
字是民族、文化的根本,收字不足将形成「残缺文化」。同时,计算机技术在进步,使
用者的需求也跟着增加,私人用的排版软件以及「窗口」的方兴未艾,中文还能梦想徒
以增加存贮器的方式去与拼音文字竞争吗?
    那么,有没有其它的办法,用少量的空间,一次解决中文字形的困境呢?
    所谓中文系统分析,就是要针对这类问题,提出正确的答案。最理想的答案,就是
用事实来证明,我们已经完成了全部中文字形的字库,共收能见诸字典的「有效字」六
万余,且能组合出符合仓颉输入法的字形「六百万」个!不仅如此,每个字的大小、长
宽级次不限,(即所谓「无级次放大」)字型、字体也无限!而这些功能,仅用了 260
KB的空间,每秒钟可组字 500至1000个!
    我们还在努力改进,几十年的苦工算不了什么,只要我们还有余力,只要能保中国
文化源远流长,这一切都是值得的。
    前面所提到的任务,正是这些技术之一,因为其范围小,不涉及文字的专门知识,
所以特地摘取作为分析的例证,以供有心人士参考。
    因为我们能用 440KB完成任务,20MB的硬盘就可以完全由使用者支配了。反过来说,
如果我们的中文字形要占用20MB硬盘,对客户而言,等于没有硬盘可用。于是,除了改
变系统的规格,便得宣告该系统无法设计。
    能不能使用软磁盘来存放字形呢?显然也行不通,软磁盘的读取速度慢,容量也嫌
小,一般只用来做数据转换。
    至于 Hercules 图形板,只是显示模块的一小段程序,我们提示在此,是因为这种
显示板很适合中文系统。
    键盘是一项经常被系统分析所忽略的组件,我个人过去就如此,这次特别提出,并
在下文中详细说明。
二、原则
    由前面任务已知有一种编码,能利用仓颉码特色,加入所有的表格符号,现在要找
出一种有效率的设计及应用方式。
    谁都知道在计算机作业过程上,产生功率最直接的步骤是机器码。而汇编语言就是
机器码的界面,根据效率定律一,汇编语言的作业效率最高。
    任务前面已经详细说明,效率的要求非常高,因此,我们决定利用汇编语言作为基
本工具。
    再看效率定律二,生产成本的效益,取决于工作时间及损耗。如果采用汇编语言写
作,能不能在时间上有所改进?我们可以用事实证明,只要受过良好的训练,掌握了所
有的技术,而且一切工具准备齐全,用汇编语言写作所需要的时间,绝对不会比高级语
言多。
    根据效率定律三,要达到应用方便的目标,在于功能的累进。不论将来硬件多进步,
人类对其速度及容量的要求永远不会满足。采用汇编语言只是第一步,举凡模块、界面
等结合的技巧,及「整合」的观念,都有待大家努力去研究、开发。
三、工作性质
    在谈到实际工作前,我们先说明一下中文系统。有人认为此为一系统程序,但我个
人认为不如称之为附属程序。附属程序是一种环境,透过这种环境,可以增加中文的功
能。因此,这种程序一定要驻留在系统中,而且,要改变原系统程序的中断程序地址。
    所有的附属程序都需要一种「界面」,我们的工作自不例外。此处首先根据工作的
性质,将所需的界面列举如下:
    1,初始化系统图形态。
    2,检查系统使用空间,决定是否能够执行。
    3,检查和安排所有必要的参数值。
    4,改变必要的中断入口地址。
    5,申请程序的驻留,并回到系统。
    在中文系统上,改变最大的首推图形字符显示INT 10H和打印INT 17H,其次是键盘
处理INT 16H,和利用时序中断 INT 1CH 作为图形游标。这些本属系统功能,加以修改
后,成为新的中断入口,在此仍称之为系统程序。
    我们过去曾犯了一个很大的错误,为了想全面控制系统的功能,在改键盘中断程序
时,把 INT 9H 也改了。原因在于对系统分析不够彻底,以致对该段程序的了解有了偏
差。
    INT 9H是在键盘输入后,每键产生两个字符的讯号,分别称为:「扫瞄码」(Scan
Code) 及「字符码」(ASCII Code)。早期的机种,其键数不多,字符码完全符合 ASCII
  的规定,即最高位的位保持为0。
    中文系统之所以能与若干英文软件兼容,就是利用该最高位做分辨。我们当时误认
为字符码不可能再改变,所以在写INT 9H时,该位并未一一检查。不料新键盘的键数增
加了,由于字符码不够,新加的「页控制键」,即键盘右中一列、键色较深的一区,其
字符码皆为0E0H,亦即其高位不为0。这一来,在中文系统下,一碰到那些键,就被当
作中文,事实上却又非中文码,因而天下大乱。
    但是,在经过IBM BIOS的处理后,INT 16H 所得到的值却不然。那是为了与以往的
系统兼容,把高位的位放到一个缓冲器里去了。如果我们不改 INT 9H ,就不会有任何
问题,而改了以后,又没有注意到这种情况,以致产品性能极不稳定,为人所诟病。
    因为程序本身非常简单,界面解决以后,就只是程序的安排了。
四、相关问题
    再来看看我们的工作还有什么应该注意的,除了程序本身的制作外,还要把前述的
编码放到"聚珍整合系统"中。该系统的规格,请参考2聚珍整合系统操作手册。
    我们已再三强调,表格之加入,一定要精简,否则喧宾夺主,就不值得了。
    这104 种图形如果用点阵来画,共需 21,632B,竟占了系统空间的百分之廿。这还
不说,点阵不能放大缩小,就无法供绘图、排版用。
    于是决定了第一个原则,这些形状必须用程序绘制而不是存点阵数据,而且程序越
小越好。
    由于中文系统已经是图形态,且具备多种功能,所以不必再写绘图的程序,只要将
输入码转换成该程序可以接受的数据结构即可。
    "聚珍整合系统"内表格的制作,与下面所举的例子差异不大。为便于说明,
在此以早期另一中文系统的表格符为例,使用的技术虽不成熟,但较为简洁。
    当时所定的结构,是以寄存器的性质为本,规格如下:
    AX=图形指令,如:横、直、斜、捺、点以及卅多种复杂的字形
    BX=X1,X2
    DX=Y1,Y2
    SI= 指令贮存区起始地址
    DI= 图形点阵贮存区起始地址
    因此,只要数据结构符合,就可以运用原有的子程序。
    第二个原则也因之决定,本程序应纳入原组字程序中,作为其中一个模块。
    第三个原则,是在内码及数据表中,要增加一组表格码的数据。这并不难办到,因
为 YYX后没有其它有效的中文字码,所以不会妨碍中文字码的排序。
    凡是涉及编码的作业,千万不可忽略排序的功能。对系统分析来说,排序的功能是
数据处理上,有关效率的重要手段。例如有个人口达一百万的都市,这一百万人的各种
数据,都需要极为昂贵的计算机来处理。假定排序的功能良好,每天能够准时完成其固
定的工作,而且排序的结果能令人一目了然,我们可以认定其效率正常。
    再假设文字数据并不具备排序的功能,或者说其排序的结果,与使用者的观念无法
配合,则计算机所处理的数据就等于废物。再若为了要用这些数据,须要用「对照表」
的方式,重新排序,那么又要一倍以上的时间,也可以说还要耗费钜资增购一套计算机。
    问题还没有解决,人所能接受的「文字序列」倒底又是什么呢?中文本身并不具备
序列观念,这才是中文处理效率不足的,最严重的症结所在! 仅以字典为例,国人查字
典时每个字要多久时间?一个「一」字,有多少同音字?如果有一个字,不知其正确读
音,又该怎样去查?再问下去,恐怕能回答的人不多了,就是包括大学生以及学有专长
的知识分子在内,到底能正确地读出多少音?我不讳言自己的无知,对我而言,只有三
千个。
    我承认当年研究仓颉输入码时,采用了拼音字母的排序优点。任何人只要能够正确
地输入,就能与拼音文字一般快速地在经过排序的数据中,找到该中文字的位置。
    目前中文计算机的发展还在字码输入,及字形显示中留连徘徊,但是,从事这项工
作的人,有几个曾认真地考虑过这些问题?有几个真正了解系统分析的要求?所以,我
期望读者们能够不贪急功,不求近利,扎扎实实地先把各种问题考虑清楚,然后再一步
一步地研究解决之。

上一页    下一页