Пр о ц е с с о р TMS 3 2 0C4 x
179
Пример Д.11. Программа вычисления exp(x)
; Регистры на входе:
R0 – аргумент x
; Регистры на выходе:
R0 – значение функции exp(x)
; Используемые регистры:
R1, R2, R3, R4, R6, R8, R10, AR0
; Вызов
LAJ Exp
; Память: код
45 слов
;
константы
7 слов
; Время выполнения
54 цикла ( 2.16 мкс )
.global
Exp
Exp
LDP
EXP_ADR
LDF
R0, R1
LDI
@EXP_ADR, AR0
; адрес констант в AR0
; Вычисление R = 0.5 + P / (Q – P)
MPYF3
∗
AR0++, R1, R4
; x / ln2
→
R4
ADDF
0.5, R4
;
FIX
R4, R6
; N = INT{x}
→
R6
FLOAT
R6, R4
; R4
→
число с ПТ
LDF
∗
AR0++, R2
; L
2
→
R2
MPYF
R4, R2
; R4R2
→
R2
LDF
∗
AR0++, R3
; L
1
→
R3
MPYF
R4, R3
; R4R3
→
R3
SUBFR
2, R1
; R1 – R2
→
R1
SUBFR
3, R1
; g = x – INT{x}ln2
MPYF
R1, R1, R2
; z = g
2
LDF
∗
AR0++, R0
; P
1
→
R0
MPYF
R2, R0
; zR0
→
R0
ADDF
∗
AR0++, R0
; P = P
0
+ R0
MPYF
R1, R0
; gP
→
R0
LDF
∗
AR0++, R1
; Q
0
→
R1
MPYF
R2, R1
; zR1
→
R1
ADDF
0.5, R1
; Q = 0.5 + R1
SUBFR
0, R1
; Q – P
→
R1
; Вычисление P / ( Q – P)
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]