组 合 语 言 之 艺 术(二)(7) 资料段 (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..' 不论其错误提示内容如何,此种错误的发生,多半是因为段与段之间的标题、缓冲器或是暂存器的使用发生了混淆,联接程式得不到正确的信息所致。