ZHCU875Z August 2001 – October 2023 SM320F28335-EP
声明联合体类型
[utag] .union [expr]
[mem0 ] element [expr0]
[mem1 ] element [expr1]
...
[memn ] .tag utag [exprn ]
...
[memN ] element [exprN]
[size] .endunion
label .tag utag
.union 指令用于为(将在同一存储器空间中分配的)备用数据结构体定义的元素分配符号偏移量。这样可使用户定义多个备用结构体,然后由汇编器计算元素偏移量。它与 C 联合体类似。.union 指令不会分配任何存储器空间;仅创建一个可重复使用的符号模板。
.struct 定义可包含一个 .union 定义,且.structs 和 .unions 可嵌套。
.endunion 指令用于终止联合体定义。
.tag 指令为 label 提供结构或联合体特征,以简化符号表示和定义包含其他结构或联合体的结构或联合体。.tag 指令不会分配存储器空间,必须事先定义 .tag 指令的结构体或联合体标签。
与 .struct、.endstruct 和 .tag 指令一起使用的参数包括:
这些示例展示了有标签和无标签的联合体。
1
2 .global employid
3 xample .union ; utag
4 0000 ival .int ; member1 = int
5 0000 fval .float ; member2 = float
6 0000 sval .string ; member3 = string
7 0002 real_len .endunion
8
9 00000000 employid .usect ".ebss", real_len ; allocate memory
10
11 employid .tag xample ; name an instance
12
13 00000000 08A1- ADD AR1, #employid.ival
00000001 0000
1
2 .union ; utag
3 0000 x .long ; member 1= long
4 0000 y .float ; member 2 = float
5 0000 z .int ; member 3 = int
6 0002 size_u .endunion ; size_u = 2