David, Maybe you are approaching this from the wrong perspective. Why isn’t it incumbent on your macro users to code the length for you? Why does your macro have to be the one to figure out what to do?
OTOH, there are IBM “inner” macros which are used in various externally documented macros that are responsible for picking apart arguments and translating them into “correct” symbols for an instruction. In particular I think there are one or more IHBIN* macros with similar responsibilities (decode (an) argument(s) for the outer macro), so perhaps one of them can do the work for you, or at least serve as a source of inspiration for you to code your own version. Such macro code is tedious to write and debug, but the problem of decoding “arbitrary” arguments is not new and has certainly already been solved by IBM. Might be worth investigating, anyway. Peter From: IBM Mainframe Assembler List <[email protected]> On Behalf Of David Eisenberg Sent: Monday, February 26, 2024 9:47 AM To: [email protected] Subject: Re: Macro parameters: parsing a relocatable address Well, it's a CLC (not an MVC)... but I understand your solution. With that approach, and PRINT NOGEN is in effect, I get this in the listing: Loc Object Code Addr1 Addr2 0002AC D501 0000 0000 00000 00000 and what I'm trying to do (if possible) is to show the relocatable addresses under Addr1 and Addr2 in the listing alongside the D501. I.e., I'd like to generate a single CLC instruction, so that it looks that way in the printed object code. (I realize that PRINT NOGEN would show the addresses in the expansion, but they still wouldn't appear on the same line as the CLC opcode.) So far, the best solution I've come up with is my approach # 2 below (a single DC statement) which produces: Loc Object Code Addr1 Addr2 0002AC D501BE65BE63 That's not bad, but the assembler treats it like a DC (which it is), and not a machine instruction... and it looks like a DC in the object code. The reason I'm generating the CLC in a macro is because the macro is doing much more than this. There are various macro keyword parameters that I haven't bothered showing here, and lots of analysis going on with the comparands before I generate the CLC. I genuinely believe that showing all those things here would only serve to complicate my question. David On Mon, 26 Feb 2024 13:44:17 +0000, Seymour J Metz <[email protected]<mailto:[email protected]>> wrote: >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 >https://urldefense.com/v3/__http://mason.gmu.edu/*smetz3__;fg!!Ebr-cpPeAnfNniQ8HSAI-g_K5b7VKg!JyaTP2bKZR-gA1rIwn_R2ehzHljIr3u3vpWygK3ogqeegxcRzrPuZujPPzVM7n_uWXoUxOk_iSNN0FD5_antrAM-TfrW0Q$<https://urldefense.com/v3/__http:/mason.gmu.edu/*smetz3__;fg!!Ebr-cpPeAnfNniQ8HSAI-g_K5b7VKg!JyaTP2bKZR-gA1rIwn_R2ehzHljIr3u3vpWygK3ogqeegxcRzrPuZujPPzVM7n_uWXoUxOk_iSNN0FD5_antrAM-TfrW0Q$> >עַם יִשְׂרָאֵל חַי >נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר > >________________________________________ >From: IBM Mainframe Assembler List ><[email protected]<mailto:[email protected]>> on >behalf of David Eisenberg ><[email protected]<mailto:[email protected]>> >Sent: Monday, February 26, 2024 8:22 AM >To: [email protected]<mailto:[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 -- This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system.
