Build a while loop using the structured assembler Do macro. Here is the relevant code:
DO WHILE=(CP,X,LT,=P'10') AP X,=P'1' MVC XOUT,EDWD ED XOUT,X PUT FILEOUT1,RECOUT ENDDO
The test at the top of the loop compares X with a packed decimal 10 and enters the loop if X is less than 10. Sweet! Here’s the complete program that makes it work:
//CSUP004A JOB (ASSY),'WOOLBRIGHT',CLASS=A,MSGCLASS=A, // NOTIFY=&SYSUID,MSGLEVEL=(1,1) //ASM EXEC PROC=HLASMCLG //C.SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=HLA.SASMMAC2,DISP=SHR //SYSIN DD * COPY ASMMSP TITLE 'SKELETON ASSEMBLER PROGRAM' PRINT ON,DATA,NOGEN ****************************************************************** * * * PROGRAMMER: WOOLBRIGHT * * COMMENTS : ASM SKELETON PROGRAM * * * ****************************************************************** * * * REGISTER EQUATES * * * ****************************************************************** R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 ****************************************************************** * * * SYMBOLIC EQUATES * * * ****************************************************************** MACRO3 CSECT STANDARD ENTRY CODE STM R14,R12,12(R13) BASR R12,R0 ESTABLISH... USING *,R12 ADDRESSABILITY ST R13,SAVEAREA+4 BACKWARD CHAIN CALLER LA R13,SAVEAREA ADDRESS OF MY SAVE AREA ****************************************************************** * BEGIN THE PROGRAM LOGIC. FIRST OPEN THE OUTPUT FILE ****************************************************************** OPEN (FILEOUT1,(OUTPUT)) ZAP X,=P'0' LOOP EQU * DO WHILE=(CP,X,LT,=P'10') AP X,=P'1' MVC XOUT,EDWD ED XOUT,X PUT FILEOUT1,RECOUT ENDDO EXIT EQU * CLOSE (FILEOUT1) L R13,SAVEAREA+4 POINT AT OLD SAVE AREA LM R14,R12,12(R13) RESTORE THE REGISTERS LA R15,0 RETURN CODE = 0 BR R14 RETURN TO OPERATING SYSTEM ****************************************************************** * * * OUTPUT FILE - DATA CONTROL BLOCK * * * ****************************************************************** DC X'FFFFFFFF' FILEOUT1 DCB DSORG=PS, X MACRF=(PM), X DEVD=DA, X DDNAME=FILEOUT1, X RECFM=FB, X LRECL=80 ****************************************************************** * * OUTPUT RECORD AREA * ****************************************************************** RECOUT DS 0CL80 PRINT AREA DC CL10' ' XOUT DS CL5 DC CL65' ' EDWD DC X'4020212060' X DS PL2 ****************************************************************** * * REGISTER SAVE AREA * ****************************************************************** SAVEAREA DS 18F ****************************************************************** * * LITERAL POOL * ****************************************************************** LTORG * END MACRO3 /* //G.SYSABOUT DD SYSOUT=* //G.SYSUDUMP DD SYSOUT=* //G.FILEOUT1 DD SYSOUT=* //