beautypg.com

Zilog Z8F0130 User Manual

Page 337

background image

UM013037-1212

Structures and Unions in Assembly Code

Zilog Developer Studio II – Z8 Encore!

User Manual

313

.STRUCT and .ENDSTRUCT Directives

– see page 313

.TAG Directive

– see page 314

.UNION Directive

– see page 316

.WITH and .ENDWITH Directives

– see page 316

.STRUCT and .ENDSTRUCT Directives

A structure is a collection of various elements grouped together under a single name for
convenient handling. The

.STRUCT

and

.ENDSTRUCT

directives can be used to define the

layout for a structure in assembly by identifying the various elements and their sizes. The

.STRUCT

directive assigns symbolic offsets to the elements of a structure. It does not allo-

cate memory. It merely creates a symbolic template that can be used repeatedly.

The

.STRUCT

and

.ENDSTRUCT

directives have the following form:

[stag]

.STRUCT

[offset | : parent]

[name_1]

DS

count1

[name_2]

DS

count2

[tname]

.TAG

stagx [count]

...

[name_n]

DS

count3

[ssize]

.ENDSTRUCT

[stag]

The label stag defines a symbol to use to reference the structure; the expression offset, if
used, indicates a starting offset value to use for the first element encountered; otherwise,
the starting offset defaults to zero.

If parent is specified rather than offset, the parent must be the name of a previously
defined structure, and the offset is the size of the parent structure. In addition, each name
in the parent structure is inserted in the new structure.

Each element can have an optional label, such as name_1, which is assigned the value of
the element’s offset into the structure and which can be used as the symbolic offset. If stag
is missing, these element names become global symbols; otherwise, they are referenced
using the syntax

stag.name

. The directives following the optional label can be any space

reserving directive such as

DS

, or the

.TAG

directive (defined below), and the structure

offset is adjusted accordingly.

The label ssize, if provided, is a label in the global name space and is assigned the size of
the structure.

If a label stag is specified with the

.ENDSTRUCT

directive, it must match the label that is

used for the

.STRUCT

directive. The intent is to allow for code readability with some

checking by the assembler.