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

    4.4 复合内存变量的定义
    上节,我们介绍了汇编语言中六个最基本的数据类型,这些数据类型能满足程序设计中绝大多数情况的需要,但也存在需要更复杂的数据类型的情况。
    下面介绍汇编语言所提供的三种复合数据类型的说明形式。
    4.4.1重复说明符DUP
    从前面的内容里,我们知道了定义少量内存变量的定义形式,但如果在程序中要说明50个、100个、200个甚至更多的、同类型的内存变量时,若采用前面所学的方法,对它们一一加以说明显然是不可行的。为此,汇编语言提供了变量的重复说明符DUP,其说明的一般形式如下:
    count  DUP  (表达式, 表达式, …, 表达式)
    解释:count是重复次数,(表达式, 表达式, …, 表达式)是被重复的部分,“表达式”可以是存储单元的初值,也可以是含义另一个DUP的式子。如果在表达式的括号中有多个表达式,那么,它们之间要用逗号','分开。
    例如:
    

BUFFER
    
  DB
    
100 DUP(?)
    
STRING
    
  DB
    
120 DUP('ABCDE'), 0
    
DATA1
    
  DW
    
50 DUP(10H, 20 DUP(1,2,3), 20H)
    
POINTS
    
  DD
    
12, 30 DUP(0)
    

从上面的例子可看出:用DUP说明内存变量相当于在高级语言中定义数组。
    
    4.4.2 结构类型的定义
    重复说明符DUP只能用于重复同一数据类型的变量说明,它不可以重复不同数据类型的变量说明。为了把一组不同类型的变量说明组合在一起,汇编语言提供了另一种复合数据类型说明符——结构类型说明符STRUC。
    1、结构类型的定义
    用STRUC和ENDS可以把一系列数据定义语句括起来作为一种新的、用户定义的结构类型。其一般说明格式如下:
    结构名  STRUC [Alignment][, NONUNIQUE]
    数据定义语句序列
    结构名  ENDS
    解释:结构名是一个合法的标识符,且具有唯一性。结构名代表整个结构类型,前后两个结构名必须一致。结构内被定义的变量为结构字段,变量名即为字段名。
    一个结构中允许含有任意多个字段,各字段的类型和所占字节数也都可任意。如果字段有字段名,则字段名必须唯一。每个字段可独立存取。
    、对齐方式(Alignment):可用1、2或4来指定结构中字段的字节边界(Byte boundary),其缺省值为1。见4.3.2节中的有关叙述;
    、NONUNIQUE:要求结构中的字段必须用全名才能访问,见本小节中的“结构类型字段的引用”。
    

例如:
    
COURSE
    
  STRUC
    
在左上例中,COURSE是结构名,它含有三个字段:NO、CNAME和SCORE,它们的类型分别是DD、DB和DW。
    
  NO
    
DD  ?
    
  CNAME
    
DB  'Assember'
    
  SCORE
    
DW  0
    
COURSE
    
  ENDS
    

上例中,COURSE是结构名,它含有三个字段:NO、CNAME和SCORE,这些字段的类型分别是DD、DB和DW。结构COURSE的字段分布如图4.7所示。
    

  
    
  
    
  
    
  
    
A
    
s
    
s
    
e
    
m
    
b
    
e
    
r
    
  
    
  
    
NO
    
CNAME
    
SCORE
    

图4.7 结构类型COURSE的字段分布示意图
    从图4.7,我们不难看出:结构类型COURSE共占14个字节,其字段NO、CNAME和SCORE的偏移量分别为:0、4和12。
    结构中的字段可以有字段名,也可以没有字段名。有字段名的字段可直接用该字段名来访问它,没有字段名的字段可以用该字段在结构中的偏移量来访问。
    

例如:
    
PEASON
    
  STRUC
    
  NO
    
DD  ? 
    
;偏移量为0
    
  NAME
    
DB  10 dup (?)
    
;偏移量为4
    
DB  1
    
;偏移量为14
    
PEASOM
    
  ENDS
    

在结构PEASON中,有二个字段有字段名,一个字段没有字段名,但不管有无字段名,我们都可用其偏移量来访问它。
    
    2、结构类型变量的定义
    在定义某个结构类型后,程序员就可以说明该结构类型的内存变量。它的说明形式与前面介绍的简单数据类型的变量说明基本上一致。其定义格式如下:
    [变量名]  结构名  <[字段值表]>
    
    3、结构类型字段的引用
    定义了结构类型的变量后,若要访问其结构中的某个字段,则可采用如下形式:
    结构变量名.字段名
    该引用方式与高级语言的字段引用方式完全一致,我们还可用偏移量来访问其中的某个字段,但此方法不直观,变动性大,所以,一般情况下,不提倡使用此方法。
    例如:
    

解释:1)、
    
变量名即为该结构类型的变量名,它可省缺。如果省缺,则不能用符号名来访问该内存单元;
    
2)、
    
字段值表是给字段赋初值,中间用逗号','分开,其字段值的排列顺序及类型应与该结构说明时各字段相一致;
    
3)、
    
如果结构变量中某字段用其说明时的缺省值,那么,可用逗号来表示;如果所有字段都如此,则可省去字段值表,但必须保留一对尖括号"<"、">"。
    
例如:
    
COURSE1
    
  COURSE  <>
    
;使用缺省的初值
    
COURSE2
    
  COURSE  <1, 'Pascal', 60>
    
COURSE3
    
  COURSE  <2, , 84> 
    
;使用缺省的课程名
    
PEASON1
    
  PEASON
    
<1000, '张 三', 34>
    

下面二种方法都可以把结构变量E1中字段的内容赋给寄存器AX,但如果在字段F3之前增加或减少了字段,那么,这些引用需要改变吗?
    (1)、用字段名直接引用
    MOV  AX, E1.F3
    (2)、用字段的偏移量间接引用
    LEA  SI, E1
    MOV  AX, [SI 4]          ;其中4是字段F3的偏移量
    

 

相关新闻

数值表达式
地址表达式
表达式及有关运算符
重复伪指令REPEAT
数据类型、运算符、表达式
条件编译
赋值运算符和赋值表达式
算术运算符和算术表达式
数据类型、运算符与表达式

您可能对这些感兴趣  

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

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

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