There's always the translate instruction -
TR STRING,TABLE
...
STRING DC C'UPPER CASE CHARACTERS'
TABLE DC 0XL256'0',(C'A')AL1(*-TABLE),9AL1(*-TABLE-X'40')
DC (C'J'-(*-TABLE))AL1(*-TABLE),9AL1(*-TABLE-X'40')
DC (C'S'-(*-TABLE))AL1(*-TABLE),8AL1(*-TABLE-X'40')
DC (256-(*-TABLE))AL1(*-TABLE)
The code to generate the TABLE are will not work with the Assist Assembler, but it will work with the IBM Assemblers. Obviously it is tailored to EBCDIC; a table to perform something equivalent for ASCII would be different
(C'A')AL1(*-TABLE) generates bytes to translate characters from X'00' to X'C0' to themselves.
9AL1(*-TABLE-X'40') generates bytes to translate A through I to a through i. The remainder of the table you can figure out for yourself.
The classic code to translate EBCDIC lower case characters to upper case is OC STRING,=256X'40'. This code does not alter the punctuation characters, upper case characters, and numeric characters. Why is an exercise for you. My first thought was something like NC STRING,=256AL1(255-X'40') rather than the TR, but I realized it would disturb the punctuation characters, and the numbers. Oops.