I'll give you a freebie, but not your MOVE macro. This shows some of the techniques you'll need. The intent of the macro is to store a code into a single byte of storage provided the code is greater than the code already there. The code can be specified directly or in a register.
MACRO
&NAME SETCODE &LOC,&RC
AIF ('&RC' NE '').TESTLOC
MNOTE 8,'RETURN CODE REQUIRED!'
MEXIT
.TESTLOC AIF ('&LOC' NE '').XPAND
MNOTE 8,'LOCATION REQUIRED!'
MEXIT
.XPAND AIF ('&RC'(1,1) EQ '(').RFORM
&NAME CLI &LOC,&RC
BNL *+8
MVI &LOC,&RC
MEXIT
.RFORM ANOP
&NAME CLM &RC(1),B'0001',&LOC
BNH *+8
STC &RC(1),&LOC
MEND
In the AIF at .XPAND, '&RC'(1,1) extracts a substring from &RC starting at position 1, for 1 byte. The &RC(1) in the CLM and STC instructions extracts the first element in a string of elements enclosed in parens, so that something like (15) becomes 15 when the macro expands. Just specifying &RC to generate (15) in the expansion is OK, too, but the usual convention is to use the &RC(1) method.