Пр о ц е с с о р 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