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

    联合类型的定义
    联合数据类型是一种特殊的数据类型。它可以实现:以一种数据类型存储数据,以另一种数据类型来读取数据。程序员可以根据不同的需要,以不同的数据类型来读取联合类型中的数据。也就是说,在一些情况下,以一种数据类型来读取联合类型中的数据,而在另一些情况下,又以另一种数据类型来读取其数据。
    1、联合类型的说明
    联合数据类型其说明格式如下:
    [联合类型名]  UNION  [Alignment] [,NONUNIQUE]
    数据定义语句序列
    [联合类型名]  ENDS
    联合类型中的各字段相互覆盖,即同样的存储单元被多个不同的字段所对应,并且其每个字段的偏移量都为0。
    联合类型所占的字节数是其所有字段所占字节数的最大值。
    、对齐方式(Alignment):可用1、2或4来指定结构字节的边界,其缺省值为1。它还用可伪指令ALIGN或EVEN来重新定界,也可用命令行选项/Zp来定界;
    、NONUNIQUE:要求联合类型中的字段必须用全名才能访问,引用联合类型字段的方法见下面的“联合类型字段的引用”。
    例如:
    
    

 
    
DATATYPE
    
UNION
    
 
    
 
    
BB  DB  ? 
    
;定义一个字节类型的字段
    
 
    
 
    
WW  DW  ? 
    
;定义一个字类型的字段
    
 
    
 
    
DD  DD  ? 
    
;定义一个双字类型的字段
    
 
    
DATATYPE
    
ENDS
    

 
    
    

联合类型DATATYPE的字段分布如图4.8所示。
    在联合类型的最外层定义中,在伪指令UNION和ENDS的前面一定要书写该联合类型名,而在其嵌套定义的内层,伪指令UNION和ENDS之前一定不能写联合类型名。
    
 
    
    

例如:
    
    

 
    
UNION1
    
UNION
    
BB
    
DB  ?
    
WW
    
DW  ?
    
UNION
    
;联合类型的嵌套定义形式
    
  W1
    
DW  ?
    
  B1
    
DB  ?
    
 
    
ENDS
    
UNION1
    
ENDS
    

 
    
    2、联合类型变量的定义
    联合数据类型的变量只能用第一个字段的数据类型来进行初始化。
    例如:
    
    

 
    
U1
    
DATATYPE
    
<'J'>  
    
;定义一个联合变量,并初始化其值
    
U2
    
DATATYPE
    
<1234H>
    
;初始化错误,只能用字节数据来初始化
    
U3 
    
UNION1
    
<1>
    

3、联合类型字段的引用
    定义了联合类型的变量后,就可根据需要,以不同的数据类型或字段名来存取该联合类型中的数据。引用其字段的具体形式如下:
    联合类型变量名.字段名
    例如:
    
    

 
    
MOV
    
U1.WW, 1234H
    
;给联合类型变量赋字数据
    
 
    
MOV
    
AL, U1.BB
    
;AL=34H
    
 
    
MOV
    
BX, U1.WW
    
;BX=1234H
    
 
    
MOV
    
U1.BB, 'A'
    
;U1的值1241H,41H是'A'的ASCII码
    

 
    
    4.4.4 记录类型的定义
    1、记录类型的说明
    汇编语言的记录类型与高级语言的记录类型不同,它是为按二进制位存取数据提供方便的。记录类型的说明要用到另一个保留字RECORD,其说明格式如下:
    记录名  RECORD  字段 [, 字段, ……]
    其中“字段”代表:字段名:宽度[=初值表达式]
    例如:
    
    

解释:
    
1、记录名代表该记录类型;
    
2、记录类型可以由多个字段组成,每个字段之间要用逗号','分开;
    
3、字段的属性包括字段名、宽度和初值;
    
4、字段的“宽度”表示该字段所占的二进制位数,它必须是一个常数,并且所有字段的宽度之和不能大于16;如果记录的总宽度大于8,则系统为该记录类型分配二个字节,否则,只分配一个字节;
    记录的最后一个字段排在所分配空间的最低位,然后对记录中的字段依次“从右向左”分配二进制位,左边没有分完的二进制位补0;
    
