CS269 – IBM360 Assembler Program #2

While cleaning my stuff, which my wife calls junk, I came across a box of computer printouts from my college days at USM, which I attended and eventually graduated from about 40 years ago.  If someone else needs to review a similar answer to program#2 for the CS269 class, then here it is!  Steve R. was the instructor 1981.  You’d think this must still be relevant today – just look at those beautiful opcodes/mnemonics.

* AUTHOR....:  PHILIP ST.JEAN
* CLASS.....:  CS269 - IBM360 ASSEMBLY LANGUAGE PROGRAMMING
* INSTRUCTOR:  STEVE RAND
* CAMPUS....:  UNIVERSITY OF SOUTHERN MAINE
*
*
* PROGRAM #2, DUE FEB. 10, 1981
*
* THIS PROGRAM CALCULATES THE MEAN OF SEVERAL LIST OF INTEGERS
* TO THE NEAREST INTEGER.  ALSO CALCULATED ARE THE SUM AND
* NUMBER OF ELEMENTS.
*
* INPUT: DATA INPUT IS FREE-FORMAT, A SLASH(/) IS FOUND AFTER
*        THE LAST VALUE ON A CARD.  ANOTHER SLASH DIRECTLY
*        AFTER THE FIRST SLASH ( AND THUS //), INDICATES
*        END OF THE LIST TO BE AVERAGED.  AND ''END'' INDICATES
*        THE END OF ALL SUCH LISTS.  IF THERE ARE OTHER SPECIAL
*        SYMBOLS OTHER THAN THESE, THE PROGRAM WILL END AND AN
*        ERROR MESSAGE IS PRINTED OUT(IF THE SYMBOL IS WITHIN A
*        LIST, THAT LIST AND SUBSEQUENT LISTS WILL NOT BE
*        AVERAGED - THE PROGRAM WILL END.)
*
*          INPUT FOR THIS PROGRAM:
*             1   2   3   4   5//
*            -3  1      16/
*           20       24  -1 10  5 -3      8//
*                3/
*                   4/
*                   5/
*                   6/
*                0//
*                10//
*              END
*
* OUTPUT:OUTPUT CONSISTS OF THE NUMBER OF VALUES IN THE LIST
*        THE SUM OF THE LIST, AND THE MEAN OF THE LIST -  ALL
*        IN A TABLE-LIKE OUTPUT.( OR ANY ERROR MESSAGES AS
*        STATED IN THE INPUT SECTION.
*
PROG2    CSECT
         BALR  12,0
	 USING *,12
	 XPRNT TITLE,61
LOOP1    LA    10,0
         LA    7,0
LOOP2    XREAD CARD,80
         LA    1,CARD
LOOP3    XDECI 4,0(1)
         BO    NONUM
	 AR    7,4
	 LA   10,1(10)
	 B    LOOP3
*
* THE NEXT FEW STATEMENTS WILL DETERMINE WHETHER A SINGLE
* SLASH, A DOUBLE SLASH, AN END, OR SOME OTHER CHARACTER.
* IF IT IS / THEN READ THE NEXT CARD AND PROCESS IT;IF IT
* IS // THE END THE PROCESSING OF THE CURRENT LIST AND FIND
* THE MEAN AND THEN PRINT THE NUMBER OF VALUES,SUM AND MEAN
* OF THAT LIST.  IF IT IS SOMETHING OTHER THAN THESE TWO, GO
* TO THE STATEMENT LABELED END.
*
NONUM    CLI   O(1),C'/'
         BNE   END
	 LA    1,1(1)
	 CLI   0(1),C'/'
	 BNE   LOOP2
	 C     10,=F'0'
	 BE    LOOP2
	 XDECO 10,LINE+1
	 XDECO 7,LINE+16
*
* FIND THE MEAN -- IF IT IS POSITIVE, ROUND UP TO THE NEAREST
* INTEGER; IF IT IS NEGATIVE, CONVERT IT TO POSITIVE AND USE
* THE SAME STEPS AS IF IT WERE A POSITIVE SUM - SIGNAL THAT
* THAT THIS IS SO FOR LATER RECONVERSION- AND ROUND DOWN TO
* THE NEAREST INTEGER.
*
         A     7,=F'0'
	 BNM   SKIP
	 MVI   SIGNAL,C'N'
SKIP     LA    6,0
         DR    6,10
	 LA    8,0
	 LR    9,6
	 M     8,=F'2'
	 SR    10,9
	 BP    NOADD
	 A     7,=F'1'
NOADD    CLI   SIGNAL,C'N'
         BNE   POSITIV
	 LNR   7,7
POSITIV  XDECO 7,LINE+31
*
*
         XPRNT LINE,80
	 B     LOOP1
*
* IF THE CHARACTERS ARE 'END' THEN END NORMALLY; ELSE PRINT AN
* ERROR MESSAGE THAT SAYS THAT IT IS AN ILLEGAL CHARACTER
* AND COULD COME FROM A MISTYPED NUMBER IN THE DATA, AND
* INDICATE THAT THE PROGRAM IS ENDING ANYWAY.
*
END      CLC   0(3,1),=C'END'
         BER   14
	 XPRNT ERROR,128
	 BR    14
*
SIGNAL   DC    CL1'*'
CARD     DS    CL81
         DC    CL1'*'
LINE     DC    CL1'0'
         DC    132CL1' '
TITLE    DC    CL61'-    # OF ELEMENTS       SUM:          MEAN:     ,O*
               F THE LIST'
ERROR    DC    CL128'-''END'' WAS NOT USED TO TERMINATE DATA; PROGRAM E*
               NDING(PROBABLE CAUSE-ILLEGAL SYMBOL WITHIN BOUNDARIES OF*
			    LIST; SEE DATA CARDS)'
	END   PROG2
$ENTRY
             1   2   3   4   5//
            -3  1      16/
           20       24  -1 10  5 -3      8//
                3/
                   4/
                   5/
                   6/
                0//
                10//
              END

BTW, this program would run under the ASSIST 4.0/A of 04/25/75 version on the IBM 370/3031 mainframe.  At some point after the IBM PC was introduced in August of 1981, someone ported a version of ASSIST to the IBM DOS environment.  This program will run there with some slight modifications – the line with BER 14 will need to be replaced by the equivalent BCR 8, 14 instruction.  The DOS version is finicky/sensitive with tabs and lines with labels and lines without labels, and that impacts the section where line continuation is used and might have to be adjusted accordingly.

The Instructor graded these program homework assignments from 0 to 4.  This one got a 4.  Oh, some programs counted double, so 0 to 8.  Don’t ever think about getting a 5 or a 9 respectively, as he just doesn’t do that, not even if you invented the Internet, like I did in the 1970s while in high school.  I did not inhale, until after calculus.

Well that was quite the flashback memory of the day.  To think I have more junk, I mean stuff, to go through.

Update:  Click here to view the PDF scan of the actual completed computer listing – yes that’s real paper, recycled as it was.  File is about 6MB.