Using as: ESA/390 Directives |
---|
Next: ESA/390 Opcodes, Previous: ESA/390 Floating Point, Up: ESA/390-Dependent [Contents][Index]
as
for the ESA/390 supports all of the standard ELF/SVR4
assembler directives that are documented in the main part of this
documentation. Several additional directives are supported in order
to implement the ESA/390 addressing model. The most important of these
are .using
and .ltorg
These are the additional directives in as
for the ESA/390:
.dc
A small subset of the usual DC directive is supported.
.drop regno
Stop using regno as the base register. The regno must
have been previously declared with a .using
directive in the
same section as the current section.
.ebcdic string
Emit the EBCDIC equivalent of the indicated string. The emitted string
will be null terminated. Note that the directives .string
etc. emit
ascii strings by default.
EQU
The standard HLASM-style EQU directive is not supported; however, the
standard as
directive .equ can be used to the same effect.
.ltorg
Dump the literal pool accumulated so far; begin a new literal pool.
The literal pool will be written in the current section; in order to
generate correct assembly, a .using
must have been previously
specified in the same section.
.using expr,regno
Use regno as the base register for all subsequent RX, RS, and SS form instructions. The expr will be evaluated to obtain the base address; usually, expr will merely be ‘*’.
This assembler allows two .using
directives to be simultaneously
outstanding, one in the .text
section, and one in another section
(typically, the .data
section). This feature allows
dynamically loaded objects to be implemented in a relatively
straightforward way. A .using
directive must always be specified
in the .text
section; this will specify the base register that
will be used for branches in the .text
section. A second
.using
may be specified in another section; this will specify
the base register that is used for non-label address literals.
When a second .using
is specified, then the subsequent
.ltorg
must be put in the same section; otherwise an error will
result.
Thus, for example, the following code uses r3
to address branch
targets and r4
to address the literal pool, which has been written
to the .data
section. The is, the constants =A(some_routine)
,
=H'42'
and =E'3.1416'
will all appear in the .data
section.
.data .using LITPOOL,r4 .text BASR r3,0 .using *,r3 B START .long LITPOOL START: L r4,4(,r3) L r15,=A(some_routine) LTR r15,r15 BNE LABEL AH r0,=H'42' LABEL: ME r6,=E'3.1416' .data LITPOOL: .ltorg
Note that this dual-.using
directive semantics extends
and is not compatible with HLASM semantics. Note that this assembler
directive does not support the full range of HLASM semantics.
Next: ESA/390 Opcodes, Previous: ESA/390 Floating Point, Up: ESA/390-Dependent [Contents][Index]