汇编网首页登录博客注册
fishboy的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2007-10-29 16:44] 【转贴】汇编伪指令五

类似于高级语言中用户自定义复合数据类型,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
用于创建一个新数据类型,即为一定义的数据类型取一个同义的类型名
评论次数(4)  |  浏览次数(2105)  |  类型(汇编自留地) |  收藏此文  | 

[  Wednesday   发表于  2007-10-30 14:02  ]

这篇文章要是不上顶,就没天理了!

[  dreamhk   发表于  2007-10-30 15:50  ]

原来汇编也有结构联合啊~~~

[  游客   发表于  2009-05-06 19:00  ]

顶一下。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码