Tom, I don't believe that would work... if &FIELD1 is 7(R3) then the assembler would generate a syntax error.
David On Mon, 26 Feb 2024 13:38:16 -0500, Tom Marchant <m42tom-ibmm...@yahoo.com> wrote: >How about > CLC &FIELD1,&FIELD2 > ORG *-5 > DC X'1' > ORG , > >-- >Tom Marchant > >On Mon, 26 Feb 2024 10:33:27 -0500, David Eisenberg ><deisenbe...@optonline.net> wrote: > >>Tom, >> >>IIUC, what you're suggesting is this: >> >> CLC &FIELD1(2),&FIELD2 >> >>and that works if &FIELD1 is a relocatable symbol. But &FIELD1 might be a >>displacement and a base; e.g., 7(R3) , in which case this would be generated: >> >> CLC 7(R3)(2),<etc> >> >>Or &FIELD1 could be any other valid relocatable expression that would >>generate invalid syntax if I simply append (2) to the end of the string. >>That's my problem: the syntax of the explicit length insertion depends on the >>syntax of the relocatable expression used for &FIELD1. >> >>David >> >>On Mon, 26 Feb 2024 10:21:37 -0500, Tom Marchant <m42tom-ibmm...@yahoo.com> >>wrote: >> >>>Perhaps I'm being dense, but why not >>> CLC FIELD1(2),FIELD2 >>> >>>-- >>>Tom Marchant >>> >>>On Mon, 26 Feb 2024 09:47:29 -0500, David Eisenberg >>><deisenbe...@optonline.net> wrote: >>> >>>>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 <sme...@gmu.edu> 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 >>>>>http://mason.gmu.edu/~smetz3 >>>>>עַם יִשְׂרָאֵל חַי >>>>>נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר >>>>> >>>>>________________________________________ >>>>>From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> on >>>>>behalf of David Eisenberg <deisenbe...@optonline.net> >>>>>Sent: Monday, February 26, 2024 8:22 AM >>>>>To: ASSEMBLER-LIST@LISTSERV.UGA.EDU >>>>>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