I see thanks the displacement used calculating Gr. If not for LAE You would have to use L RX,8(,RY) Then CPYA. RX,RY. Rob Thanks for explanation of practical Use of LAE
Sent from my iPhone On Mar 6, 2012, at 5:53 PM, Rob Scott <[email protected]> wrote: > Micheal, > > Putting a bit of "meat on the bones" to create an example piece of code with > comments and notes : > > (o) We are going to process a linked list of "FOO" elements in a dataspace > and calculate some random hash value based on a subset of bytes in the > FOO_NAME field. > (o) This code has been just typed into my e-mail - they may be typos/errors > (o) "WA" is the working storage structure/DSECT > > > DO , > ALESERV ADD,STOKEN=WA_FOO_STOKEN, Add dataspace containing linked > list of FOOs > ALET=WA_FOO_ALET, > AL=WORKUNIT, > MF=(E,WA_ALESERV_LIST) > DOEXIT (LTR,R15,R15,NZ) Failed - quick exit > SAC 512 AR-Mode (1) > SYSSTATE ASCENV=AR Inform assembler of AR-mode > L R6,WA_FOO_HEAD Get head of list > LAM AR6,AR6,WA_FOO_ALET Get dataspace ALET (2) > USING FOO,R6 > DO UNTIL=(ICM,R6,B'1111',FOO_NEXT,Z) Traverse list (3) > LAE R7,FOO_NAME Point to FOO_NAME (4) > LAE R1,8(,R7) Use R1 for temp pointer (5) > XC WA_HASH,WA_HASH Zero hash value > DO FROM=(R14,=AL4(L'FOO_NAME-8)) > XR R0,R0 > IC R0,0(,R1) Get 1-byte (6) > AL R0,WA_HASH Add to hash value > ST R0,WA_HASH Store new value > LAE R1,1(,R1) Next byte of name (6) > ENDDO > NC WA_HASH,=X'000000FF' 0-255 range for hash > ENDDO > SAC 0 Inform assembler (7) > SYSSTATE ASCENV=P > ENDDO (8) > > ....rest of code (9) > > Notes : > > (1) I think it is always worth having a macro to do both the SAC and the > SYSSTATE for you in one hit (not shown)- stops you forgetting the SYSSTATE > and that can confuse any macros that follow. > (2) Loading the ALET in to the AR for the first time - R6 will be able to > address data in the dataspace > (3) AR-mode makes traversing data structures in dataspaces easy as you can > just use normal instructions (if you play by the rules) > (4) Because LAE used and FOO dsect covers R6+AR6 - AR7 will contain ALET for > dataspace after instruction executed > (5) This time we are using R1 to point at 8 bytes into FOO_NAME (for whatever > reason) - note that AR1 will get the dataspace ALET > (6) Loading and using a byte from the dataspace > (7) See (1) > (8) Assuming all ARs are zero before we start, if the code goes thru > successfully, then AR1, AR6 and AR7 will contain the ALET of the dataspace > here - you may wish to consider zeroing the ARs at this point if they are no > longer needed. > (9) Prudent use of "LAM AR14,AR1,=4A(0)" will protect you from > unintentional AR values in "working" regs after calling certain system > services - you can never be sure how in-house macros expand. > > Hope this helps > > > Rob Scott > Lead Developer > Rocket Software > 275 Grove Street * Newton, MA 02466-2272 * USA > Tel: +1.781.684.2305 > Email: [email protected] > Web: www.rocketsoftware.com > > > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf > Of Micheal Butz > Sent: 06 March 2012 21:53 > To: [email protected] > Subject: Re: LAE instruction > > So SAC 512 > LAE R3,0(,R4) > > R3 is CPYA from access R4 right > > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf > Of McKown, John > Sent: Tuesday, March 06, 2012 4:22 PM > To: [email protected] > Subject: Re: LAE instruction > > Yes, from the LAE instruction text: > > <quote> > The address specified by the X2, B2, and D2 fields is placed in general > register R1. Access register R1 is loaded with a value that depends on the > current value of the address-space-control bits, bits 16 and > 17 of the PSW. If the address-space-control bits are > 01 binary, the value placed in the access register also depends on whether > the B2 field is zero or non- zero. > > ... > > PSW Bits > 16 and 17 > Value Placed in Access Register R1 > 00 00000000 hex (zeros in bit positions 0-31) > > 10 00000001 hex (zeros in bit positions 0-30 and one in bit position 31) > > 01 If B2 field is zero: 00000000 hex (zeros in bit positions 0-31) If B2 > field is nonzero: Contents of access register B2 > > 11 00000002 hex (zeros in bit positions 0-29 and 31, and one in bit position > 30) > > From the SAC instruction > > Code Name of Mode Result in PSW Bits 16 & 17 > 0000 Primary space 00 > 0001 Secondary space 10 > 0010 Access register 01 > 0011 Home space 11 > All others Invalid > > </quote> > > SAC 512 has is '0010' from the above and results in b'01' or AR mode in the > PSW bits 16 & 17. Which is what is required for the LAE instruction to set > the access register of the result access register from the base access > register (when not b'0000'). > > > > John McKown > > Systems Engineer IV > > IT > > > > Administrative Services Group > > > > HealthMarkets(r) > > > > 9151 Boulevard 26 * N. Richland Hills * TX 76010 > > (817) 255-3225 phone * > > [email protected] * www.HealthMarkets.com > > > > Confidentiality Notice: This e-mail message may contain confidential or > proprietary information. If you are not the intended recipient, please > contact the sender by reply e-mail and destroy all copies of the original > message. HealthMarkets(r) is the brand name for products underwritten and > issued by the insurance subsidiaries of HealthMarkets, Inc. -The Chesapeake > Life Insurance Company(r), Mid-West National Life Insurance Company of > TennesseeSM and The MEGA Life and Health Insurance Company.SM > > > >> -----Original Message----- >> From: IBM Mainframe Discussion List >> [mailto:[email protected]] On Behalf Of Micheal Butz >> Sent: Tuesday, March 06, 2012 3:00 PM >> To: [email protected] >> Subject: Re: LAE instruction >> >> John Mckiwns reply was a explanation of the SAC inst. >> Which I am aware of >> >> The Doc for LAE says the inst the functionality is dependent on PSW >> bits >> >> 16 17 address space control bits these are set by the SAC inst >> >> >> So my original question remains does >> >> Should address space control buts be set via the sac before executing >> the LAE >> >> >> Sent from my iPhone >> >> On Mar 6, 2012, at 3:37 PM, Rob Scott <[email protected]> >> wrote: >> >>> John McKown's reply covered these points very well >>> >>> Rob Scott >>> Lead Developer >>> Rocket Software >>> 275 Grove Street * Newton, MA 02466-2272 * USA >>> Tel: +1.781.684.2305 >>> Email: [email protected] >>> Web: www.rocketsoftware.com >>> >>> >>> -----Original Message----- >>> From: IBM Mainframe Discussion List >> [mailto:[email protected]] On Behalf Of Micheal Butz >>> Sent: 06 March 2012 19:59 >>> To: [email protected] >>> Subject: Re: LAE instruction >>> >>> Thanks >>> >>> Regarding my questions >>> >>> The doc says the inst is dependent >>> On address space control bits which is set by the SAC inst. >>> >>> Secondly seems like the displacement doesn't play a role in the inst >>> >>> Sent from my iPhone >>> >>> On Mar 6, 2012, at 2:49 PM, Rob Scott >> <[email protected]> wrote: >>> >>>>> You have coded "LAE R3,0(R4)" - which is the same as >> "LAE R3,(R4,R0)" >>>> >>>> Should read : >>>> >>>> You have coded "LAE R3,0(R4)" - which is the same as >> "LAE R3,0(R4,R0)" >>>> >>>> Rob Scott >>>> Lead Developer >>>> Rocket Software >>>> 275 Grove Street * Newton, MA 02466-2272 * USA >>>> Tel: +1.781.684.2305 >>>> Email: [email protected] >>>> Web: www.rocketsoftware.com >>>> >>>> >>>> -----Original Message----- >>>> From: IBM Mainframe Discussion List >> [mailto:[email protected]] On >>>> Behalf Of Rob Scott >>>> Sent: 06 March 2012 19:47 >>>> To: [email protected] >>>> Subject: Re: LAE instruction >>>> >>>> Commas are *very* important in AR-mode >>>> >>>> You have coded "LAE R3,0(R4)" - which is the same as >> "LAE R3,(R4,R0)" >>>> >>>> Coded that way there is no automatic way that AR3 is going >> to inherit the AR4 value. >>>> >>>> You need : "LAE R3,0(,R4)" >>>> >>>> This will ensure that AR3 is populated from the AR for the >> referenced base register R4. >>>> >>>> >>>> Rob Scott >>>> Lead Developer >>>> Rocket Software >>>> 275 Grove Street * Newton, MA 02466-2272 * USA >>>> Tel: +1.781.684.2305 >>>> Email: [email protected] >>>> Web: www.rocketsoftware.com >>>> >>>> >>>> -----Original Message----- >>>> From: IBM Mainframe Discussion List >> [mailto:[email protected]] On >>>> Behalf Of Micheal Butz >>>> Sent: 06 March 2012 19:05 >>>> To: [email protected] >>>> Subject: LAE instruction >>>> >>>> Hi, >>>> >>>> >>>> >>>> I have two part question regarding the LAE instruction >>>> >>>> >>>> >>>> . What would the sac value e.g. 256,512,768 have >> to be that when >>>> using the LAE instructions with the following operands LAE >> 3,0(R4) >>>> would >>>> AR3 get loaded with AR4 >>>> >>>> >>>> >>>> . Second what value does the displacement play in >> the instruction >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> Thanks >>>> >>>> >>>> >> ---------------------------------------------------------------------- >>>> For IBM-MAIN subscribe / signoff / archive access >> instructions, send >>>> email to [email protected] with the message: INFO IBM-MAIN >>>> >>>> >> ---------------------------------------------------------------------- >>>> For IBM-MAIN subscribe / signoff / archive access >> instructions, send >>>> email to [email protected] with the message: INFO IBM-MAIN >>>> >>>> >> ---------------------------------------------------------------------- >>>> For IBM-MAIN subscribe / signoff / archive access >> instructions, send >>>> email to [email protected] with the message: INFO IBM-MAIN >>> >>> >> ---------------------------------------------------------------------- >>> For IBM-MAIN subscribe / signoff / archive access >> instructions, send email to [email protected] with the >> message: INFO IBM-MAIN >>> >>> >> ---------------------------------------------------------------------- >>> For IBM-MAIN subscribe / signoff / archive access instructions, send >>> email to [email protected] with the message: INFO IBM-MAIN >> >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, send >> email to [email protected] with the message: INFO IBM-MAIN >> >> > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, send email to > [email protected] with the message: INFO IBM-MAIN > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, send email to > [email protected] with the message: INFO IBM-MAIN > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN

