4 段的基本属性
在通常情况下,一个复杂的应用程序会由若干个模块组成,一个模块又会含有多个段。而不同模块的段之间、同一模块的段之间往往存在某种联系,这种联系就要体现在段属性的说明上。
段定义的一般格式如下:
段名 SEGMENT [对齐类型] [组合类型] [类别]
…
段名 ENDS
段属性“对齐类型”、“组合类型”和“类别”要按此顺序说明,但这些可选项可根据需要选择书写。如果源程序中不指定某个属性,那么,汇编程序将使用该属性的缺省值。
程序中的段名可以是唯一的,也可以与其它段同名。在同一模块中,如果有二个段同名,则后者被认为是前段的后续,这样,它们就属同一段。
当同一模块出现二个同名段时,则后者的可选项属性要么与前者相同,要么不写其属性而选用前者的段属性。
例,同段名的作用:
DATA1 SEGMENT ;第一个数据段
MSG DB "Hello, "
DATA1 ENDS
CODE1 SEGMENT ;第一个代码段
ASSUME CS:CODE1, DS:DATA1
START: MOV AX, DATA1
MOV DS, AX
MOV DX, offset MSG
MOV AH, 9
INT 21H
CODE1 ENDS
DATA1 SEGMENT ;第二个数据段
DB "World.$"
DATA1 ENDS
CODE1 SEGMENT ;第二个代码段
MOV AX, 4C00H
INT 21H
CODE1 ENDS
END START
END
在上面的例子中,第二个数据段是第一个数据段的后续,汇编程序把它们是合二为一,上述的代码段也如此。
下面,详细说明段属性的含义及其作用。
4.1 对齐类型
对齐类型表示当前段对起始地址的要求,连接程序(LINK.EXE)按下表的地址格式来定位段的起始地址。在进行段定位时,会根据其定位类型进行定位的,所以,各段之间就