汇编语言的艺术之二:准备工作

来源:互联网  作者:本站整理
摘要:汇编语言的艺术:(组合语言的艺术)准备工作第一节 系统一、系统之选择只因真正瞭解电脑的人太少,迷信名气的结果,使得 IBM PC/AT占有了市场。为求电脑普及应用,我们唯有因陋就简,针对 IBM PC/AT及其兼容系统,作进一步的分析和说明……

汇编语言的艺术:(组合语言的艺术)准备工作

第一节 系统

一、系统之选择

只因真正瞭解电脑的人太少,迷信名气的结果,使得 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,余同。

又使用者操作空间的起始点,因各家设计而异。

【相关文章】好搜一下
Window Server 2008新功能介绍

Window Server 2008新功能介

WindowsServer2008是专为强化下一代网络、应用程序和Web服务的功…