; SUBROUTINE MAXINT.MAC ; SUBROUTINE TO FIND THE MAXIMUM OF A ; SERIES OF INTEGERS WHOSE STARTING ADDRESS ; AND COUNT ARE GIVEN IN THE CALL. ; FORTRAN CALL: ; CALL MAXINT(NARR,ICNT,IMAX,IOFF) ; WHERE NARR=STARTING ADDRESS(USUALLY ARRAY NAME) ; ICNT=COUNT OF INTEGERS TO COMPARE(>1) ; IOFF=OFFSET OF MAX VALUE (ARRAY POSITION) ; IMAX=MAX VALUE .TITLE MAXINT .CSECT .GLOBL MAXINT MAXINT: MOV 2(R5),R0 ;R0 IS ADDRESS POINTER MOV @4(R5),R1 ;R1 IS LOOP COUNTER MOV (R0)+,R2 ;R2 IS CURRENT MAX VALUE MOV R1,R3 ;R3 IS POSITION OF MAX DEC R1 ;START R1 AT 2ND ARRAY MEMBER LOOP: CMP R2,(R0)+ ;COMPARE MAX TO NEXT VALUE BGE ENLOOP ;IF STILL MAX, THEN LOOP MOV -2(R0),R2 ;IF NOT, GET VALUE AND PUT IN R2 MOV R1,R3 ;HOLD ONTO POSITION OF NEW MAX ENLOOP: SOB R1,LOOP ;LOOP UNTIL DONE MOV @4(R5),R4 ;MOVE INITIAL COUNTER TO R4 SUB R3,R4 ;SUBTRACT RECORDED COUNTER INC R4 ;AND ADD 1 TO GET TRUE POSITION MOV R4,@10(R5) ;PUT IT WHERE IT BELONGS MOV R2,@6(R5) ;PUT MAX AWAY RTS PC ;AND GET OUT OF HERE .END