ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
声明联合体类型
[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 .global employid
2 xample .union ; utag
3 0000 ival .word ; member1 = int
4 0000 fval .float ; member2 = float
5 0000 sval .string ; member3 = string
6 0002 real_len .endunion ; real_len = 2
7
8 000000 .bss employid, real_len ;allocate memory
9
10 employid .tag xample ; name an instance
11 000000 0000- ADD employid.fval, A ; access union element
1
2 ; utag
3 0000 x .long ; member1 = long
4 0000 y .float ; member2 = float
5 0000 z .word ; member3 = word
6 0002 size_u .endunion ; real_len = 2
7