********************************************************************* * Z390 MAINFRAME ASSEMBLER CODING CONTEST PROBLEM #11. * CODE TWO ROUTINES TO ADD AND FIND OPCODE TABLE ENTRIES. * THE TABLE CONTAINS 856 ENTRIES WITH 8 BYTE MNEMONIC NAMES AND 2 BYTE * OPCODES. THE TABLE IS INCLUDED IN PROGRAM VIA COPY FROM OPCODES.CPY * TO COMPARE THE PERFORMANCE OF SOLUTIONS, USE THIS MODEL PROGRAM * WHICH LOADS TABLE AND THEN FINDS ALL ENTRIES 100 TIMES VERIFYING * THAT MATCHING OPCODE TABLE ENTRY IS RETURNED. THE ROUTINE MUST BE * CODED TO HANDLE RANDOM ACCESS EVEN THOUGH THIS TEST USES SEQUENTIAL * ACCESS. ********************************************************************* * 01/18/08 DSH USE P11FIND TO FIND HASH TABLE WITH NO DUPS - 48011 ********************************************************************* P11DSH1 ZMFACC CODE,START,NAME='DON HIGGINS' L R3,=A(TABLE) LOOP1 DS 0H LOAD HASH TABLE BAL R10,ADDOP ADD TABLE ENTRIES TO MY HASH TABLE BNE 1 ABORT IF DUP KEY FOUND DURING LOADING AHI R3,10 CL R3,=A(TABLEEND) BL LOOP1 LA R4,100 LOOP2 DS 0H REPEAT FIND LOOP 100 TIMES L R3,=A(TABLE) LOOP3 DS 0H FIND EACH ENTRY IN TABLE BAL R10,FINDOP FIND TABLE ENTRY FOR NAME AT (R3) CLR R1,R3 VERIFY MATCHING ENTRY BNE 3 ABORT IF TABLE ADDRESS WRONG AHI R3,LENTRY CL R3,=A(TABLEEND) BL LOOP3 BCT R4,LOOP2 ZMFACC CODE,END ZMFACC INPUT,START ZMFACC INPUT,END ZMFACC OUTPUT,START ZMFACC OUTPUT,END * * ADD HASH TABLE ENTRY WITH NAME AT (R3) AND OPCODE AT 8(R3) * AND RETURN VIA R10 * ADDOP DS 0H LR R11,R10 SAVE RETURN BAL R10,FINDOP GET HASH TABLE ENTRY IN R1 LTR R1,R1 IF NOT ZERO BNZR R11 THEN EXIT WITH NZ CC ST R3,HASHTAB(R2) ELSE STORE NEW ENTRY BR R11 EXIT WITH Z CC * * FIND HASH TABLE ENTRY WITH NAME AT (R3) AND RETURN ADDRESS OF * ENTRY IN R1 * AND RETURN VIA R10 * FINDOP DS 0H LG R1,0(R3) G1 = 8 BYTE NAME DSG R0,DIVISOR LPGR R2,R0 G1 = POSITIVE REMAINDER SLL R2,2 L R1,HASHTAB(R2) BR R10 LTORG PRINT DATA * * HASH TABLE * DC C'YOUR HASH TABLE DATA AREAS HERE' HASH EQU 48011 SIZE REQUIRED FOR NO DUPS FORM P11FIND.MLC DIVISOR DC 0D,A(0,HASH) 64 BIT DIVISOR HASHTAB DS (HASH)F'0' HASH TABLE SIZE FROM P11FIND.MLC * * TABLE OF OPCODE MNEMONICS AND HEX OPCODES * TABLE DS 0D MACRO ZOSOP &HEXOP,&DESC,&OPCODE,&TYPE,&NOP= &TDESC SETC '&DESC'(2,K'&DESC-2) &THEXOP SETC '&HEXOP'(2,K'&HEXOP-2) &THEXOP SETC '&THEXOP.00'(1,4) DC CL8&OPCODE,XL2'&THEXOP' &TDESC MEND LENTRY EQU 8+2 COPY OPCODES TABLEEND EQU * END