ZHCU947E June 2015 – January 2023
声明结构体类型
[stag] .struct [expr]
[mem0] element [expr0]
[mem1] element [expr1]
...
[memn] .tag stag [exprn]
...
[memN] element [exprN]
[size] .endstruct
label .tag stag
.struct 指令用于为数据结构定义的元素分配符号偏移量。这样便可将类似的数据元素分为一组,并由汇编器计算元素偏移量。这与 C 结构或 Pascal 记录相似。.struct 指令不会分配存储器空间;仅创建一个可重复使用的符号模板。
.endstruct 指令用于终止结构定义。
.tag 指令用于为 label 提供结构特征,简化符号表示,还可定义包含其他结构体的结构。.tag 指令不会分配存储器空间,必须事先定义 .tag 指令的结构标签(stag)。
与 .struct、.endstruct 和 .tag 指令一起使用的参数包括:
以下示例展示了 .struct、.tag 和 .endstruct 指令的各种用途。
1 real_rec .struct ; stag
2 00000000 nom .int ; member1 = 0
3 00000004 den .int ; member2 = 1
4 00000008 real_len .endstruct ; real_len = 2
5
6 00000000 0080016C- LDW *+B14(real+real_rec.den), A1
7 ; access structure
8
9 00000000 .bss real, real_len ; allocate mem rec
10
11 cplx_rec .struct ; stag
12 00000000 reali .tag real_rec ; member1 = 0
13 00000008 imagi .tag real_rec ; member2 = 2
14 00000010 cplx_len .endstruct ; cplx_len = 4
15
16 complex .tag cplx_rec ; assign structure
17 ; attribute
18 00000008 .bss complex, cplx_len ; allocate mem rec
19
20 00000004 0100046C- LDW *+B14(complex.imagi.nom), A2
21 ; access structure
22 00000008 0100036C- LDW *+B14(complex.reali.den), A2
23 ; access structure
24 0000000c 018C4A78 CMPEQ A2, A3, A3
1 .struct ; no stag puts
2 ; mems into global
3 ; symbol table
4
5 00000000 X .byte ; create 3 dim
6 00000001 Y .byte ; templates
7 00000002 Z .byte
8 00000003 .endstruct
1 bit_rec .struct ; stag
2 00000000 stream .string 64
3 00000040 bit7 .field 7 ; bit7 = 64
4 00000040 bit1 .field 9 ; bit9 = 64
5 00000042 bit5 .field 10 ; bit5 = 64
6 00000044 x_int .byte ; x_int = 68
7 00000045 bit_len .endstruct ; length = 72
8
9 bits .tag bit_rec
10 00000000 .bss bits, bit_len
11
12 00000000 0100106C- LDW *+B14(bits.bit7), A2
13 ; load field
14 00000004 0109E7A0 AND 0Fh, A2, A2 ; mask off garbage