.TITLE SQRT .GLOBL .SQRT,.CALL .MCALL .TLQ A1=R1 A2=R2 SQRTN: .BLKW 2 N: .BLKW 2 .SQRT: MOV R0,-(SP) STF A1,-(SP) STF A2,-(SP) TSTF N CFCC BLT ERR BNE WW CLRF SQRTN ;SQRT(0)=0 BR RESTOR WW: LDF N,A1 ;COMPUTE FIRST APPROX STEXP A1,R0 ;STORE EXPONENT IN R0 ASR R0 ;DIVIDE EXP BY 2 TO APPROX SQRT LDEXP R0,A1 ;A1=X[0], FIRST GUESS MOV #8.,R0 ;8 ITERATIONS L: LDF N,A2 ;SUCCESSIVE APPROX FORMULA: DIVF A1,A2 ;X[I+1]=(N/X[I]+X[I])/2 ADDF A2,A1 DIVF #2,A1 SOB R0,L STF A1,SQRTN RESTOR: LDF (SP)+,A2 LDF (SP)+,A1 MOV (SP)+,R0 RETURN ERR: .TLQ <.SQRT OF NEG NUMBER> JMP .CALL .END