灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2666回复:0

简化段段名的

楼主#
更多 发布于:2012-09-10 18:57

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

表6.3 小模式下简化段定义的缺省属性表

伪指令缺省段名对齐类型组合类型类别段组名

.CODE_TEXTwordPUBLIC’CODE’ 

.FARDATAFAR_DATAPARANONE’FAR_DATA’

.FARDATA?FAR_BSSPARANONE’FAR_BSS’ 

.STACKSTACKPARASTACK’STACK’DGROUP

.DATAD

ATAwordPUBLIC’DATA’DGROUP

.DATA?BSSwordPUBLIC’BSS’DGROUP

.CONSTCONSTwordPUBLIC’CONST’DGROUP

在其它存储模型下,由伪指令".CODE"说明的代码段段名在"_TEXT"之前还要加上其模块名(源程序名)。假设,某模块名为ABC,则其缺省的代码段段名就为ABC_TEXT。因此,在这种情况下,程序的模块名或源程序名不要以数字开头。

例6.15 简化段定义的方法

.MODEL SMALL

.STACK 128

.DATA

MSGDB "Simplified Segment Directives.$"

.CODE

MOV AX, @DATA;取数据段的段值

MOVDS, AX;把给段寄存器DS赋值

MOVDX, offset MSG

MOVAH, 9H

INT21h

MOVAX, 4C00H

INT21h

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

MSGDB "Simplified Segment Directives.$"

.CODE

.STARTUP     ;自动初始化寄存器DS、SS和SP

MOVDX, offset MSG

MOVAH, 9H

INT21h

.EXIT

END

喜欢0 评分0
游客

返回顶部