.TITLE DOTD DOT PRODUCT OF TWO VECTORS (DOUBLE PRECISION) .IDENT /1.0/ ; 08/15/79 .GLOBL DOTD .ENABL LSB F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 DOTD: CMP #4,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMBD ;BOMB IF # OF ARGS. IS INCORRECT MOV (R5)+,R3 ;R3=ADDRESS OF C MOV (R5)+,R4 ;R4=ADDRESS OF A MOV (R5)+,R1 ;R1=ADDRESS OF B MOV @(R5),R2 ;R2=N (LOOP COUNT) SETD CLRD F1 ;F1=0 10$: LDD (R4)+,F0 ;GET A(I) MULD (R1)+,F0 ;F0=A(I)*B(I) ADDD F0,F1 ;ADD CURRENT PRODUCT INTO SUM REGISTER SOB R2,10$ ;DONE? STD F1,(R3) ;STORE SUM INTO C RTS PC ;DONE. SO RETURN. BOMBD: MOV #14400,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #15554,R4 ;MOVE 1ST HALF OF NAME TO R4 JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END