6.4 简化的段定义

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.4 简化的段定义


→ 简化的段定义 课件章节 网络课件目录 第1章 预备知识 第2章 CPU资源和存储器 第3章 操作数的寻址方式 第4章 标识符和表达式 第5章 微机CPU的指令系统 第6章 程序的基本结构 第7章 子程序和库 第8章 输入输出和中断 第9章 宏 第10章 应用程序的设计 第11章 数值运算协处理器 第12章 汇编语言和C语言

6.4 简化的段定义
前面,我们介绍了完整的段定义格式,用完整的段定义格式虽然可以控制段的各种属性,但程序员很少会这样做。现在的汇编程序提供了一种简化的段定义方式,它使定义段更简单、方便。
6.4.1 存储模型说明伪指令
在使用简化的段定义方式之前,必须使用存储模式说明伪指令来描述源程序所采用的存储模式。该伪指令说程序所使用的存储模式,汇编程序将用该存储模式生成相应的ASSUME和GROUP语句,同时也为其它的简化段创建等价的预定义。
程序存储模式说明伪指令的格式如下:
.MODEL 存储模式[,语言类型] [,操作系统类型] [,堆栈类型]
程序可选的存储模式有:TINY、SMALL、COMPACT、MEDIUM、LARGE、HUGE和FLAT。
伪指令.MODEL必须写在源程序的首部,且只能出现一次,其前内容只能是注释。
如果用伪指令来指定程序所遵循的语言类型,那么,将不允许子程序的嵌套定义。与子程序定义有关的内容请见第7.5节。
一、存储模式
如果要用汇编语言编写被高级语言调用的子程序,那么,该汇编程序的存储模式必须与该高级语言编译(或解释)程序所使用的存储模式相匹配。汇编语言程序所能使用的存储模式、符号及其相关信息如表6.2所列。
在程序中,还可伪指令OPTION SEGMENT和SEGMENT来指定段的规模。
有关存储模式的具体规定如下:
、TINY
在汇编程序MASM 6.11和TASM 4.0,该存储类型是为编写COM文件类型而设置的。程序员还可用汇编命令行选项/AT和连接命令选项/TINY来达到此目的。
表6.2 存储模式的符号及其相关含义
代码的位距数据的位距段的宽度数据段和代码段能否合并
Code DistanceData DistanceSegment WidthData & Code Combined?

Tiny
Small
Compact
Medium
Large
Huge
Flat
NEARNEAR16-bitYes
NEARNEAR16-bitNo
NEARFAR16-bitNo
FARNEAR16-bitNo
FARFAR16-bitNo
FARFAR16-bitNo
NEARNEAR32-bitYes


、SMALL
所有的数据变量必须在一个数据段之内,所有的代码也必须在一个代码段之内。在这种模型下,数据段寄存器的内容保持不变,所有转移也都是段内转移。
该存储类型是独立汇编语言源程序常用的存储模型。
、MEDIUM
所有的数据变量必须在一个数据段之内,但代码段可以有多个。在这种模型下,数据段寄存器的内容保持不变,转移可以是段间转移。
、COMP

ACT
数据段可以有多个,但代码段只能有一。
、LARGE
数据段和代码段都可以有多个,但一个数组的字节数不能超过64KB。
、HUGE
数据段和代码段都可以有多个,一个数组的字节数也可以超过64KB。
、FLAT
FLAT存储模式在创建执行文件时,将使该程序仅含一个包括程序数据和代码的32位段,并且只能在80386及其以后的计算机系统中运行。该程序的文件类型为EXE。
在使用该存储模式之前,必须先用伪指令.386、.486或其它伪指令来说明更高性能的CPU类型。也就是说:FLAT模式仅在386及其以后CPU模式下才能使用。
在该程序中,所有代码和数据位距的缺省值都是NEAR,子程序的类型也是NEAR,并且标识符@CodeSize,@DataSize和@Model的值分别为:0、0和7。
在FLAT存储模式下,程序将不使用段寄存器FS和GS。汇编程序在处理说明语句“.MODEL FLAT”时,将自动生成下列段寄存器说明语句:
ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT, FS:ERROR, GS:ERROR
当然,程序员也可把该段寄存器说明语句写在其指令序列之中。
二、语言类型
其详细说明请见7.5.3节中所述。
三、操作系统类型
OS_DOS是当前唯一支持的选项值,也是该选项的缺省值。
四、堆栈类型
堆栈类型的值主要影响伪指令.STARTUP所生成的指令序列。该选项有二个可选值:NEARSTACK和FARSTACK。其中:NEARSTACK是该选项的缺省堆栈类型。
、NEARSTACK——堆栈段和数据段是同一段;
、FARSTACK——堆栈段和数据段是不同的段,且堆栈不在段组DGROUP中。
例如:
.MODEL SMALL, C, OS_DOS, FARSTACK
课件章节 课件目录 第1章 预备知识 第2章 CPU资源和存储器 第3章 操作数的寻址方式 第4章 标识符和表达式 第5章 微机CPU的指令系统 第6章 程序的基本结构 第7章 子程序和库 第8章 输入输出和中断 第9章 宏 第10章 应用程序的设计 第11章 数值运算协处理器 第12章 汇编语言和C语言

相关文档
最新文档