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
