Пр о ц е с с о р TMS 3 2 0C4 x
167
Пример Д.4. Программа вычисления
sin
(x)
; Регистры на входе:
R0 – аргумент x
; Регистры на выходе:
R0 – значение функции sin(x)
; Используемые регистры: R1, R2, R3, AR0, AR1
; Вызов
LAJ Sinus
; Память: код
31 слово
;
константы
8 слов
; Время выполнения
31 цикл (1.24 мкс)
.global
Sinus
Sinus
LDPK
SIN_ADR
CMPF
0, R0
; сравнение x с 0
LDIN
-1, AR1
; если x < 0, sign = – 1
LDINN
1, AR1
; если x
≥
0, sign = 1
LDI
@SIN_ADR, AR0
; загрузка адреса констант в AR0
ABSF
R0
; X = абсолютное значение x
MPYF
∗
AR0++, R0, R1
; X(1/
π
)
→
R1
ADDF
0.5, R1
FIX
R1, R2
; N = целое от R1
FLOAT
R2, R1
; X
n
= ПТ от N
TSTB1, R2
; проверка N на четность
LDINZ
-1, R3
; если N нечетное, – 1
→
R3
LDIZ
1, R3
; если N четное, 1
→
R3
MPYI
R3, AR1
; sign
⋅
R3
→
R3
MPYF
∗
AR0++, R1, R3
; C
1
X
n
→
R3
SUBF
R3, R0
; X – R3
→
R3
MPYF
∗
AR0++, R1, R2
; C
2
X
n
→
R2
SUBF
R2, R0
; f = Y – X
n
⋅π
MPYF
R0, R0, R3
; q = f
2
MPYF
∗
AR0++, R3, R2
; a
9
q
→
R2
ADDF
∗
AR0++, R2
; a
7
+ R2
→
R2
MPYF
R3, R2
; qR2
→
R2
ADDF
∗
AR0++, R2
; a
5
+ R2
→
R2
MPYF
R3, R2
; qR2
→
R2
ADDF
∗
AR0++, R2
; a
3
+ R2
→
R2
MPYF
R3, R2
; qR2
→
R2 = rq
MPYF
R0, R2
; fR2
→
R2 = rq
⋅
f
BD
R11
; возврат из подпрограммы
ADDF
R0, R2
; sin(x) = f + R2
FLOAT
AR1, R1
; sign
→
R1
MPYF
R2, R1, R0
; sin(x)
⋅
sign
→
R0