This was a very lengthy thread in which the OP multiple times ignored those who 
correctly provided what was needed. I don't know why the OP would not simply 
take the advice and proceed.

The error has nothing to do with "label", although the lack of allowing "label" 
is not typically good. The operand was not specified in column 1.

As was mentioned, the single macro variable was treated as "the opcode". There 
is no "opcode" of "SR 15,15". That is the way assembler macro substitution 
works. Should it? Maybe not, but history and compatibility demand that it not 
be changed.

All of the approaches demonstrated in the macro below work:
         MACRO
         ZERO  &N
         SR    &N,&N
&OPCODE  SETC  'SR'
&OPERAND SETC  '&N'
         SR    &OPERAND,&OPERAND
         &OPCODE &OPERAND,&OPERAND
&OPERANDS SETC  '&N,&N'
         &OPCODE &OPERANDS
         MEND

And then add support for a label for better usability.

(I think older releases of the assembler used to require &LCLC for each SETC 
symbol, but apparently that is no longer required.)

I saw no mention that "SR" is at best the 4th best choice for zeroing a 
register. I'll leave the other 3 (and perhaps more) as an exercise for the 
reader, for a while.

Peter Relson
z/OS Core Technology Design

Reply via email to