It depends on how they are used. If they are used with packed decimal values, then they have to be defined as packed decimal. If they are used with binary data, then they have to be be defined as binary of an appropriate length.
Going back to the MP question, my fuzzy brain remembered the lengths of $TPRICE and $TNUM wrong. You'll have to use the temporary variable. Just to be sure, I wrote this -
TESTMP CSECT
USING *,15
ZAP TEMP,$TPRICE
MP TEMP,$TNUM
ZAP $TPRICEX,TEMP
MP $TPRICE,$TNUM
SR 15,15
BR 14
$TPRICEX DC PL3'0'
$TPRICE DC PL3'100'
$TNUM DC PL2'25'
TEMP DC PL8'0'
END TESTMP
Sure enough, it failed on MP $TPRICE,$TNUM. MP TEMP,$TNUM went through OK. I think TEMP could be PL4, but I was too lazy to test it. Better too big than too small!
You will notice I initialized TEMP and $TPRICEX using the DC Assembler instruction. I almost always initialize storage like this; I always think it's safer.
I did not save and restore registers; the program only alters register 15 so it will be the return code; no other register was altered.