Thanks. I will try that. Sincerely, Dave Clark
On Wed, Feb 11, 2026 at 12:13 AM Pieter Wiid <[email protected]> wrote: > MVIY will accept negative displacements > > On February 11, 2026 2:48:55 AM GMT+02:00, Charles Mills <[email protected]> > wrote: > >I don't know of any instructions that accept a hard-coded negative > displacement. You can't do MVI 0,-6(R3) > > > >The closest you can come is a negative index. For the indexed > instructions, the following will work. > > > >LHI R2,-6 > > > >STH R0,0(R2,R3) Store R0 -6 from R3 > > > >Probably not worth the bother for your situation. > > > >/CM/ > > > >On 2/10/2026 2:41 PM, David Clark wrote: > >> Let me preface this by saying I'm not really that familiar with newer > >> instructions. But, I have a 40-year old subroutine that provided 15 > string > >> manipulation functions for COBOL programs. Now I am adding three more > (one > >> of which came up in my previous post). At the same time... > >> > >> The previous support was for one function at a time, even though > multiple > >> input strings were supported (i.e., a variable-length parm list; with > the > >> first for a header work area [R8], the second for a large "master" > buffer > >> [R9], and the third for the beginning of one or more "working" > >> string parameters[R10]; where R11 is the code base register but only > needed > >> for the fixed storage area LOCTR'd to the beginning of the subroutine). > >> > >> I would like to add a "mini-scripting" feature that allows one of 16 > >> different functions to be performed on a string-by-string basis and in a > >> single CALL. Naturally, this would have to be backward-compatible. To > do > >> this I changed the string DSECT to have a "redefined" layout--as > follows: > >> > >> TXTINPT DSECT > >> USING TXTINPT,R10 ESTABLISH REG 10 AS BASE > >> TXTSREQU DS CL1 SCRIPTING REQUEST CODE > >> TXTSRETN DS CL1 SCRIPTING RETURN CODE > >> TXTSSTRL DS H SCRIPTING INPUT/OUTPUT STRING LENGTH > >> TXTSSTRG DS 256CL1 SCRIPTING INPUT/OUTPUT STRING > >> ORG TXTINPT > >> TXTSTRL DS H LEGACY INPUT/OUTPUT STRING LENGTH > >> TXTSTRG DS 256CL1 LEGACY INPUT/OUTPUT STRING > >> > >> So as not to have to duplicate *all* of the code, I figured I would just > >> save off the first two bytes and then increment R10 by 2 such that the > last > >> two fields would work for both modes (and the last two fields are the > ones > >> that are referenced by the remainder of the subroutine). > >> > >> That is fine, but when I want to save the return code for the current > >> string and function, I initially coded it this way (I presume it is OK > to > >> use regular arithmetic on an address)--and then continue on with > whatever > >> else needs to be done next. > >> > >> IF TXTREQU,EQ,C'S' IF IN SCRIPTING MODE > >> SHI R10,2 POINT TO SCRIPTING PARM AREA > >> MVC TXTSRETN,HOLDRETN SAVE STRING RETURN CODE > >> AHI R10,2 POINT TO LEGACY LENGTH AND STRING > >> ENDIF ENDIF > >> > >> But then I had a thought... Is there any instruction that will let you > >> move (and examine) data to/in a location prior to a given address? > Now, I > >> saw where an AI generated a sample MVC instruction that used a negative > >> displacement, but I didn't know if that was legitimate? > Recommendations? > >> > >> Sincerely, > >> > >> Dave Clark > >> -- > >> int.ext: 91078 > >> direct: (937) 531-6378 > >> home: (937) 751-3300 > >> > >> Winsupply Group Services > >> 3110 Kettering Boulevard > >> Dayton, Ohio 45439 USA > >> (937) 294-5331 >
