.TITLE PRUND ; ;ROUNDS A STRING OF ASCII DIGITS. ROUNDING STOPS AT ;FIRST CHARACTER LESS THAN '0'. RESULT LEFT ON ;STACK ON RETURN. ASSUMES THE PRESENCE OF AN EXTRA ;ROUNDING DIGIT WHICH IS DESTROYED ; ;PARAMETERS ; 1. POINTER TO FIRST POSITION AFTER DIGIT STRING ; ;REGISTER USAGE ; R0 RETURN ADDRESS ; R1 POINTER ; ;RESULT ; 0 = O.K. ; 1 = OVERFLOW OCCURRED, EXTRA DIGIT ADDED ; .PSECT P.RUND:: MOV (SP)+,R0 MOV (SP),R1 ;POINTER CLR (SP) ;ZERO RESULT ; CMPB -(R1),#'4 ;EXTRA ROUNDING DIGIT 1$: BLOS 3$ MOVB #'0,(R1) ;SET THIS PLACE TO ZERO CMPB -(R1),#'0 BLO 2$ ;STOP ON THIS CHARACTER INCB (R1) ;ADD CARRY FROM PREVIOUS CMPB (R1),#'9 BR 1$ ;PROPAGATE ; 2$: INCB 1(R1) ;OVERFLOW - SET PLACE TO '1' INC (SP) ;TELL CALLER ; 3$: JMP (R0) ; .END