类似于高级语言中用户自定义复合数据类型,MASM允许将若干个相关的单个变量作为一个组来进行整体数据定义,然后通过相应的结构预置语句得变量分配空间。
1、结构
结构(STRUCTURE)把各种不同类型的数据组织到一个数据机构中,便于某些变量的处理。
(1)结构类型的说明
结构名 STRUCT
....
结构名 ENDS
如:学生成绩结构
student struct
sid dw ?
sname db 'abcdefgh'
Math db 0
English db 0
student ends
结构类型中所含的变量,称为结构字段;相应的变量名称为字段名。一个结构中,可以有任意个字段,各自段长度可以不同,可以独立存取,可以有名或无名,可以有初值或无初值。
(2)结构变量的定义
结构说明只是定义了一个框架,,并未分配空间,必须通过结构预置语句分配主存并初始化,结构预置语句的格式:
变量名 机构名 <字段初始值>
如:对上述结构定义如下结构变量
stu1 student <1,'zhang',85,90>
stu2 student <2,'wang',,>
student 100 dup(<>)
(3)结构变量及其字段的引用
引用结构变量,只要直接书写结构变量名;要引用其中的某个字段,则采用圆点“.”操作符,其格式是:
结构变量名.结构字段名,例如:
mov stu1.Math,95 ;将对Math的域的值更新为95
2、记录
纪录(RECORD)提供直接按名访问字或字节中的若干位的方法,记录中的基本存储单位是二进制位。
(1)记录类型的说明
记录类型的说明采用伪指令RECORD,格式如下:
记录名 RECORD 位段 [,位段...]
记录名给出了说明的记录类型,位段(也称字段)表示构成记录的数据结构,记录中的位段格式如下:
位段名:位数[=表达式]
其中,位数说明该位段所占的二进制个数(1——16),表达式给该位段付初值,可以省略,整个记录的长度为1——16位,记录长度小于8位时,汇编成1个字节;长度为9——16位时,汇编成1个字,位段从低位(右)对齐,不用的位为0。例如:一个人的出生年year、性别sex和婚姻状况marriage的记录如下:
person RECORD year:4,sex:1=0,marriage:1=1
汇编程序将用一个字节的低6位表达这个纪录。其中marriage在D0位,sex在D1位,year在D2---D5位。
(2)记录变量的定义
格式:
记录变量名 记录名 <段初值表>
如:zhang person <1000b,1,0>
(3)记录变量的引用和记录操作符
记录变量通过它的变量名直接引用,表示他的字节或字值,如:
mov bl,zhang ;22h送al
记录位段名是一个特殊的操作符,表示该位段移位到最低位D0的移位次数,如:
mov bl,year ;2送bl
“WIDTH 记录名/记录位段名”操作符返回记录或记录位段所占的位数,如:
mov cl,WIDTH person ;6送cl
“MASK 记录位段名”操作符返回一个8位或16位数值,其中对应该位段的个位为1,其余位为0,如:
mov dl,MASK sex ;00000010b送dl
(3)联合数据结构UNION
联合UNION用于为不同的数据类型赋予相同的存储地址,以达到共享的目的。
(4)类型定义TYPEDEF
用于创建一个新数据类型,即为一定义的数据类型取一个同义的类型名
- [游客] 补充一下,还有可能在数据段中定义数组时超过了一个段长 07/22 16:20
- [infosecer] 受教了 07/17 00:16
- [游客] 顶一下。 05/06 19:00
- [maxm] 收藏了先 02/17 15:50
- [jcw2008] 谢谢,这对我很有用! 10/21 11:05
- [ding2843] 好文章。。。。。。。。。。。。。。。。。 07/01 16:39
- [ding2843] 好文章。。。。。。。。 07/01 16:22
- [starrynight] 一笑而过 管自己的水,让别人喝去吧 06/27 13:25
- [游客] "别理他"那可不行,不能让不实之言,任意泛滥。 知情人应该发言,不要让“谣言”有成长的空间。 06/27 12:55
- [yjll] 顶! 06/26 13:31
- [lonely200808] 你好!我的汇编语言的初学者,在论坛里看到你发言,想和你交个朋友,因为我才开始自学,要自考,有没有QQ 03/26 17:19
- [gecko] 接触到汇编语言是一年后的事情了。才知到有一种语言更低级。 这话有双关语的感觉..哈哈 11/21 19:42
- [lbhn] 我已修改了,这东西不注意还真不好找*-* 10/18 16:04
- [lbhn] 多谢了,对了问一下你的照片是怎么上传的?为什么我现在连自己的资料都不能修改了? 10/17 18:28
- [lbhn] 我第二天又做了一遍这次没出错,可能是V86运行程序不是很稳定,多谢你关注啊!! 10/15 16:22
- [lbhn] 你是在纯DOS下还是ms-dos窗口下?是自已的机子吗? 我这是在网吧里做的!! 10/13 13:50