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

Reply via email to