组合语言之艺术
第一节 系统

一、系统之选择

    只因真正了解计算机的人太少,迷信名气的结果,使得 IBM PC/AT占有了市场。为
求计算机普及应用,我们唯有因陋就简,针对 IBM PC/AT及其兼容系统,作进一步的分
析和说明。
    尽管使用 80486 CPU的微电脑已问世,我个人认为以其造价及功能而言,并不符合
效率法则。在从事艺术工作的立场,价值的高低,与所采用的材料没有绝对的关系。更
何况我们正要证明,利用汇编语言的制作技巧,能够使功能不高的微电脑发挥最大的边
际效益。故本书仅以8088 CPU指令为研讨对象,至于程序应用在什么机型,就不在本书
的考虑范围内了。

二、目录及磁盘

    假定读者为有经验的程序员,且计算机为 IBM PC/XT/AT。 则在着手制作程序之初,
应该先将系统准备妥当。即所谓「工欲善其事,必先利其器」,如果未能注意到下面所
提的细节,仅仅制作一、两个程序尚可应付。待工作量一大,程序渐渐增多,不是某些
程序找不到,就是找到了也不能一目了然。结果是心烦意躁,马马虎虎,另外再写一个,
勉强应付了事。
    硬盘空间较大,应行注意的事相对的也较多。首先应妥善规划好目录及子目录的分
类及应用方式,否则每当要找一个档案时,往往有大海捞针之叹。再不然,在修改程序
时,如果将不同的版本放在一起,一定会张冠李戴,错误百出。
    每位程序员都应该有自己的目录,而且每个不同的整套档案都应有不同的子目录,
这样方能明确的分辨以及应用。而最有效率的方法是,在每一子目录中,档案数不宜太
多,且仅存放在同一工作项目下所需要的程序。
    一旦硬盘坏了,所有贮存数据均将付诸流水。为了安全,一定要用软磁盘备份。最
好每天复制一次,虽然每次复制,相当麻烦,但是万一程序被毁坏,那种损失是无从估
计的。
    最好的方法,是制作一个专门复制的工具,一般用 .BAT 应用程序,每天工作完毕,
只要执行一次即可。

三、应用工具

    程序写作是为了控制计算机运作,应用工具则是将程序员的观念和理解转化为能够
连续执行的指令。因此,市面上的应用工具虽多,却不见得对程序的写作有所助益。下
面列了几种,只要运用纯熟,绝对够用了。

    程序写作:EDLIN ,PE II,WS等。

    程序编译:MASM.EXE
         早期 (1.25) 版本容许较多的「外界标题」,即External Label,但该
版本仅限用于8088指令,较宜大型程序处理。
         4.0 以前的版本,于档案开始时,可用.XCREF以产生标题及缓冲器的地
址对照表。但后期的版本会发生错误,不能再用。

    程序联接:LINK.EXE
         早期的版本对 SEGMENT  PUBLIC 'xxxx' 有些规定,但 3.0以后,除
了对CODE及 DATA 有效外,其它如 BYTE 及 WORD 等皆无作用。

    程序侦错:DEBUG.EXE 或 SYMDEB.EXE 及 MAPSYM.EXE
         后两者为套件,必须另购。其优点为在侦错过程中,可以使用原程序中
的标题名称,且可设「断点」等,侦错方便,功能较强。

    系统处理:PCTOOLS.EXE 是 DOS下很有用的工具,可以作档案管理,也可用来直接
修改程序机器码。此外,连机时可以用LL.EXE 或XTALK.EXE等。尤其是系统程序的侦错,
经常需要用联机的方式,以另一台微电脑作为监视器。

    这些工具应统一放在 \DOS 子目录中,且须在系统之自动执行程序(AUTOEXEC.BAT)
里,先设妥优先信道(PATH)如:

    1:PATH=\DOS;
    是则,不论在哪一个子目录中,前述之工具皆可使用。

四、简化名称

    前述各种工具,在程序侦错过程中使用频繁,为了应用上的方便,如果能少输入一
些字符,不仅节省时间,且可避免错误。令用者在惯性反应下,得以集中精神,思考其
它细节。
    简化名称是最简单的方法,最好只用一个字母,由于长度相等,其后面的档案名称,
就可以利用系统所提供的"F3"「复制上行」功能,不必再行输入。

    是以:EDLIN.COM 改为 E.COM
       MASM.EXE  改为 M.EXE
       LINK.EXE  改为 L.EXE
       DEBUG.EXE 改为 D.EXE
       SYMDEB.EXE 改为 S.EXE
    例如:在完成一个程序后,若要汇编,只要改第一个字母即可。
       C:\>E MYFILE.ASM ( 原来在系统中输入的字符 )
    此时仅输入"M",再按"F3"键,立即变为:
       C:\>M MYFILE.ASM
    此外,如不需 .LST 等档案,则再加一";"即可。
       C:\>M MYFILE.ASM;
    "L"及"D"等同样都可依循上面的方法,看来是雕虫小技,但实际上
所节省的时间及精力却不同凡响。

五、参考数据

    除专门性的数据外,程序员应该备妥各种有关输出、入,各种外围设备的参考数据
或手册等,以便随手查阅。
    最重要的是软件参考手册 MS-DOS Software Reference,其中有各种中断命令的使
用规格。唯应注意的,是有一些中断功能与IBM BIOS相同,我建议读者不要使用这些中
断,因其调用过程中,要借道BIOS,会使速度减慢。
    其次为 IBM Programmer's Manual 的BIOS中断规格, 是处理所有外围设备必需的
工具。
    正因为它涉及外围设备,在设计中文系统时,输出入、显示及打印等功能都有待修
改,这本手册更须彻底了解。
    此外还有键盘的输入码表,也是编程必备的数据,本书附录三即为简要的码表介绍。
    如果是编写应用程序,上述的数据已足够应付,但若涉及系统,则尚需了解系统的
记忆空间安排,下表为 IBM微电脑的记忆区结构。各种厂牌设计理念虽有差别,但大同
小异。
    系统段  位  址       机  能  用  途
             ┌──────────────┐
    0000  0000H   │中断调用表         │
             ├──────────────┤
    0000  0500H   │DOS 及系统操作区      │
             ├──────────────┤
    0000  4C00H   │外围控制程序        │
             ├──────────────┤
    0000  5400H   │COMMAND 运用        │
             ├──────────────┤
    0000 0E0A0H   │使用者操作空间       │
             ├──────────────┤
    000A  0000H   │屏幕缓冲区(VGA)       │
             ├──────────────┤
    000B  0000H   │屏幕缓冲区(CGA,EGA)     │
             ├──────────────┤
    000C  0000H   │EMS 存贮器扩充区      │
             ├──────────────┤
    000F  0000H   │ROM BIOS  程序区      │
             └──────────────┘
    上述之系统段,调入段寄存器中时,原来的 000AH应该是0A00H,余同。
    又使用者操作空间的起始点,因各家设计而异。

上一页    下一页