ITEEDU

6.4.3 简化段段名的引用

当使用简化的段定义时,一般情况下,程序员可以不知道这些段的段名、段地址堆齐类型和组合类型等。但当把简化定义的段和标准定义的段混合使用时,就需要知道简化定义段的基本属性。表6.3是在小模式下段的基本属性对应表。

表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。

  • .STARTUP——在代码段的开始,用于自动初始化寄存器DS、SS和SP;
  • .EXIT——用于结束程序的运行,它等价于下列二条语句:
 MOV AH, 4CH 
 INT  21h

当使用汇编程序TASM时,以上二条伪指令分别改为:STARTUPCODE和EXITCODE。假设使用汇编程序MASM,那么,例6.15可改写成例6.16的形式。

例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