My advice is to do what most assembler programmers and most compilers do.
Use base registers for data and relative addressing for instructions.

Since most data access instructions require a base register, most data areas
will have a base register and USING established before a macro is invoked.
Yes, it is possible to use LARL to set up a temporary base register before
every data access instruction. e.g.
LARL R14,TARGET
LARL R15,SOURCE
MVC 0(L'TARGET,R14),0(R15)
But it is impractical and pipeline hostile to do so.

A good use for LARL is to set up the base register for the constants - and
maybe the modifiable data area if the program is not reentrant.  LARL can
even be used to get the address of other control sections.  But I think you
are trying to use LARL for everything.

David Bond

On Mon, 20 Dec 2010 10:46:43 -0500, Bodoh John Robert wrote:
>David,
>
>I cannot assume anything, except that the CPU on which the program is
>running supports baseless instructions.  So, the phrase "in general"
>doesn't apply.
>
>The fact is, a program could specify a symbol on a macro and the symbol
>could reference storage anywhere.  It could be a based symbol or a
>baseless symbol addressable by relative addressing instructions.
>Relative addressing is NOT restricted to branching.  LARL is not a
>branch.
>
>John

Reply via email to