Пр о ц е с с о р TMS 3 2 0C4 x
175
LDP
ATAN_ADR
LDI
@ATAN_ADR, AR0
; адрес констант в AR0
ABSF
R0, R1
; X = | x |
LDI
0, IR1
; N = 0
CMPF
1.0, R1
; сравнение R1 с 1.0
BN
ATANB1
; если X < 1.0, то N = 0
ADDI4, IR1
; k = 2, N = 2k
IR1
Вычисление X = 1 / X
RCPF
R1, R10
; x[0] = приближение 1/X
MPYF
R10, R1, R0
; R0 = Xx[0]
SUBRF
2.0, R0
; R0 = 2.0 – Xx[0]
MPYF
R0, R10
; R10 = x[1] = x[0](2.0 – Xx[0])
MPYF
R10, R1, R0
; R0 = Xx[1]
SUBRF
2.0, R0
; R0 = 2.0 – Xx[1]
MPYF
R0, R10, R1
; R1 = x[2] = x[1](2.0 – Xx[1])
ATANB1:
CMPF
AR0++, R1
; сравнение X с 2 – sqrt(3)
BN
ATANB2
; если X < 2 - sqrt(3), переход на
ATANB2
MPYF
AR0, R1, R0
; Xsqrt(3)
R0
SUBF
1.0, R0
; Xsqrt(3) – 1
ADDF
AR0, R1
; X = X + sqrt(3)
ADDI
2, IR1
; k = 1, N = 2k
IR1
Вычисление f = (Xsqrt(3) - 1) / (X + sqrt(3)), где v = X + sqrt(3)
RCPF
R1, R10
; x[0] = приближение 1/v
MPYF
R10, R1, R8
; R8 = vx[0]
SUBRF
2.0, R8
; R8 = 2.0 – vx[0]
MPYF
R8, R10
; R10 = x[1] = x[0](2.0 – vx[0])
MPYF
R10, R1, R8
; R8 = vx[1]
SUBRF
2.0, R8
; R8 = 2.0 – vx[1]
MPYF
R8, R10, R1
; R1 = x[2] = x[1](2.0 – vx[1])
RND
R1
MPYF
R1, R0
; f = (Xsqrt(3) – 1) / (X + sqrt(3))
LDF
R0, R1
; f
R1
ATANB2: MPYF
R1, R1, R2
; g = f
2
MPYF
++AR0, R2, R0
; P
1
g
R0
ADDF
++AR0, R0
; P
0
+ R0
R0
LDF
R1, R4
; f
R1
MPYF
R2, R0
; P = gR0
R0
ADDF
++AR0, R2, R1
; Q = Q
0
+ g
R1
I...,165,166,167,168,169,170,171,172,173,174 176,177,178,179,180,181,182,183,184,185,...186