Пр о ц е с с о р TMS 3 2 0C4 x
171
Пример Д.7. Программа вычисления
arcsin
(x)
; Регистры на входе:
R0 – аргумент x
; Регистры на выходе:
R0 – значение функции arcsin(x)
; Используемые регистры:
R1, R2, R3, R4, R8, R10, AR0, IR1
; Вызов
LAJ Arcsin
; Память: код
52 слова
;
константы
8 слов
; Время выполнения
68 циклов ( 2.72 мкс)
.global
Arcsin
Arcsin:
LDP
ASIN_ADR
LDI
@ASIN_ADR, AR0
; адрес констант в AR0
PUSHF
R0
ABSF
R0, R2
; X = | x |
→
R2
CMPF
0.5, R2
; сравнение X с 0.5
BN
ASINB1
; если X < 0.5 , переход на ASINB1
LDI
2, IR1
; загрузка 2 в IR1
SUBF
R2,
∗
AR0,R2
; X = 1.0 – X
MPYF
0.5, R2
; g = X / 2
PUSHF
R2
LDF
R2, R3
RSQRF
R2, R1
; R1 = v[0] = первое приближение
1/sqrt(g)
MPYF
0.5, R2
; R2 = g/2
MPYF
R1, R2, R0
; R0 = v[0](g/2)
MPYF
R1, R0
; R0 = (g/2)v[0]v[0]
SUBRF
1.5, R0
; R0 = 1.5 – (g/2)v[0]v[0]
MPYF
R0, R1
; v[1] = v[0](1.5 – (g/2)v[0]v[0])
RND
R1
MPYF3
R1, R2, R0
; R0 = v[1](g/2)
MPYF
R1, R0
; R0 = (g/2)v[1]v[1]
SUBRF
1.5, R0
; R0 = 1.5 – (g/2)v[1]v[1]
MPYF
R0, R1
; v[2] = v[1](1.5 – (g/2)v[1]v[1])
RND
R1, R2
; 1/sqrt(g)
→
R2
BD
ASINB2
; переход на ASINB2
MPYF3
R3, R2, R4
; sqrt(g) = g(1/sqrt(g) )
MPYF
-2.0, R4
; X = – 2sqrt(g)
→
R4
POPF
R3
; g
→
R3
ASINB1:
LDI
1, IR1
; 1
→
IR1
LDF
R2, R4
; X
→
R4
MPYF
R4, R4, R3
; g = X
2
→
R3
ASINB2:
MPYF
∗
++AR0, R3, R0
; P
2
g
→
R0