<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