上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
类别(CLASS)
作者:未知 申领版权
2010年12月12日 共有 767 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

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

例如:
    
 
    
DATA1
    
SEGMENT  WORD  PUBLIC  "Data"
    

    
DATA1
    
ENDS
    

上述段定义说明了该段的起始地址是下一个字地址、组合类型为PUBLIC、段类别是"Data"。
    6.3.4 段组(GROUP)
    段组伪指令GROUP是用于把源程序模块中若干个段结合成一个组,并对该段组定义一个段组名。段组伪指令的格式如下:
    段组名  GROUP  段名[, 段名, ……]
    其中:段名之间要用逗号间隔,段名也可以用表达式“SEG 变量”或“SEG 标号”。
    下面举例说明段组伪指令的使用方法和作用。
    

例6.12 段组的作用
    
方法1:用一个段寄存器对应二个数据段
    
 
    
DATA1
    
SEGMENT
    
;第一个数据段
    
b1
    
DB  10h
    
DATA1
    
ENDS
    
DATA2
    
SEGMENT
    
;第二个数据段
    
b2
    
DB  23h
    
DATA2
    
ENDS
    
CODE1
    
SEGMENT
    
ASSUME  CS:CODE1, DS:DATA1
    
;(1)
    
START:
    
MOV
    
AX, DATA1
    
MOV
    
DS, AX 
    
;(2)把数据段DATA1的段值赋给段寄存器DS
    

    
MOV
    
BL, b1
    
;(3)引用DS来访问DATA1中的变量b1
    

    
ASSUME  DS:DATA2
    
;(4)
    
MOV
    
AX, DATA2
    
MOV
    
DS, AX
    
;(5)把数据段DATA2的段值赋给段寄存器DS
    

    
MOV
    
AL, b2
    
;(6)引用DS来访问DATA2中的变量b2
    

    
CODE1
    
ENDS
    
END
    
START
    

在上例中,语句(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:用二个段寄存器对应二个数据段
    
 
    
DATA1
    
SEGMENT
    
b1
    
DB  10h
    
DATA1
    
ENDS
    
DATA2
    
SEGMENT
    
b2
    
DB  23h
    
DATA2
    
ENDS
    
CODE1
    
SEGMENT
    
ASSUME  CS:CODE1, DS:DATA1, ES:DATA2
    
START:
    
MOV
    
AX, DATA1
    
MOV
    
DS, AX 
    
;把数据段DATA1的段值赋给段寄存器DS
    
MOV
    
AX, DATA2
    
MOV
    
ES, AX
    
;把数据段DATA2的段值赋给段寄存器ES
    

    
MOV
    
BL, b1
    
;引用DS来访问DATA1中的变量b1
    

    
MOV
    
AL, b2
    
;引用ES来访问DATA2中的变量b2
    

    
CODE1
    
ENDS
    
END
    
START
    

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

方法3:用一个段组组成二个数据段
    
 
    
GSEG
    
GROUP
    
DATA1, DATA2
    
;把段DATA1和DATA2定义成一个段组
    
DATA1
    
SEGMENT
    
 
    
b1
    
DB  10h
    
DATA1
    
ENDS
    
DATA2
    
SEGMENT
    
b2
    
DB  23h
    
DATA2
    
ENDS
    
CODE1
    
SEGMENT
    
ASSUME  CS:CODE1, DS:GSEG
    
START:
    
MOV
    
AX, GSEG
    
MOV
    
DS, AX 
    
;把段组GSEG的段值赋给段寄存器DS
    

    
MOV
    
BL, b1
    
;引用DS来访问DATA1中的变量b1
    

    
MOV
    
AL, b2
    
;引用DS来访问DATA2中的变量b2
    

    
CODE1
    
ENDS
    
END
    
START
    

定义段组后,段组内各段所定义的标号和变量,除了与定义它们的段起始点相关外,还与段组的起始点相关。规定如下:
    所以,在使用段组后,程序员要谨慎使用ASSUME伪指令,并保证段寄存器的值与段组或段相一致。
    
    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 存储模式的符号及其相关含义
    、SMALL
    所有的数据变量必须在一个数据段之内,所有的代码也必须在一个代码段之内。在这种模型下,数据段寄存器的内容保持不变,所有转移也都是段内转移。
    该存储类型是独立汇编语言源程序常用的存储模型。
    、MEDIUM
    所有的数据变量必须在一个数据段之内,但代码段可以有多个。在这种模型下,数据段寄存器的内容保持不变,转移可以是段间转移。
    、COMPACT
    数据段可以有多个,但代码段只能有一。
    、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
    当然,程序员也可把该段寄存器说明语句写在其指令序列之中。
    

 

相关新闻

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》