(as) ESA/390 Directives

Info Catalog (as) ESA/390 Floating Point (as) ESA/390-Dependent (as) ESA/390 Opcodes
 
 9.12.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.
 
 
Info Catalog (as) ESA/390 Floating Point (as) ESA/390-Dependent (as) ESA/390 Opcodes
automatically generated by info2html