.TITLE SUB64 .IDENT /V1.0/ .SBTTL 64-BIT SUBTRACTION ROUTINE ; ROUTINE TO SUBTRACT 64 BIT NUMBERS ; ; ; --- AUTHORED BY --- ; ; BOB ROCK ; NORTHEAST ELECTRONICS DIV. ; NORTHERN TELECOM INC. ; AIRPORT RD. ; CONCORD, N.H. 03301 ; (603) 224-6511 EXT 347 ; ; BY BOB ROCK APR-81 ; ; LAST EDIT: 6-NOV-1987 09:22:15 ; ; NOTE: ; FORMAT OF LONG WORDS IS LSW,...,MSW ; ; PETER STADICK OCT-NOV '87 - BROKEN ROUTINES INTO SEPERATE MODULES ; AND MODIFYIED TO ALLOW THEM TO BE BUILD INTO A SUPERVISOR MODE ; LIBRARY. ALSO ADDED DEC CALL SITE TO ADD, SUBTRACT, MULTIPLY AND ; DIVIDE ROUTINES SO THEY CAN BE CALLED FROM FORTRAN, PASCAL, ETC.. ; PETER STADICK, CARGILL INC, P.O. DRAWER AR, RESERVE,LA 70084 ; (504)-536-4111. ; ; CALLING PARAMETER LIST ; 2(R5) = FIRST CLUNK VALUE ( INPUT PRESERVED ) ; 4(R5) = SECOND CLUNK VALUE ( INPUT PRESERVED } ; 6(R5) = RESULT ( OUTPUT ) ; 10(R5) = STATUS 1=SUCCESS OR -3=UNDERFLOW ( OUTPUT ) ; ; THIS ROUTINE WILL SUBTRACT THE SECOND CLUNK VALUE FROM THE FIRST ; VALUE AND RETURN A RESULT. IF THE SECOND CLUNK VALUE IS GREATER ; THEN THE FIRST AN UNDERFLOW ERROR WILL OCCUR AND NON OF THE RETURN ; VALUES CAN BE TRUSTED. ; ; 2(R5) - 4(R5) = 6(R5) ; OR ; (R0) -(R1) = (R2) ; ; CARRY BIT SET ON RETURN INDICATES UNDEFLOW ; STATUS WILL BE SET TO -3 IF UNDERFLOW ; ; ALL REGISTERS ARE PRESERVED ; .PSECT CLUNK,RO,I,LCL,REL SUB64:: MOV R0, -(SP) ; PRESERVE R0,R1,R2 MOV R1, -(SP) MOV R2, -(SP) MOV 2(R5),R0 ; FIRST VALUE MOV 4(R5),R1 ; SECOND VALUE MOV 6(R5),R2 ; DESTINATION OF RESULT CLR -(SP) ; CLEAR CARRY STORAGE MOV (R0),(R2) SUB (R1),(R2) 10$: MOV 2(R0),2(R2) SBC 2(R2) BCC 12$ ;SAVE CARRY STATUS... BIS #1,(SP) ; RECORD CARRY SET BR 14$ 12$: BIC #1,(SP) ; RECORD CARRY CLEAR 14$: SUB 2(R1),2(R2) BCS 20$ ; IF CARRY SET, NO NEED TO CHECK PRIOR STATUS TST (SP) ; OTHERWISE EXIT WITH PREVIOUS CONDITION BEQ 20$ SEC ; SET C BIT IF SET PREVIOUSLY 20$: MOV 4(R0),4(R2) SBC 4(R2) BCC 22$ BIS #1,(SP) BR 24$ 22$: BIC #1,(SP) 24$: SUB 4(R1),4(R2) BCS 30$ TST (SP) BEQ 30$ SEC 30$: MOV 6(R0),6(R2) SBC 6(R2) BCC 32$ BIS #1,(SP) BR 34$ 32$: BIC #1,(SP) 34$: SUB 6(R1),6(R2) BCS 40$ TST (SP) BEQ 40$ SEC 40$: MOV #1,@10(R5) BCC 41$ MOV #-3,@10(R5) 41$: MOV #0,(SP)+ ; ADJUST STACK POINTER MOV (SP)+,R2 ; RESTORE R0,R1,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC .END