经典汇编语言教程:6.3.3 段的类别和段组

6.3.3 段的类别和段组

类别是一个由程序员指定的用单引号括起来的字符串。如果一个段没有给出类别,那么,这个段的类别就为空。类别是用于段的分类,连接程序利用该类别来调整同名、同类别的段,并使它们相邻。典型的类别是"Data"和"Code"。如果指定某段的类别是"Code",那么,该段最好是代码段,这样,有的调试程序(如:CodeView)就可以顺序工作。

例如:

DATA1SEGMENT  WORD  PUBLIC  "Data"
DATA1ENDS

上述段定义说明了该段的起始地址是下一个字地址、组合类型为PUBLIC、段类别是"Data"。

6.3.4 段组(GROUP)

段组伪指令GROUP是用于把源程序模块中若干个段结合成一个组,并对该段组定义一个段组名。段组伪指令的格式如下:

段组名  GROUP  段名[, 段名,……]

其中:段名之间要用逗号间隔,段名也可以用表达式“SEG变量”或“SEG 标号”。

下面举例说明段组伪指令的使用方法和作用。

例6.12 段组的作用
方法1:用一个段寄存器对应二个数据段

DATA1SEGMENT;第一个数据段
b1DB 10h
DATA1ENDS
DATA2SEGMENT;第二个数据段
b2DB 23h
DATA2ENDS
CODE1SEGMENT
ASSUME CS:CODE1, DS:DATA1;(1)
START:MOVAX, DATA1
MOVDS, AX ;(2)把数据段DATA1的段值赋给段寄存器DS
MOVBL, b1;(3)引用DS来访问DATA1中的变量b1
ASSUME DS:DATA2;(4)
MOVAX, DATA2
MOVDS, AX;(5)把数据段DATA2的段值赋给段寄存器DS
MOVAL, b2;(6)引用DS来访问DATA2中的变量b2
CODE1ENDS
ENDSTART

在上例中,语句(1)说明DS与DATA1建立联系,语句(2)对DS赋值,语句(3)用DS来访问DATA1段的变量名。语句(4)说明DS与DATA2建立联系,语句(5)对DS赋值,语句(6)用DS来访问DATA2段的变量名。

在该例子中,因为只使用一个段寄存器DS来对应二个数据段,所以,需要切换DS的对应关系(如:语句(4))。但我们也可以用段寄存器DS和ES来分别对应段DATA1和DATA2,这样,方法1就可变成方法2。

方法2:用二个段寄存器对应二个数据段

DATA1SEGMENT
b1DB 10h
DATA1ENDS
DATA2SEGMENT
b2DB 23h
DATA2ENDS
CODE1SEGMENT
ASSUME CS:CODE1, DS:DATA1, ES:DATA2
START:MOVAX, DATA1
MOVDS, AX ;把数据段DATA1的段值赋给段寄存器DS
MOVAX, DATA2
MOVES, AX;把数据段DATA2的段值赋给段寄存器ES
MOVBL, b1;引用DS来访问DATA1中的变量b1
MOVAL, b2;引用ES来访问DATA2中的变量b2
CODE1ENDS
ENDSTART

我们还可以用段组来简化段寄存器的使用,把段DATA1和DATA2组成一个数据段。所以,把方法2再改写成方法3的形式。

方法3:用一个段组组成二个数据段

GSEGGROUPDATA1, DATA2;把段DATA1和DATA2定义成一个段组
DATA1SEGMENT
b1DB 10h
DATA1ENDS
DATA2SEGMENT
b2DB 23h
DATA2ENDS
CODE1SEGMENT
ASSUME CS:CODE1, DS:GSEG
START:MOVAX, GSEG
MOVDS, AX ;把段组GSEG的段值赋给段寄存器DS
MOVBL, b1;引用DS来访问DATA1中的变量b1
MOVAL, b2;引用DS来访问DATA2中的变量b2
CODE1ENDS
ENDSTART

定义段组后,段组内各段所定义的标号和变量,除了与定义它们的段起始点相关外,还与段组的起始点相关。规定如下:

◆、

如果在ASSUME伪指令中说明段组与段寄存器相对应,那么,有关标号或变量的偏移量就相对于段组起点计算;

◆、

如果在ASSUME伪指令中说明段组内的某各段与段寄存器相对应,那么,有关标号或变量的偏移量就相对于该段的起点。

所以,在使用段组后,程序员要谨慎使用ASSUME伪指令,并保证段寄存器的值与段组或段相一致。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号