f78
Sub-Sections
Contents|Index|Previous|Next
Sub-Sections
Assembled bytes conventionally fall into two sections: text and data. You may
have separate groups of data in named sections that you want to end up near to
each other in the object file, even though they are not contiguous in the
assembler source. as allows you to use subsections for this purpose. Within each section, there can be numbered subsections with
values from 0 to 8192. Objects assembled into the same subsection go into the
object file together with other objects in the same subsection. For example, a
compiler might want to store constants in the text section, but might not want
to have them interspersed with the program being assembled. In this case, the
compiler could issue a .text 0 before each section of code being output, and a .text 1 before each group of constants being output.
Subsections are optional. If you do not use subsections, everything goes in
subsection number zero.
Each subsection is zero-padded up to a multiple of four bytes. (Sub-sections
may be padded a different amount on different flavors of
as.)
Subsections appear in your object file in numeric order, lowest numbered to
highest. (All this to be compatible with other people’s assemblers.) The object
file contains no representation of subsections;
ld and other programs that manipulate object files see no trace of them. They
just see all your text subsections as a text section, and all your data
subsections as a data section.
To specify which subsection you want subsequent statements assembled into, use
a numeric argument to specify it, in a
.text expression or a .data expression statement. When generating COFF output, you can also use an extra subsection
argument with arbitrary named sections: .section name, expression. expression should be an absolute expression. (See Expressions
849
.) If you just say .text, then .text 0 is assumed. Likewise, .data means .data 0. Assembly begins in text 0. For instance, use the following example.
.text 0 # The default subsection is text 0 anyway.
.ascii "This lives in the first text subsection. *"
.text 1
.ascii "But this lives in the second text subsection."
.data 0
.ascii "This lives in the data section,"
.ascii "in the first data subsection."
.text 0
.ascii "This lives in the first text section,"
.ascii "immediately following the asterisk (*)."
Each section has a location counter incremented by one for every byte assembled into that section. Because
subsections are merely a convenience restricted to as, there is no concept of a subsection location counter. There is no way to
directly manipulate a location counter—but the .align directive changes it, and any label definition captures its current value.
The location counter of the section where statements are being assembled is said
to be the active location counter.
0