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