; SUBROUTINE AMAXFA.MAC ; SUBROUTINE TO FIND THE MAXIMUM OF A ; SERIES OF REAL*4'S WHOSE STARTING ADDRESS ; AND COUNT ARE GIVEN IN THE CALL. ; FORTRAN CALL: ; CALL AMAXFA(FARR,ICNT,FMAX,IOFF) ; WHERE FARR=STARTING ADDRESS(USUALLY ARRAY NAME) ; ICNT=COUNT OF REALS TO COMPARE(>1) ; IOFF=OFFSET OF MAX VALUE (ARRAY POSITION) ; FMAX=MAX VALUE AC0=%0 .TITLE AMAXFA .CSECT .GLOBL AMAXFA AMAXFA: MOV 2(R5),R0 ;R0 IS ADDRESS POINTER MOV @4(R5),R1 ;R1 IS LOOP COUNTER LDF (R0)+,AC0 ;AC0 IS CURRENT MAX VALUE MOV R1,R3 ;R3 IS POSITION OF MAX DEC R1 ;START R1 AT 2ND ARRAY MEMBER LOOP: CMPF (R0)+,AC0 ;COMPARE MAX TO NEXT VALUE CFCC BLE ENLOOP ;IF STILL MAX, THEN LOOP LDF -4(R0),AC0 ;IF NOT, GET VALUE AND PUT IN AC0 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 STF AC0,@6(R5) ;PUT MAX AWAY RTS PC ;AND GET OUT OF HERE .END