You are on page 1of 17

Робота з дійсними числами

Співпроцесор – це пристрій, що розширює можливості


центрального процесора. Співпроцесор дозволяє
виконувати операції з числами, представленими в
дійсному форматі
Програма

ADD AX,1
INC ECX
FADD ST(0),ST(1)
FPU CPU SUB EDX,ECX
FLD MAS[ECX]
FMUL ST(0),ST(2)
ADD ECX,4
Діапазон
Робота співпроцесора

FPU 3 5 6

CPU
1 2 3 4 5 6 7
Програмна модель співпроцесора
Управляюче слово
• FINIT - ініціалізація співпроцесора

• Дозволяє вибрати один з двох різних типів нескінченності.


• За умовчанням встановлюється - єдина нескінченність без знаку.

• Встановлювати один з чотирьох способів округлення:
• до найближчого числа;
• до меншого числа;
• до більшого числа;
• відкидання розрядів.
• За умовчанням встановлюється режим округлення до найближчого
числа.
Слово стану

PE – помилка точності;
UE –антипереповнення;
OE – переповнювання;
ZE – ділення на 0;
DE – денормалізація;
IE – неприпустима операція.
Завантаження даних в стек співпроцесора

• FLD ім'я – дійсного числа


• (4, 8 або 10 байт);
• FILD ім'я – цілого числа
• (2, 4 або 8 байт);
• FBLD ім'я – двійково–десяткового числа
• (10 байт).
• FLD ST(i)
Константи
FLDZзавантаження дійсного значення 0.0
FLD1 завантаження дійсного значення 1.0
FLDPI завантаження числа π = 3.1415926535897932
FLDL2T завантаження log2(10) = 3.3219280948873623
FLDL2E завантаження log2(e) = 1.4426950408889634
FLDLG2 завантаження log10(2) = 0.30102999566398119
FLDLN2 завантаження ln (2) = 0.69314718055994530
Збереження значень регістрів співпроцесора

• FST ім'я ST(0) ім'я


• FBST ім'я
• FIST ім'я

• FSTP ім'я ST(0) ім'я


• FBSTP ім'я POP ST
• FISTP ім'я
• М 2р 1 > M >=0.5 min < p < max

• М1 2р1 + М2 2р2 = (М1 2р1-р2 + М2 )2р2

• М1 2р1 * М2 2р2 = (М1 * М2 )2р2 + р1


Арифметичні операції

• Команди FADD, FSUB, FMUL і FDIV можуть


не мати аргументів, мати один або два
аргументи.
• FADD ST(0) = ST(1) + ST(0).
• FSUB ST(3) ST(0) = ST(3) - ST(0).
• FMUL ST(3),ST(0) ST(3) = ST(3) * ST(0).

• FSUBR ST(0) = ST(0) + ST(1).


Арифметичні операції

FCHS заміна знаку


FABS абсолютне значення
FSQRT квадратний корінь
FRNDINT округлення до цілого
FSCALE масштабування ( *2ST(1) )
Тригонометричні операції
• FCOS st(0) ← COS( st(0) )
• FSIN st(0) ← SIN( st(0) )
• FSINCOS st(1) ← SIN( st(0) ) , st(0) ← COS( st(0))
• FPTAN st(1) ← TAN( st(0) ) st(0) ← 1. частковий тангенс
• FPATAN st(0) ← АTAN( st(1)/st(0)) арктангенс

• X - 263 ÷ + 263 радіан


• Х = α × Рі/180
• Arcsin α =arctg(α/(√(1−α2)), −1<α<1
Логарифмічні функції та функції зведення в
ступінь

• FYL2X Y × log2(X) ST(0) = ST(1) × log2ST(0).


• 0 <X
logb(X)= log2(X) / log2(b)
• F2XM1 st(0) ← 2st(0) – 1
• -1 < X < 1

АЛГОРИТМ
• Розглядаємо по черзі кожен символ:
1. Якщо символ - змінна, то поміщаємо його у вихідний рядок.
2. Якщо символ - відкриваюча дужка, то поміщаємо її в стек.
• 3. Якщо символ дужка ) - «виштовхуємо» всі операції зі стека до дужки
(
• 3. Якщо символ - знак операції (+ , - *, / ),
• а) якщо стек порожній
або якщо пріоритет цієї операції більшій ніж пріоритет
операції у стеку
• або у стеку «(«
поміщаємо операцію в стек , перехід до пункту 1.
• б) якщо пріоритет операції менший або однаковий
пріоритету операції в стеку, поміщаємо операцію зі
стеку вихідний рядок; перехід до пункту а)
Приклад
1) 3 Х5 - 6 Х4 + 7Х3 - 8Х2 + 9Х + 11
• 3 Х *Х* Х* Х* Х* 6 Х* Х* Х* Х * - 7 Х* Х* Х* +
8 Х *Х * - 9 Х * + 11 +
2) 11 + 9Х - 8Х2 + 7Х3 - 6 Х4 + 3 Х5 =
• 11 + Х(9 –Х (8 + Х(7 – Х (6 + 3Х))))
• 11 Х 9 Х 8 Х 7 Х 6 3 Х *+ * – * + * – * +
2) ((((3 Х – 6) Х + 7)Х – 8)Х + 9)Х + 11
• 3 Х * 6 – Х * 7 + Х * 8 – Х * 9 + Х * 11 +
Програмування FPU
3 Х * 6 – Х * 7 + Х * 8 – Х * 9 + Х * 11 +

• FLD MAS[0] • FLD MAS[3 * 8]


• FLD X • FADD
• FMUL • FLD X
• FLD MAS[1 * 8] • FMUL
• FADD • FLD MAS[4 * 8]
• FLD X
• FADD
• FMUL
• FLD X
• FLD MAS[2 * 8]
• FADD • FMUL
• FLD X • FLD MAS[5 * 8]
• FMUL • FADD
• FSTP Y

You might also like