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

Reply via email to