下記のサンプル・ソースコードをアセンブルした際のアセンブリー・リストに、簡単な見方を示した資料を作りました。アセンブラー・プログラムは他の言語と違って、区分データセットに格納したソース・コードのメンバー内容だけを見てもデバッグできません。構文エラーであっても、実行時の異常終了であっても必ずアセンブリー・リストを見てデバッグする癖を付けることを勧めます。異常終了時や期待した実行結果にならない時、ダンプ・リストを解析してのデバッグであれば機械語コードと照らし合わせる場面も生じます。正しく動いてデバッグの必要が無い場合でも、自分が書いたソース命令がどのような機械語コードに変換されたかをアセンブリー・リストで見ていれば、ダンプ解析に必要なスキルも身に付けやすくなります。
| 
					 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  |