Thanks Peter, I tested the program with your suggested updates and it worked. I tried all the entries in the table and it worked for all of them. Thanks again for your help. Very much appreciated.
Thanks, Mark. . On Wed, Jun 5, 2024 at 3:42 AM Peter Vels <[email protected]> wrote: > Hi Mark, > > Try this: > > <snip> > CHKOPTS1 LA R7,TABLE1+4 ADDRESS OF FIRST ELEMENT > LH R8,TABLE1+2 LENGTH OF TABLE ENTRY > LR R6,R8 SAVE R8 FOR LATER > LA R9,TABLE1+2 ADDRESS OF BEGINNING OF TABLE > AH R9,TABLE1 CALC ADDR OF END OF TABLE > > LOOP1 CLC 0(9,R7),=C'FFFFFFFFF' > JE FOUND ENTRY FOUND = RC=0 > * --->>> LH R8,0(2,R7) <<<--- POINT TO LENGTH OF NEXT ENTRY > LR R8,R6 RESTORE R8 > LH R6,0(R8,R7) PUT THE NEXT LENGTH INTO R6 > LA R7,2(R7) SKIP OVER THE LENGTH FIELD > BXLE R7,R8,LOOP1 LOOPING UNTIL OPT FOUND > <snip> > > I don't like that I used an extra register, R6, so I'm hoping someone can > improve it. > > Peter > > On Wed, 5 Jun 2024 at 03:58, Mike Shaw <[email protected]> wrote: > > > Mark, > > > > You are coding a length (the 2) in the 2nd operand of your LH > > instruction...that 2 is being used by the machine as register 2. LH > always > > loads two bytes. > > > > Mike Shaw > > MVS/QuickRef Support > > Chisoft > > > > > > On Tue, Jun 4, 2024, 1:38 PM Mark Young <[email protected]> wrote: > > > > > Thanks for all the replies. See the code sample below. I'm getting > > stuck > > > trying to get the length for the next table entry into R8 so the BXLE > > > instruction loop the correct length. Let me know if I'm on the correct > > > path, or I'm in never never land. Also, the --->>> <<<--- is > > > where I think I'm getting stuck. > > > > > > TESTBXLE CSECT , > > > TESTBXLE AMODE 31 > > > TESTBXLE RMODE ANY > > > SAVE (14,12),,TESTBXLE*&SYSDATE*&SYSTIME > > > BALR R12,0 R12 - BASE REGISTER > > > USING *,R12 ESTABLISH ADDRESSABILITY > > > ST R13,SAVEAREA+4 SAVEAREA > > > LA R13,SAVEAREA POINTERS > > > * > > > CHKOPTS1 LA R7,TABLE1+4 ADDRESS OF FIRST ELEMENT > > > LH R8,TABLE1+2 LENGTH OF TABLE ENTRY > > > LA R9,TABLE1+2 ADDRESS OF BEGINNING OF TABLE > > > AH R9,TABLE1 CALC ADDR OF END OF TABLE > > > LOOP1 CLC 0(9,R7),=C'FFFFFFFFF' > > > BE FOUND ENTRY FOUND = RC=0 > > > --->>> LH R8,0(2,R7) <<<--- POINT TO LENGTH OF NEXT ENTRY > > > BXLE R7,R8,LOOP1 LOOPING UNTIL OPT FOUND > > > B NOTFND ENRTY NOT FOUND ? RC=8 > > > * > > > FOUND L R13,SAVEAREA+4 > > > RETURN (14,12),RC=0 > > > * > > > NOTFND L R13,SAVEAREA+4 > > > RETURN (14,12),RC=8 > > > * > > > PRINT NOGEN > > > YREGS > > > SAVEAREA DS 18F > > > TABLE1 DS 0F > > > DC XL2'008F' > > > DC XL2'000E',CL14'AAAAAAAAAAAAAA' > > > DC XL2'000F',CL15'BBBBBBBBBBBBBBB' > > > DC XL2'0011',CL17'CCCCCCCCCCCCCCCCC' > > > DC XL2'000D',CL13'DDDDDDDDDDDDD' > > > DC XL2'0017',CL23'EEEEEEEEEEEEEEEEEEEEEEE' > > > DC XL2'0009',CL9'FFFFFFFFF' > > > DC XL2'0013',CL19'GGGGGGGGGGGGGGGGGGG' > > > DC XL2'0019',CL25'HHHHHHHHHHHHHHHHHHHHHHHHH' > > > DC XL2'0008',CL8'IIIIIIII' > > > END TESTBXLE > > > > > > > > > Thanks, > > > Mark. > > > > > >
