程序的储存模型
存储模型(Memory
Model)决定一个程序的规模,也确定进行子程序调用、指令转移和数据访问的默认属性。当使用简化段定义的源程序格式时,必须有存储模型.MODEL语句,且位于所有简化段定义语句之前。其格式为:
.model存储模型,语言类型
.MODEL语句确定了程序采用的存储模型,MASM有7种可以选择,如下表所示。
存储模型
存储模型 | 特点 |
---|---|
TINY(微型模型) | 创建COM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持) |
SMALL(小型模型) | 创建小应用程序,只有一个代码段和一个数据段,每个段不大于64KB |
COMPACT(紧凑模型) | 创建代码少、数据多的程序,只有一个代码段(不大于64KB),但可有多个数据段 |
MEDIUM(中型模型) | 创建代码多、数据少的程序,可有多个代码段,但只有一个数据段(不大于64KB) |
LARGE(大型模型) | 创建大应用程序,可有多个代码段和多个数据段(静态数据小于64KB) |
HUGE(巨型模型) | 创建更大的应用程序,可有多个代码段和数据段,对静态数据没有限制 |
FLAT(平展模型) | 创建一个32位的程序,运行在IA-32微处理器的32位Windows操作系统 |
创建运行于DOS操作系统下的应用程序,可根据需要选择前6种模型,一般的小型程 序(例如学习中的小程序)可以选用SMALL模型,大型程序选择LARGE模型。要创建 COM 程序只能用TINY模型,其他模型产生EXE程序。FLAT 模型只能用于32位Windows应用 程序中,不能在DOS环境执行。
DOS环境的COM类型程序要求将程序的代码、数据和堆栈都安排在一个逻辑段中,大小 不超过64KB,是一种比较紧凑的程序格式。在上述程序模板中只要将,.STACK 和.DATA语句 去掉,并将数据定义填到子程序之后(END之前)就形成了一个COM类型程序的模板文件。
逻辑段的简化定义
堆栈段定义伪指令,STACK创建一个堆栈段,段名是:STACK。保留字后可书写一个数值型参数指定堆栈段所占存储空间的字节数,默认是1KB(即1024B=400日字节)。堆栈段
名可用@STACK预定义操作符表示。
数据段定义伪指令,DATA创建一个数据段,段名是:_DATA。数据段名可用@DATA预定义操作符表示。
代码段定义伪指令CODE创建一个代码段,后可选一个标识符型参数指定该代码段的段名。如果没有给出段名,则采用默认段名,例如在TINY、SMALL、COMPACT和FLAT模式下,默认的代码段名是:_TEXT。代码段名可用@CODE预定义操作符表示。