5、初值表达式给出的是该字段的缺省值。如果初值超过了该字段的表示范围,那么,在汇编时将产生错误提示信息;如果某字段没有初值表达式,则其初值为0。
    

 
    它们的总宽度是14,所以,系统要给它分配二个字节。记录类型FLOAT的二进制位分布如右图4.10所示。
    
    2、记录变量的定义
    在程序中,必须先说明记录类型,然后才能定义该记录类型的变量。记录变量是把其二进制位分成一个或多个字段的字节或字变量。其定义格式与其它类型变量的定义方式类似,具体如下:
    [变量名]   记录名  <[字段值表]>
    
    

 
    
COLOR
    
RECORD  BLINK:1, BACK:3=0, INTENSE:1=1, FORE:3
    
FLOAT
    
RECORD  DSIGN:1, DATA:8, ESIGN:1, EXP:4
    

例如:
    
    

记录类型COLOR有四个字段:BLINK、BACK、INTENSE和FORE,它们的宽度分别为:1、3、1和3,所以,该记录类型共有8位二进制,系统分配给它一个字节。
    记录类型COLOR的二进制位分布如右图4.9所示。
    
 
    
    
记录类型FLOAT用来模仿《计算机原理》中的浮点数表示法,它也有四个字段:
    DSIGN (尾数的符号位);
    DATA (尾数);
    ESIGN (指数的符号位);
    EXP (指数)。
    
 
    
    

3、记录的专用操作符
    操作符WIDTH和MASK是作用于记录类型的两个专用保留字,利用它们可得到记录类型的不同属性。
    操作符WIDTH 
    操作符WIDTH返回记录或其字段的二进制位数,即其宽度。其一般书写格式如下:
    WIDTH 记录名  或  WIDTH 记录字段名
    假设有前面定义的记录类型COLOR,那么,WIDTH COLOR的值为8,WIDTH BACK的值为3,WIDTH BLINK的值为1。
    操作符MASK 
    操作符MASK返回一个8位或16位二进制数。在该二进制数中,被指定记录或字段使用的对应位的值为1,否则,其值为0。其一般书写格式如下:
    MASK  记录名  或  MASK  记录字段名
    假设有前面定义的记录类型FLOAT,那么,MASK EXP的值为000FH,MASK DATA的值为1FE0H,WIDTH DSIGN的值为2000H。
    记录字段
    记录字段名是一个特殊的操作符,它本身也是操作数,其返回值是该字段移到所在记录的最低位所需要的位数,即该字段最低位在记录中的位置。
    假设有前面定义的记录类型FLOAT,那么,有:
    
    

解释:
    
1、变量名即为该记录类型的变量名,它可省缺。如果省缺,则不能用符号名来访问该内存单元;
    
2、字段值表是给字段赋初值,中间用逗号','分开,其字段值的排列顺序及大小应与该记录说明时各字段相一致;
    
3、如果记录变量的某字段用其说明时的缺省值,那么,可用逗号来表示;如果所有字段都如此,则可省去字段值表,但必须保留一对尖括号"<"、">"。
    

 
    
    4.4.5 数据类型的自定义
    在有了一些数据类型后,程序员还可定义这些数据类型的别名或指针类型。表达这种定义的伪指令是TYPEDEF,其定义形式如下:
    新数据类型名  TYPEDEF  [位距] [PTR] 数据类型
    其中:“位距”是NEAR、FAR或PROC等。
    例如:
    
    

 
    
COLOR1
    
COLOR  <>, <1, 7, 0, 5>, <1, , 0, 7>
    
FLOAT1
    
FLOAT  <1, 23H, 0, 3>, <0, 89H, 1, 5>
    

有了上述定义之后,下面的变量说明就是合法的。
    
    

          
    
MOV  CL, EXP
    
相当于
    
MOV CL, 0
    
 
    
MOV  CL, DATA
    
相当于
    
MOV CL, 5
    

 

相关新闻

testtest
上善制度的炼成
新时代呼唤管理理论创新——大卫�梯斯与动态能力理论
创业的不变逻辑
创新管理需要回答的5个问题
十一、弥离
十、转院
九、生机
八、传染
七、求血

您可能对这些感兴趣  

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

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

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