每日一课(15/75)复合内存变量的定义 重复定义 和 结构定义

第13章是简单内存变量的定义的学习笔记,中间经过了调整偏移量的伪指令的学习,再继续学习复合内存变量的学习。

简单内存变量回顾:
DB/BYTE(字节变量)
DW/WORD(字变量)
DD/DWORD(DoubleWord,双字,四字节)
DF/FWORD(Farword,三字,六字节)
DQ/QWORD(Quadword,四字,八字节)
DT/TBYTE(Tenbytes,十字节)

1. 重复说明符DUP
对于少量的内存变量,可以使用简单内存变量的定义方式,但如果我们现在要定义一万个byte类型的内存变量呢?
这时候就可以使用重复说明符DUP了,形式如下:
count    DUP    (表达式,表达式……,表达式)
count是重复次数,后面括号内的内容是重复的内容,比如:
BUFFER    DB    100    DUP    (?)                                        //这个是100个byte
STRING    DB    120    DUP    ('ABCDE'),0                           //这个是120个串
DATA1     DW   50      DUP    (10H,20 DUP(1,2,3), 20H)       //这个包含了一个子重复说明符,重复20次1,2,3
POINTS    DD    12,30 DUP (0)                                           //第一个内存单元是12,然后跟着30个0

2. 结构类型说明符STRUC
DUP只是重复一种类型,汇编还支持扩展自己的数据类型,可以把几种不同的基础数据类型组合在一起。
复合数据类型的定义使用结构类型说明符STRUC。
1). 结构类型的定义
用STRUC和ENDS可以把一系列的数据定义语句括起来组成新的,用户定义的结构类型,一般说明格式如下:
结构名    STRUC [Alignment][, NONUNIQUE]
            数据定义语句序列
结构名    ENDS


结构名是一个合法标识符,且具有唯一性,前后结构名相一致。结构内被定义的变量称为结构字段,变量名就是字段名。

一个结构中可以有任意多个字段,字段名在结构内不可重复。

Alignment是对齐方式,可选的,可以用1,2,4来指定结构中字段的字节边界,缺省值是1。
NonUnique要求结构中的字段必须用全名才能访问。

例如:
COURSE    STRUC
                NO        DD    ?
                CNAME  DB    'Assember'
                            DW    0
COURSE    ENDS

结构Course有4 + 8 + 2 = 14个字节,前俩字段有名称,第三个字段没字段名,可以用偏移量来访问。

2). 结构类型变量的定义
在定义某个结构类型后,程序员就可以说明该结构类型的内存变量。和简单数据类型变量的说明差不多。
[变量名]    结构名    <[字段值表]>
变量名是可选的,不写的话,只能用偏移量了。
结构名是定义的
字段值表用逗号分隔开各个字段,不写的话将使用定义结构体时候的缺省值,但是必须保留<>该括号。

3). 结构类型字段的引用
定义结构类型的变量后,如果要访问结构中的某个字段,可以使用.操作符
结构变量名.字段名
和高级语言的引用方式是一样的,不过还可以通过偏移量来引用,但是很不直观,比如
EXAM1        STRUC
                  F1        DW    ?
                  F2        DB    ?
                  EVEN        ;偶对齐伪指令
                  F3        DW    ?
EXAM1        ENDS
                  E1        EXAM1    <1234h,'A',2234h>
假如要引用E1中的F3,可以这样引用:
MOV AX, E1.F3
也可以通过偏移量
LEA SI, E1
MOV AX, [SI + 4] ;如果没有上面的偶对齐指令,就是加三了 呵呵 偶对齐 是为了更快的读取内存单元数据的

转载于:https://www.cnblogs.com/coderlee/archive/2008/03/04/1089705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值