Ref:  Your note of Wed, 6 Nov 2019 18:06:46 +0000

>  LA 1,1(0)
>  ST 1,AXNUM
>  ...
>  L 4,AXVAL
>  ETDEF TYPE=SET...
> .
> the work areas are:
> AXL   DS 0F  AXLIST
> AXNUM DS H   Number of AXs Requested
> AXVAL DS H   Returned AX (OR EAX)

Hmmm, this definitely needs a Readers Comment Form, please.

The code should store a value of 1 into the first halfword of
the AXRES parameter list.  It could do that using LHI and STH,
or LA instead of LHI to do it the old way.  Specifying a base of
zero has no effect, as it is how the instruction would assemble
anyway.

An EAX value is an unsigned 16-bit value, so to be safe the code
should then pick up the EAX value neither with L (wrong) nor LH
but by clearing a register and using ICM with a mask of B'0011'
to load it into the low two bytes before using that register as
an input to ETDEF.  If LH is used instead, there is in theory a
risk that if the first bit of the EAX is set then the high half
of the register will be 1s instead of 0s, making the EAX value
invalid.

So this is what I would use for those instructions:

   LHI 1,1
   STH 1,AXNUM
   ...
   XR  4,4
   ICM 4,B'0011',AXVAL
   ETDEF TYPE=SET...

Jonathan Scott, HLASM
IBM Hursley, UK

Reply via email to