汇编语言的艺术-准备工作(三)

二、目标档侦错及工具

在使用 debug时,因为名称简短,用法也简单。若使用「标题侦错」symdeb.exe则不然,因为首先要生成.map档,测试时,输入文字也较多。对不断使用的人来说,难免嫌烦。简化的方法,是先制作执行档:s.bat 及 sm.bat

s.bat 是专供指定程式侦错用,内容为:
1:symdeb %1.sym %1.exe
这是指已经有了原档的 .map 时,如果程式刚联接完毕,且在联接档中,没有生成 .map 的语句,则应制作 sm.bat 如下:
1:mapsym %1.map
使用「标题侦错」工具有很多优点,其功能较 DEBUG强得多。但是使用者必须注意,需要测试的标题,应该在程式中宣告PUBLIC,否则无法直接跳到该处。
尚有些特殊效果的程式,也应备妥测试的工具,甚至以利用「监视器」的方式,用另外一台电脑来控制。有一些通讯软件,如 xtalk加上symdeb.exe,通过串行埠(serial port )可以联机调试,其手续如次:

1,先在待调程式的主机上输入通讯指令:
C:\>MODE COM1:9600,N,8,1
c:\>symdeb myfile.exe

2,再于已与主机经串行埠联接的副机上输入:
C:\>XTALK
进入指令输入状态,再输入:
C:\>SP
表示设定传输速度,一般多采用9600,但视主机而定。
C:\>9600
最后,输入操作指令:
C:\>GO LO
表示用区域网络,即串行埠口。
这时等待联机成功的讯号,见到萤幕上出现“-”,即可 开始侦错。

3,在主机方面,尚要输入:
C:\>=COM1 ( 或COM2,端视双方的通讯口而定 )

4,至于侦错方式,与利用一台电脑时相同,只是此时在主机上出现的是执行后的结果,而由副机控制侦错步骤。
第三节 分类定义

一、段名(Segment Name)定义

对段名多于一个的程式,最好先有一个定义段的程式,以DRAW为例,假定程式为两段,一为控制程式段,一为绘图程式段。资料分为三段,一为应用资料,一为参考资料,以及制作资料。此外还有一资料索引段,合计有六个段。
兹建议,在通用的基础上,简化段名,将段分类如下:
程式段 (CODE SEGMENT) 定名为 CG
资料段 (DATA SEGMENT) 定名为 DG
索引段 (INDEX SEGMENT)定名为 IG
记忆段 (MEMORY SEGMENT) 名为 MG
特设段 (EXTRA SEGMENT)定名为 EG
堆栈段 (STACK SEGMENT)定名为 SG

当各段超过一组时,则再加数字以区分之。
如在 dr-seg.asm 中,可设为:
1: TITLE SEGMENT DEFINITION OF PROGRAM ‘DRAW’
2: CG1 SEGMENT PUBLIC
3: CG1 ENDS
4: CG2 SEGMENT PUBLIC
5: CG2 ENDS
6: DG1 SEGMENT PUBLIC
7: DG1 ENDS
8: DG2 SEGMENT PUBLIC
9: DG2 ENDS
10: DG3 SEGMENT PUBLIC
11: DG3 ENDS
12: IG SEGMENT PUBLIC
13: IG ENDS
14: END
在 SEGMENT PUBLIC 之后,有多种表示方式:
SEGMENT PUBLIC XXXX
XXXX=CODE 表示为程式段,在联接时,属程式的段与段前后衔接。两段程式之间,以 000H 填充至「节」( 每十六个字元为一「节」 )之首位。
XXXX=DATA 表示资料段,在联接时同上。
如果程式师为了某种原因,必须严格控制程式之位置及长度时,不宜使用上述两种方式。
最简单之陈述方式,即在 SEGMENT PUBLIC之后,保持空白。
XXXX=BYTE 表示程式联接后,各程式之间紧密接合,不留空位。这种方法,有利于程式精简。
XXXX=WORD 表示程式联接后,各程式之间紧密接合,但在后面的程式必然由双数位起。

又如在 XXXX 前后加以引号如:
SEGMENT PUBLIC 'XXXX'
此一宣告,用以通知汇编程式各段的顺序及定义。因此在编写程式时,只要使用的段名及定义与本档相符,不管将各段安排在程式任一位置,都不致发生错误。
‘XXXX’与本段程式的排列顺序有关,在联接时,先将引号中的字串排序妥当,各程式即依此顺序排列之。
也就是说,凡是使用了引号,则程式联接的顺序,即以在引号中字串,于联接时出现先后为顺序。
单一程式档的错误不难测知,但若各段之间发生错误,对经验不足的程式师,将有无从下手之虞,不得不慎!
一般说来,在联接时,最令人头痛的错误讯息为:
'fixup overflow at nnnn..'
不论其错误提示内容如何,此种错误的发生,多半是因为段与段之间的标题、缓冲器或是暂存器的使用发生了混淆,联接程式得不到正确的信息所致。
解决方法是在第一个错误讯息出现时,立刻以‘Ctrl_C’停止汇编,记下第一个讯息,再在原程式中,找到该位置,(多半为一标题位置)在此标题之前,一定会发现与「段」有关的错误。

