下記のサンプル・ソースコードをアセンブルした際のアセンブリー・リストに、簡単な見方を示した資料を作りました。アセンブラー・プログラムは他の言語と違って、区分データセットに格納したソース・コードのメンバー内容だけを見てもデバッグできません。構文エラーであっても、実行時の異常終了であっても必ずアセンブリー・リストを見てデバッグする癖を付けることを勧めます。異常終了時や期待した実行結果にならない時、ダンプ・リストを解析してのデバッグであれば機械語コードと照らし合わせる場面も生じます。正しく動いてデバッグの必要が無い場合でも、自分が書いたソース命令がどのような機械語コードに変換されたかをアセンブリー・リストで見ていれば、ダンプ解析に必要なスキルも身に付けやすくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
*********************************************************************** * z/Architecture & z/OS Assembler Learning Program * * ===================================================== * * Program member name GO is fixed. That is created by * * ASMCL/ASMCLG HLASM Standard Procedure. * *********************************************************************** * *----------------------------------* * * HOUSE-KEEPING PROCEDURE * * *----------------------------------* MAINPROG CSECT , DEFINE CONTROL SECTION USING *,R12 DEFINE OUR BASE REGISTER=12 SAVE (14,12),, SAVE CALLER REGISTERS + 'MAINPROG(ALP:z/OS Assembler Learning Program)BUILD:&SYS+ DATE-&SYSTIME' LR R12,R15 GR12 --> OUR BASE ADDRESS LR R15,R13 COPY CALLER SAVEAREA ADDRESS LA R13,GPRSAVEA LOAD OUR RSA(SAVEAREA) ADDRESS ST R15,4(,R13) SAVE CALLER'S SAVEAREA ADDRESS + INTO OUR SAVEAREA ST R13,8(,R15) CHAIN OUR RSA INTO CALLER'S + SAVEAREA FOR SA TRACE L R1,0(,R1) LOAD EXEC PARM FIELD ADDRESS LH R0,0(,R1) GR0 ---> PARM TEXT LENGTH LA R1,2(,R1) GR1 ---> BEGIN OF PARM TEXT SPACE , *********************************************************************** * AVAILABLE YOUR ASSEMBLER LANGUAGE CODE AT HERE. * * ===================================================== * * GR0 ---> EXEC PARAMETER TEXT LENGTH * * GR1 ---> EXEC PARAMETER TEXT ADDRESS * * GR13 --> OUR REGISTER SAVEAREA(RSA) * *********************************************************************** MAINPROC DS 0H L R2,=A(X'22222222') GR2 <--- X'22222222' L R3,=A(X'33333333') GR3 <--- X'33333333' L R4,=A(X'44444444') GR4 <--- X'44444444' L R5,=A(X'55555555') GR5 <--- X'55555555' L R6,=A(X'66666666') GR6 <--- X'66666666' L R7,=A(X'77777777') GR7 <--- X'77777777' L R8,=A(X'88888888') GR8 <--- X'88888888' L R9,=A(X'99999999') GR9 <--- X'99999999' L R10,=A(X'AAAAAAAA') GR10 <-- X'AAAAAAAA' L R11,=A(X'BBBBBBBB') GR11 <-- X'BBBBBBBB' L R0,FWORD1 LOAD FWORD1 ST R0,DWORD STORE IT INTO DWORD LH R1,HWORD1 LOAD HWORD1 ST R1,DWORD+4 STORE IT INTO DWORD+4 LH R1,HWORD2 LOAD HWORD2 CVD R1,DWORD CONVERT IT TO PACKED-DECIMAL MVC WORKAREA(10),CHAR2 MOVE CHAR2 TO WORKAREA SLR R14,R14 CLEAR WORKREG LA R15,5 LOAD LOOP COUNT LOOP DS 0H AHI R14,+1 INCREMENT R14 BCT R15,LOOP DO UNTIL R15=0 + USE CURRENT GR15 AS COMPLETION CODE(CC=0) *********************************************************************** * *----------------------------------* * * PROGRAM EXIT PROCEDURE * * * ============================== * * * GR15 --> COMPLETION CODE(RETCD * * *----------------------------------* EXITPROC DS 0H EXIT PROCEDURE AT HERE L R13,4(,R13) LOAD CALLER'S SAVEAREA ADDRESS RETURN (14,12),T,RC=(15) RESTORE CALLER'S REGISTERS + AND RETURN TO CALLER WITH RETCD *********************************************************************** * DATA AREA * *********************************************************************** GPRSAVEA DS 18F STANDARD GPR SAVEAREA(18WORDS) *---------------------------------------------------------------------* * AVAILABLE YOUR ASSEMBLER LANGUAGE DATA AT HERE. * *---------------------------------------------------------------------* DATAAREA DS 0D USER DATA AREA START AT HERE DWORD DC D'0' x0000000000000000 FWORD1 DC F'12345' x00003039 FWORD2 DC FL3'-875' xFFFC95 HWORD1 DC H'6789' x1A85 HWORD2 DC H'-123' xFF85 * CHAR1 DC C'A' 'A' CHAR2 DC CL10'ABCDEFGH' 'ABCDEFGH ' CHAR3 DC 3CL2'XY' 'XYXYXY' CHAR4 DC CL8'12345' '12345 ' HEX1 DC X'00' x00 HEX2 DC XL4'123' x00000123 PACK1 DC P'12345' x12345C PACK2 DC PL6'+3456789' x00003456789C PACK3 DC P'-875' x875D PACK4 DC PL3'-875' x00875D ZONE1 DC ZL8'12345' ' 1234E' * ADDR1 DC A(GPRSAVEA) x00000xxx ADDR2 DC AL3(CHAR1) x000xxx *---------------------------------------------------------------------* WORKAREA DS XL256 --- 256BYTES WORKING AREA --- *---------------------------------------------------------------------* YREGS , EXPAND GPR EQUATIONS(z/OS ONLY) END |