.TITLE MULDIV .IDENT /V7.02/ ;+ ; ; *** ML.DV ; ; THIS ROUTINE PERFORMS THE CALCULATION: ; ; D.P. RESULT = D.P. INTEGER * (S.P. INTEGER 1) / (S.P. INTEGER 2) ; ; WHERE: ; D.P. INDICATES A 2-WORD ARGUMENT ; S.P. INDICATES A 1-WORD ARGUMENT ; ; IF THE HIGH ORDER (D.P. INTEGER) IS ZERO, THE MULTIPLY IS DONE ; FOLLOWED BY THE DIVIDE, ELSE THE DIVIDE IS DONE FOLLOWED BY ; THE MULTIPLY. ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; INPUTS: ; R4 ADDRESS OF A 2-WORD ARGUMENT BLOCK: ; WORD 1 - (S.P. INTEGER 1) ; WORD 2 - (S.P. INTEGER 2) ; R5 ADDRESS OF D.P. INTEGER ; ; OUTPUTS: ; R0 USED ; R1 HIGH ORDER RESULT ; R2 LOW ORDER RESULT ; R3 PRESERVED ; R4 USED ; R5 (INPUT R5)+4 ; ; REVISION HISTORY ; ---------------- ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; SMALL CODE CHANGE ALSO. ;- ML.DV:: MOV R3,-(SP) ; SAVE R3 MOV (R5)+,R2 ; GET HIGH ORDER MULTIPLICAND BNE 10$ ; IF NE DO DIVIDE BEFORE MULTIPLY MOV (R5)+,R3 ; GET LOW ORDER MULTIPLICAND MOV (R4)+,R0 ; GET MULTIPLIER CALL $DMUL ; DO THE MULTIPLY MOV R1,R2 ; SET UP THE REGISTERS... MOV R0,R1 ; ...FOR THE DIVIDE OPERATION MOV (R4)+,R0 ; GET THE DIVISOR CALL $DDIV ; DO THE DIVIDE BR 20$ ; 10$: MOV R2,R1 ; HIGH ORDER DIVIDEND GOES IN R1 MOV (R5)+,R2 ; LOW ORDER DIVIDEND GOES IN R2 MOV 2(R4),R0 ; DIVISOR GOES IN R0 CALL $DDIV ; DO THE DIVIDE MOV R2,R3 ; SET UP THE REGISTERS... MOV R1,R2 ; ...FOR THE MULTIPLY OPERATION MOV (R4),R0 ; GET THE MULTIPLIER CALL $DMUL ; DO THE MULTIPLY MOV R1,R2 ; ASSIGN RESULT TO RIGHT OUTPUT REGISTERS MOV R0,R1 ; 20$: MOV (SP)+,R3 ; RESTORE R3 RETURN ; AND RETURN TO CALLER .END