Пр о ц е с с о р TMS 3 2 0C4 x
174
RCPF
R1, R10
; v[0] = приближение 1/q
MPYF
R10, R1, R8
; R8 = qv[0]
SUBRF
2.0, R8
; R8 = 2.0 – qv[0]
MPYF
R8, R10
; R10 = v[1] = v[0](2.0 – qv[0])
MPYF
R10, R1, R8
; R8 = qv[1]
SUBRF
2.0, R8
; R8 = 2.0 – qv[1]
MPYF
R8, R10, R1
; R1 = v[2] = v[1](2.0 – qv[1])
RND
R1
;
MPYF
R1, R0
; RES = p(1/q)
→
R0
MPYF
R4, R0
; XR0
→
R0
ADDF
R4, R0
; RES = R0 + X
NEGF
R0, R1
; – RES
→
R1
POPF
R2
; x
→
R2
LDFNN
R1, R0
; если x
≥
0, RES = – RES
LDIN
2, R3
; если x < 0, то 2
→
R3
BD
R11
; возврат из подпрограммы
LDINN
0, R3
; если x
≥
0, то 0
→
R3
ADDI
R3, IR1
; IR1 + R3
→
IR1
ADDF
∗
++AR0(IR1), R0
; RES + a[IR1] или b[IR1]
.data
ACOS_ADR: .word
ACOS
ACOS
.float
1.0
.float
-0.504400557
; P
2
.float
0.933935835
; P
1
.float
-0.554846723e+1
; Q
1
.float
0.560363004e+1
; Q
0
.float
0.0
; b[ 1 ]
.float
1.570796371
; a[ 1 ]
.float
3.141593274
; b[ 2 ]
.float
1.570796371
; a[ 2 ]
.end
Пример Д.9. Программа вычисления
arctg
(x)
; Регистры на входе:
R0 – аргумент x
; Регистры на выходе: R0 – значение функции arctg(x)
; Используемые регистры:
R1, R2, R4, R8, R10, AR0, IR1
; Вызов
LAJ Atan
; Память: код
60 слов
;
константы 14 слов
; Время выполнения
82 цикла ( 3.28 мкс)
.global
Atan
Atan:
PUSHF
R0