Next: ESA/390 Opcodes, Previous: ESA/390 Floating Point, Up: ESA/390-Dependent [Contents][Index]

#### 9.14.5 ESA/390 Assembler Directives

`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]