1.. Wow. I did not know that, and I have been coding S/360 and follow-ons 
assembler since 1968. That would be an obscure bug-introducer.

2. I would argue that the preferred way (now -- not in 1968!) of loading a 
constant 256 into R2 is LHI R2,256. Avoids the problem below, is arguable\y 
more straightforward (no "address" anywhere in the picture) and might be faster 
on some machines.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]] On 
Behalf Of Bob Raicer
Sent: Friday, November 8, 2019 1:15 PM
To: [email protected]
Subject: Re: Questionable Instructions in Obtaining EAX documentation

Well, the statement from Peter Relson (and others) which is
essentially:
----------
LA R1,1 is exactly equivalent to LA R1,1(0).  Just look at the
generated object code.
----------
is not totally true.  It all depends upon which USINGs are in effect.

Take a peek at the following example (admittedly a bit unusual, but
perfectly legitimate).

    Loc   Object Code      Addr1    Addr2    Stmt   Source Statement
00000000                00000000 00000008      1 EXAMPLE  CSECT ,
                     R:9 00000000               2          USING 0,9
00000000 4120 9100               00000100      3          LA 2,256
00000004 4120 0100               00000100      4          LA 2,256(,0)
                                                5          END   ,

If the intent is to place a truly non-relocatable value (e.g., a
constant) into a GPR (which IS the intent of this example), then I
believe the coding style of statement 4 is the preferred way to go; it
is explicit and unambiguous.  This applies to many other instructions
which use base+displacement operands (examples:  SLL, SRL, SLDL)
which are not interpreted as address values.

Reply via email to