当使用简化的段定义时,一般情况下,程序员可以不知道这些段的段名、段地址堆齐类型和组合类型等。但当把简化定义的段和标准定义的段混合使用时,就需要知道简化定义段的基本属性。表6.3是在小模式下段的基本属性对应表。
伪指令 | 缺省段名 | 对齐类型 | 组合类型 | 类别 | 段组名 |
.CODE | _TEXT | WORD | PUBLIC | 'CODE' | |
.FARDATA | FAR_DATA | PARA | NONE | 'FAR_DATA' | |
.FARDATA? | FAR_BSS | PARA | NONE | 'FAR_BSS' | |
.STACK | STACK | PARA | STACK | 'STACK' | DGROUP |
.DATA | DATA | WORD | PUBLIC | 'DATA' | DGROUP |
.DATA? | BSS | WORD | PUBLIC | 'BSS' | DGROUP |
.CONST | CONST | WORD | PUBLIC | 'CONST' | DGROUP |
在其它存储模型下,由伪指令".CODE"说明的代码段段名在"_TEXT"之前还要加上其模块名(源程序名)。假设,某模块名为ABC,则其缺省的代码段段名就为ABC_TEXT。因此,在这种情况下,程序的模块名或源程序名不要以数字开头。
例6.15 简化段定义的方法
.MODEL?SMALL .STACK?128 .DATA MSG DB "Simplified Segment Directives.$" .CODE MOV AX, @DATA ;取数据段的段值 MOV DS, AX ;把给段寄存器DS赋值 MOV DX, offset MSG MOV AH, 9H INT 21h MOV AX, 4C00H INT 21h END
另外,在汇编程序MASM中,还提供了二组简化的代码伪指令:.STARTUP和.EXIT。
MOV AH, 4CH INT 21h
当使用汇编程序TASM时,以上二条伪指令分别改为:STARTUPCODE和EXITCODE。假设使用汇编程序MASM,那么,例6.15可改写成例6.16的形式。
.MODEL?SMALL .STACK?128 .DATA MSG DB "Simplified Segment Directives.$" .CODE .STARTUP ;自动初始化寄存器DS、SS和SP MOV DX, offset MSG MOV AH, 9H INT 21h .EXIT END