<snip>
The example is trying to show how to set an EAX for a SETDEF macro.
</snip>
There is no SETDEF macro.  There isn't even a TYPE=SETDEF option on ETDEF. 
There is TYPE=SET. The post looked like copy/paste so a typo like that 
seemed surprising.

Everyone's right, of course, that the "ST" ought to be "STH" and the "L" 
ought to be halfword-oriented instead.

<snip>
My understanding - the first 3 instructions want to establish an EAX..
</snip>
Not true. Those instructions appear to be a precursor to invoking the 
AXRES service which you do not show.

<snip>
The first Instruction load 1 off of Register 0.
Is register 0 assumed to be zero ?
</snip>
No, I would say that register 0 is not assumed to be anything. A base reg 
of 0 does not participate in the addressing calculation. 

<snip>
LA   R1,1 
</snip>
LA R1,1 is exactly equivalent to LA R1,1(0). Just look at the generated 
object code. 

<snip>
When specified as a base or index register, i.e. as Bn or Xn in any
instruction with such fields in its description, R0 is treated as if
it contained 0 when evaluated as part of the address arithmetic
process. 
</snip>
I've always thought of it as "a base reg of 0 is not used". Maybe 
internally that is accomplished by treating the base reg as if it 
contained 0. But maybe some other approach is used. Probably they do 
whatever is the fastest way of dealing with it (which might even change 
from machine to machine).

Peter Relson
z/OS Core Technology Design

Reply via email to