Why? What are you trying to solve by wrappng the MVC in a macro?
MVC 0(2),0
ORG *-4
DC S(&OP1)
DC S(&OP2)
but, again, why?
--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3
עַם יִשְׂרָאֵל חַי
נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר
________________________________________
From: IBM Mainframe Assembler List <[email protected]> on behalf
of David Eisenberg <[email protected]>
Sent: Monday, February 26, 2024 8:22 AM
To: [email protected]
Subject: Macro parameters: parsing a relocatable address
I’m seeking some guidance if anyone is able to help. I’d like to write a macro
like this:
&NAME MYCLC &FIELD1,&FIELD2
in which both &FIELD1 and &FIELD2 are relocatable addresses. It’s &FIELD1 that
is of particular interest to me. &FIELD1 might be expressed as a hard-coded
displacement and base register, or a relocatable symbol… or it could be an
absolute symbol equivalent to a displacement, followed by a base register… etc.
I.e., it could be any valid relocatable address syntax. What &FIELD1 will *not*
have is an *explicit length.* The macro parameters will specify valid
relocatable addresses, and nothing more.
My question: I’d like the MYCLC macro to generate a CLC instruction in which
the two parameters are compared to each other for a constant length of 2. So
far, the only ways I can think of to do this are:
1. Parse &FIELD1 to figure out how the relocatable address is expressed, and
insert an explicit length of 2 to generate a valid CLC first operand. I would
do it that way, but (unless I'm missing something) it seems quite complex to
code.
2. Generate this DC statement: DC X’D501’,S(&FIELD1,&FIELD2) . This seems to
work, but it’s a bit unattractive in a PRINT GEN (and it looks a bit odd in the
assembly listing, because the assembler doesn't treat it like a machine
instruction in the object code on the left side of the listing).
I’m wondering if anyone can suggest a reasonable way to code option 1 above.
Can the macro assembler give me any help in parsing &FIELD1 so that I can
transform that parameter to insert an explicit length, regardless of how
&FIELD1 is expressed? Or is there some other approach that I haven’t considered
at all? Or should I just go with option 2 above?
Please note that I don’t want the macro to generate more than one machine
instruction. One way or another, I just want the macro to generate a CLC for a
length of 2. (And I really do want the CLC located in the macro as opposed to
open code, because the macro does some analysis on the comparands prior to
generating the CLC.)
Any advice would be appreciated... thank you!
David