汇编语言STRUCT和ENDS伪指令:定义结构

您所在的位置:网站首页 endm伪指令 汇编语言STRUCT和ENDS伪指令:定义结构

汇编语言STRUCT和ENDS伪指令:定义结构

#汇编语言STRUCT和ENDS伪指令:定义结构| 来源: 网络整理| 查看: 265

定义结构使用的是 STRUCT 和 ENDS 伪指令。在结构内,定义字段的语法与一般的变量定义是相同的。结构对其包含字段的数量几乎没有任何限制:

name STRUCT     field-declarations name ENDS

字段初始值若结构字段有初始值,那么在创建结构变量时就要进行赋值。字段初始值可以使用各种类型: 无定义:运算符?使字段初始值为无定义。 字符串文本:用引号括起的字符串。 整数:整数常数和整数表达式。 数组:DUP 运算符可以初始化数组元素。 下面的 Employee 结构描述了雇员信息,其包含字段有 ID 号、姓氏、服务年限,以及薪酬历史信息数组。结构定义如下所示,定义必须在声明 Employee 变量之前: Employee STRUCT IdNum BYTE "000000000" LastName BYTE 30 DUP(0) Years WORD 0 SalaryHistory DWORD 0,0,0,0 Employee ENDS 该结构内存保存形式的线性表示如下: 对齐结构字段 为了获得最好的内存 I/O 性能,结构成员应按其数据类型进行地址对齐。否则,CPU 将会花更多时间访问成员。例如,一个双字成员应对齐到双字边界。下表列岀了 Microsoft C 和 C++ 编译器,以及 Win32 API 函数的对齐方式。汇编语言中的 ALIGN 伪指令会使其后的字段或变量按地址对齐:

ALIGN datatype

成员类型 对齐方式 成员类型 对齐方式 BYTE, SBYTE 对齐到 8 位(字节)边界 REAL4 对齐到 32 位(双字)边界 WORD, SWORD 对齐到 16 位(字)边界 REAL8 对齐到 64 位(四字)边界 DWORD, SDWORD 对齐到 32 位(双字)边界 structure 所有成员的最大对齐要求 QWORD 对齐到 64 位(四字)边界 union 第一个成员的对齐要求 比如,下面的例子就把 myVar 对齐到双字边界:

.data ALIGN DWORD myVar DWORD ?

现在正确地定义 Employee 结构,利用 ALIGN 将 Years 按字(WORD)边界对齐,SalaryHistory 按双字(DWORD)边界对齐。注释为字段大小: Employee STRUCT IdNum BYTE "000000000" ; 9 LastName BYTE 30 DUP(0) ; 30 ALIGN WORD ; 加 1 字节 Years WORD 0 ; 2 ALIGN DWORD ; 加 2 字节 SalaryHistory DWORD 0,0,0,0 ; 16 Employee ENDS ;共 60 字节


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3