On Sat, 1 Jan 2011 18:13:24 GMT "[email protected]" <[email protected]> wrote:
:>I have posted two coded fragments from a program I found on the Internet. :>----------------------------------------------------------------------- :>* 00009700 :> L R3,0(,R1) PARAMETER POINTER 00009800 :> LA R3,0(,R3) ZERO BIT 31 00009900 :>* 00010000 :> MODESET MODE=SUP 00010100 :> IPK , Get PSW Key in R2 00010200 :> LR R11,R2 SAVE PSWKEY 00010300 :> SPKA X'70' Switch To PSW Key 7 From address 00010400 :>* 00010500 :> STORAGE OBTAIN, OBTAIN WORKAREA X00010600 :> LENGTH=WORKLEN, X00010700 :> CALLRKY=YES, X00010800 :> LOC=BELOW, X00010900 :> SP=129 00011000 :> MVC 4(4,R1),=CL4'F1SA' INDICATE LINKAGE STACK USED 00011100 :> LR R13,R1 00011200 :> USING WORKAREA,R13 00011300 :>* 00011600 :> SPKA 0(R11) Switch Back To Original PSW Key 00011700 :>-------------------------------------------------------------------------------- :>In the Above snipet of code A Storage Obtain is issued for Subpool 129 with :>the CALLRKY=YES. It is my understanding that PSW Key had been previously set :>to Key 7 by the SPKA instruction. :>-------------------------------------------------------------------------------- :>DLM8 DS 0H 00013800 :> SPKA X'70' Switch Into Key 7 00013900 :> XC EPNAME,EPNAME 00014000 :> LR R0,R4 COPY LENGTH TO R0 00014100 :> LR R1,R11 COPY SOURCE KEY TO R1 00014200 :> MVCSK EPNAME,2(R3) COPY EPNAME 00014300 :> OC EPNAME,=CL8' ' FORCE UPPERCASE AND BLANKS 00014400 :> SPKA 0(R11) Switch Back To Original PSW Key 00014500 :>-------------------------------------------------------------------------------- :>In a second code fragment (Above) the author again sets the PSW Key to Key 7, then prepares to issue an MVCSK instruction to move some data from R3 to the storage Obtained in the first code fragment. :>I am assuming the "MVCSK" instruction is the proper method for moving data between :>two different keys, when Not in Key 0. :>Register 3 contained the address of the MVS PARMS data from the EXEC DD Statement. :>-------------------------------------------------------------------------------- :>* 00037100 :>WORKAREA DSECT , KEY 7 WORKAREA 00037200 :>SAVEAREA DS 18F 00037300 :>STECB DS 1F ECB ADDRESS FOR ATTACH 00037400 :>STTCB DS 1F TCB ADDRESS RETURNED BY ATTACH 00037500 :>EPNAME DS CL8 EPNAME FOR ATTACH EPLOC= 00037600 :>LATT DS XL(LATTL) ATTACH WORK AREA 00037700 :>RACROUTE DS XL(MFLROUTL) WORKAREA FOR RACROUTE 00037800 :>SAFWK DS XL512 WORKAREA FOR SAF 00037900 :>WORKLEN EQU *-WORKAREA 00038000 :>* 00038100 :>-------------------------------------------------------------------------------- :>So Why is it necessary to use MVCSK instruction in the second code fragment and its not necessary in the first code fragment ? In the first case the source field is a literal, which in a reentrant program will be in key zero non-fetch protected storage. Thus it can be accessed by any key. In the second case the source field is in fetch protected storage, thus MVCSK is required. -- Binyamin Dissen <[email protected]> http://www.dissensoftware.com Director, Dissen Software, Bar & Grill - Israel Should you use the mailblocks package and expect a response from me, you should preauthorize the dissensoftware.com domain. I very rarely bother responding to challenge/response systems, especially those from irresponsible companies.