时间: 2022-11-30

汇编语言的艺术-准备工作(三)的相关文章

汇编语言的艺术-准备工作(五)

第四节 统一格式 一.格式统一之优点 不论采用何种程式语言,凡是共同工作.须相互研讨,或者在同一部门中,分担成败责任者,应该有统一的程式写作方式.这样不仅便于沟通,提高程式的品质,且可避免因某一程式师之离职或出缺所造成的后遗症. 良好的程式,应如一篇美妙的文学作品,其中有技巧,有意境.其功能不仅表现在执行的效率上,也可以作为同行间学习.欣赏的媒介,这些都必须透过统一的格式达成. 尤其是把组合程式写作当作一种艺术创作,就必须经常相互观摩,如果没有共通的格式规定,则这样的程式和「天书」可以说没有多大

汇编语言的艺术-准备工作(一)

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

汇编语言的艺术-准备工作(四)

二.原始档(Source File)档名定义 在共同设计大型模组时,程式师间的默契,全赖事先相互约定.否则程式越大,所面临的困难将越多,经常耗时费事,甚至最后功败垂成. 因此,在设计之初,必须妥善规划,将一应有关的档案.名称.功能等,皆明确地加以定义.参与设计的程式师,更必须严格遵守,方能得心应手. 原始档名的定义,其目的有三: 1,代表程式设计者:当制作的程式甚多时,一见档名,就应能分辨出各个程式的设计人.再如某程式师所编程式在一 个以上,则应在其本人代码之后,加一数字编号.这样,遇有任何问题

汇编语言的艺术-准备工作(二)

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

汇编语言的艺术-观念正误(三)

第二节 组合语言 一.结构基础 物质文明之有今天的成就,是因为人类掌握了物质的基本结构.物质的种类无穷,但是却都由基本元素交互组成,只要根据一定的法则,就能得到一定的结果. 电脑技术虽然日新月异,应用软件的变化也无止无尽,而其基本因子却非常有限.各种微处理器的组合语言,正是电脑软体的基础结构,任何要通过软件以完成的动作,都是经由组合语言的指令群,逐步执行的. 因为电脑结构复杂,各种任务分工极精,即使是一位资深的高级程式师,终其生也不过局限在若干固定的程式中钻研,很难以宏观的立场认知全貌.再加上市

汇编语言的艺术-基本认识(三)

二.程式要条理通顺 1,在比较判断的过程中,邻近值不必连比. CMP AL,0 JE ABCD0 CMP AL,1 JE ABCD1 CMP AL,2 JE ABCD2 .. 应为: CMP AL,1 JNE ABCD0 ABCD1: .. 在标题为ABCD0 中,再作: JA ABCD2 这种做法端视时间效益而定,似此 ABCD1之速度最快. 2,未经慎思的流程: ADD AX,4 ABCD: STOSW ADD AX,4 ADD DI,2 LOOP ABCD .. 稍稍动点脑筋,就好得多了:

汇编语言的艺术-基本认识(一)

第一节 应用工具 一.对程式的认识 写作程式不难,但要写出好程式却不容易.这就好像画图一样,人人都能画,而画出来的图却可能有天壤之别. 想作一个好画家,首先要有观察及分析的能力,面对着杂乱的事物,先整理出头绪,找到主题.再在画布上勾出轮廓,这叫做「布局」.布局完毕,根据实际的环境,决定作图的先后「顺序」.顺序是一种层次观念,景物及色彩都有一定的层次,绝不可随意所之,想到哪里,画到哪里. 观察考虑完毕,即开始准备,先将画笔.调色板等工具放妥,把要表现的主要色彩也调好.最后是选择适当的画笔,蘸上色彩

汇编语言的艺术-观念正误(五)

五.模组的效率 模组并不是一个新观念,在人类文明发展史上,人一直致力于瞭解自己身处的宇宙.这种瞭解,实际上就是模组应用的观念,将宇宙大环境,分解成为人所能认知的小环境,进而将小环境再分解成为个人的经验素材. 这样一层层地分解下去,便有了「概念.知识」.换句话说,概念及知识,就是一个个代表人类对客观认知的模组. 基于模组的特性,人才能灵活地加以应用,因而产生了「人类文明」.同理,当电脑的软件,也演化为模组方式,进一步大量推广运用时,电脑文明的时代,即将到来. 模组的效率是结构性效率的最高表现,在我

汇编语言的艺术-观念正误(四)

三.利人与利己 任何一种商业产品,当然是以利益为先,利己后而利人.如果是艺术品创造,则刚刚相反,唯有能忽视己利,沥血泣心地探索,虔诚狂热地奉献,才会迸发出人性的光辉,创造不朽的杰作. 艺术家之伟大,在于此,人性之可贵,在于此. 对组合程式语言,有人视为商品,将写作技巧当作专利,轻不示人.相信这也是迄今尚无一本像样的参考书籍之根本原因,我买了不少这类书,但书中除了指令介绍以及编程.侦错的手续外,完全没有技巧的说明,好像懂得指令就可以把程式写好一般.当我自己下了不少功夫,得到了一些心得,再回过头来看