奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 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 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> 汇编 >> 汇编语言---程式设计 (2)
程序开发
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语法参考

  • 汇编语言---程式设计 (2)
    字体:

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

    汇编语言---程式设计 (2):四、模组分割

        既然称为模组,本不存在分割与否的问题。如果一个程式师一开始就具备模组的观念,彻底瞭解其性质,当然知道如何设计,自然就没有分割的必要。即令如此,在程式的制作过程中,经常是信马游缰,想到哪,写到哪。所以,养成模组分割的观念,对实际工作上,自有其必然的功效。
        模组分割的原因不定,大约可分下列数种:
      1,为了制作的方便,把程式分成模组,易于维护。
      2,为了工作效率,或需要速度、或为节省空间的程式,分别用不同的技巧制作。
      3,因程式师的工作能力,或工作条件而进行分割。
      4,因程式的功能分类,分开制作,以便于灵活应用。
        不论原因为何,分割模组前,一定要先确定目标,全面认知程式的格局,再加以整理、归类,才能根据类别来分割。
        分类确定后,再以分类来命名,以便于记忆及应用。这时格式的统一定义便是关键所在。因为模组一多,相互间的调用极为频繁,如果格式不能统一,程式间常常需要因应调整,反而增加了使用上的难度,得不偿失。
        其次,各模组必须建立一个总表,而且要经常维护,务必与实际上所使用者一一对应,切勿偷懒。每次调用时,还需修正记录,如使用次数,调用的程式等。
        如果程式制作的规模大,参与人数多,最理想是由专人负责模组管理。从事这种工作的人,必须头脑清楚,反应敏锐,而且要能任劳任怨,勤于更新。
        在做模组分割前,应先备妥 .ref 及 .lst 档,设有一程式 abcd.asm ,其做法为:
        C:>M ABCD,,,;
        m 为汇编程式,即 masm.exe 之简化名,请参见第二章第二节。其后之“,,,;”表示需要 .obj,.lst和 .crf三个档,而且不必显示在萤幕上。
        汇编完成后,再用 cref.exe 生成 abcd.ref 如下:
        C:>CREF ABCD;
        这时,将 abcd.lst 及 abcd.ref 印出,相互对照,先将程式精简、整理,再行分割。
      1,在 abcd.ref 档中,每个「标题」都来自 abcd.lst 档,标题之后,有若干组数字,其中带#者,表示标题出处,余者为调用之处。若仅有来处,而无调用处,则此标题可删除。再如标题前之指令为 jmp 或 ret ,则此标题所代表的程式毫无用处,亦应删除之。

      2,如 abcd.lst 档中有 nop指令,除非是有意安排者,否则亦应删除。如在 jmp xxxx 之后,可将之改为 jmp short    xxxx 。
        若 XXXX 之前无连接的程式,亦可将之合并。此外,凡指令 CALL 所调用的子程式,如仅调用一次,最好将此段子程式合并在程式内,或附属于其后,以便于分辨。

      3,程式精简及合并后,再行检查各段程式,凡功能独立者,应先分割。分割后,再检查其中是否调用其他子程式,如有,应先记录下来,此段程式即可视为「功能模组」。

      4,凡前述功能模组中调用的子程式,如仅供该模组调用,则可附在该模组后,否则应置于「共用模组」中。

      5,但凡程式之「主流程」,大多属「应用模组」。此类应用模组极难分割,也无分割的必要。

      6,分割完毕后,应详细注记,以便备用。

    五、模组特性

        所谓模组特性,是指各个模组在设计或分割之初所考虑的因素。特性包括了功能,效率的特别要求以及使用时应行注意的重点等有关模组的细节。
        不论模组设计的目标为何,既然有了模组,就应该高度发挥其应有的效率。各个模组之分割,皆有其必然因素,不论是为了功能,或是为了制作方便,目的都在追求效率。而每个模组皆有其特性,要达到效率要求,应先瞭解模组的特性。
        下面以前节所举的中文系统为例,将其中各个模组的特性一一详细分析如下:
        【模组一】:中文处理的系统模组-功能模组
          1,键盘中断:因为人输入的速度远逊于电脑处理速度,所以,本中断程式应该以节省空间为主。此外,键盘的应用,以灵活达变为重点,宜多采用「建表」法,便于修改、变更。

          2,显示中断:显示速度非常重要,本模组应牺牲空间以争取时效。此外,显示的弹性要大,凡字符的大小、位置、属性等,都应该一次考虑清楚。
            目前显示器的规格很多,彼此互不相容,一般多在程式载入前,先作安排。在本模组中,尤其应该注意不同的显示程式,如何兼顾速度的运行。

          3,列印中断:列印也面临不同的机种介面问题,但因不涉及速度,其技巧完全属于设定及载入方面。

          4,通讯中断:通讯所需考虑的,是如何保证在资料传输过程中的安全、正确及保密。

        【模组二】:中文内码模组-辅助模组
          因为仓颉码可以组出既有的,以及排列组合上可能产生的中文字,照理应该不受内码的限制。但是仓颉输入码之长度不定,为了电脑的处理效率,我们采用了四字元内码,每一字元的最高位元设置为1 ,以与英文字符有别。
          内码的转换也应考虑速度,而且要能双向转换,程式制作不难,但处理的技巧也不低。

        【模组三】:中文字形结构模组-介面模组
          贮存中文基本字形结构,根据输入的仓颉码,得到文字结构的基本讯息,以之组成字形。
          中文字数极多,字形结构的规划是成败的关键,只要每个字形多加几个字元,空间就会恶性膨胀。
          本模组采用多层结构的技巧,其中子模组甚多,空间及速度兼顾,才能在极小的空间中,完成大量字形输输出,而且变化灵活,完全拜模组分割之助。

        【模组四】:字形分析模组-辅助模组
          举凡字形大小、种类、笔形的变化及位置等,皆在本模组中完成。
          字形分析以变化多为目的,故本模组主要功能在处理变数,应该妥善安排各缓冲器,以达到效率要求。

        【模组五】:英文字形模组-功能模组
          英文字形与中文有异,所以另成一模组。其字数较中文为少,但却不具备任意组合的功能。

        【模组六】:绘图模组-功能模组
          这段程式是字形产生器的核心,当得到模组四、五的资料以后,要以高速将字形绘出。
          绘图程式的关键在计算,计算虽然是电脑的原始功能,如果不另外加上「辅助计算器」,电脑的运算效率就大为降低。
          一般说来,仅在萤幕上绘图,或做字形绘制时,其范围有限,且可以预知,故可采用「对照表」或快速运算法,换取显示效率。在列印输出时,则可采高精度运算方式。

        【模组七】:各种介面-应用模组
          介面即为介于两个模组,或两个独立的系统间的机构,在大型模组工程中,介面之良窳,是使用效率的关键所在。
          介面是各个模组得以顺利配合的重要程式,只要瞭解介面的结构,便可以轻易地与原程式沟通。

    六、模组调用

        模组的先决条件是要能灵活调用,否则就失去了其设计的意义。而且模组的目的之一,是为了提供给其他程式师,作二次开发用。所以调用的方法,至关重要,必须面面俱到。
        调用的方法很多,为了兼顾多方面的效应,我主张利用系统程式的中断处理。这样做的好处是,系统设计者不必考虑模组的设置,应用的程式师也无须担心入口的位置,直接以参数调用即可。更有利的一点,则是可以在空间不足时,利用覆盖的技术,灵活调用贮存在磁盘中的其他模组。
        「中断」是系统所提供的公用介面,其唯一的缺点是执行效率较差,但应用的程式师可以将中断所提供的位址,移到自己的缓冲区内,代之以长距离的调用,即可改进之。
        以下且以中文字形产生器应用介面为例,说明模组调用方法。本字形产生器提供见诸字典、文献之有效汉字六万余,仓颉输入法所可能组合产生的「新字码」约近六百万字,在本字形产生器中皆有相应之字形。
        除了字数外,字级由1*1 至 128*128,无级次变化。字体在目前仅提供明体、黑体、圆体及长、扁宋等,其横直粗细比值由1至8点,上限为直粗的十二分之一。字形变化有空心、斜体及十种填花体、横向粗细变化体等。
        至于繁体、简体字形或 ASCII字符,也可由使用者自选。
        



        第二种方法,则是提供模组的目标码 (.obj ),由应用程式师自行联接成执行档。这种做法,每个程式相互独立,兼容性不高,通用性也不强,如果同时想应用多个程式,则需要极大的系统空间。
        小型且专用性极强的应用程式,适用这种方法。但模组一旦与应用程式联接后,就很难再灵活应用。

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.