(2) 组合类型说明程序连接时的段合并方法,即指定多个逻辑段之间的关系,可为:
PRIVATE 本段为私有段,与其他段没有逻辑关系,在连接时不与其他段合并,每段都有自己的段地址。这是完整段定义伪指令默认的段组合方式
PUBLIC 连接程序把本段与所有同名同类型的其他段相邻地连接在一起,然后为所有这些段指定一个共同的段地址,也就是合成一个物理段。这是简化段定义伪指令默认的段组合
STACK 本段是堆栈的一部分,连接程序将所有 STACK 段按照与 PUBLIC 段的同样方式进行合并。这是堆栈段必须具有的段组合
(3)使用类型是支持 32 位段而设置的属性,用来说明使用 16 位寻址方式还是 32 位寻址方式
对于 16 位 x86 CPU 来说,它默认是 16 位段,即 USE16
而对于汇编 32 位 x86 CPU 指令时,它默认采用 32 位段,即 USE32 ;但可以使用 USE16 指定标准的 16 位段
编写运行于实地址方式( 8086 工作方式)的汇编语言程序,必须采用 16 位段
(4) 类别在引号中给出连接时组成段组的类型名。当连接程序组织段时,并不能把相同类别的段合并起来,但可将所有的同类别段相邻分配
段类别可以是任意名称,但必须位于单引号中
大多数 MASM 程序使用 'code' 、 'data' 和 'stack '来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续
此外,必须明确段与段寄存器的关系,可用 ASSUME 伪操作来实现。格式:
ASSUME 段寄存器:段名 [, 段寄存器名:段名 , ...]
作用 : 通知 MASM 用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系,在明确了程序中各段与段寄存器之间的关系后,汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是 ASSUME 伪指令的主要功能。
ASSUME 伪指令并不为段寄存器设定初值,所以在代码段中还必须把段地址装入相应的段寄存器中。例如:定义数据段段名为 DATA ,则需使用 MOV 指令对 DS 段寄存器进行赋值。
MOV AX, DATA
MOV DS, AX
如果程序中有堆栈段,也需要把地址装入 SS 中
代码段不需要这样做,代码段的这一操作是在程序初始化时完成的。
例:完整的段定义伪操作
data_1 segment
…
data_1 ends
data_2 segment
…
data_2 ends
code segment
assume cs:code,ds:data_1,es:data_2
start:
mov ax,data_1
mov ds,ax
mov ax,data_2
mov es,ax
…
code ends
end start
2. 存储模型与简化段定义伪操作
(1)MODEL 伪操作
格式: .MODEL memory_model[,model options]
用来表明存储模型,即用来说明在存储器中是如何安放各个段的.
存储模型 memory model 决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性
MASM 有 7 种不同的存储模式:
① TINY ② SMALL
③ COMPACT ④ MEDIUM
⑤ LARGE ⑥ HUGE
⑦ FLAT
微型模型是 MASM 6.0 才引入的,用于创建 COM 类型程序。用微型模型编写汇编语言程序时,所有的段地址寄存器都被设置为同一值,这意味着代码段、数据段、堆栈段都在同一个段内,不大于 64KB ;访问操作数或指令都只需要使用 16 位偏移地址。一般用于小程序。
S mall 小型模型是最常用的一种模型。在小型模型下,一个程序至多只能有一个代码段和一个数据段,每段不大于 64KB ,这里的数据段指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不超过 64KB ;访问操作数或指令都只需要使用 16 位偏移地址;代码和数据都是近访问的,小模型下程序的最大长度为 128KB
C ompact 紧凑模型适合于数据量大但代码量小的程序。在该模型下,代码段被限制在一个不大于 64KB 的段内;而数据段则可以有多个,超过 64KB 。 代码是近访问的,而数据则可为远访问的。M edium 中型模型是与紧凑模型互补的模型,适合于数据量小但代码量大的程序。中型模式的代码段可以超过 64KB ,有多个;但数据段只能有一个不大于 64KB 的段。数据是近访问,而代码可远访问。
L arge 大型模式允许的代码段和数据段都有多个,都可以超过 64KB ;但全部的静态数据(不能改变的数据)仍限制在 64K 字节内 . 数据和代码都可以远访问。
H uge 巨型模型与大型模型基本相同,只是静态数据不再被限制在 64K 字节之内
F lat 平展模型用于创建一个 32 位的程序,它只能运行在 32 位 x86 CPU 上。 DOS 下不能使用 FLAT 模型,而编写 32 位 Windows 9.x 或 Windows-NT 的程序时,必须采用 FLAT 模型。
DOS 下编程可选择前六种模型,一般可以选用 SMALL 模型, TINY 模式产生 COM 程序,其他模型产生 EXE 程序, FLAT 模型只能用于 32 位程序。
Model options 允许用户指定三种选项:高级语言接口、操作系统和堆栈距离。
高级语言接口选项是指该汇编语言程序作为某一种高级语言程序的过程而为该高级语言程序调用时,应该用C等来说明。
操作系统选项是要说明程序运行于哪个操作系统之下,可用 OS_DOS 或 OS_OS2 来说明,默认是 OS_DOS 。
堆栈距离选项可用 NEARSTACK 或 FARSTACK 来说明,基中 NEARSTACK 是指堆栈段和数据段组合到一个 DGROUP 段中,而 FARSTACK 是指堆栈段和数据段并不合并。
例如: .MODEL SMALL,C
.MODEL LARGE,OS_DOS
全站搜索