Исключением из этого правила является особый случай IE, который достаточно часто не маскируется, предоставляя возможность выхода на обработчик прерываний.
В младших моделях математического сопроцессора (МСП) в регистре управления CW содержащем общий бит маски прерывания IEM с помощью которого маскированы все особые случаи.
Кроме масок особых случаев…
PC – Precision Control (управление точностью).
Задает точность представления результатов арифметических функций FPU:
00 – ОТ 32 бит
10 – ДТ 64 бит
11 – РТ 80 бит
Содержимое этого поля учитывается только при выполнении команд FADD, FSUB, FMUL, FDIV, FSQRT и их модификаций. Для остальных команд FPU используется формат РТ.
Замечание:
Использование уменьшенных форматов не увеличивает скорости выполнения операций в FPU. По умолчанию принято использование формата РТ.
RC – Rounding Control (управление округлением).
Округление выполняется по всех случаях, когда результат операции невозможно точно представить в формате приемника, т.е. когда имеет место особый случай PE (потеря/ошибка точности).
2х битное поле PC задает один из возможных стандартных способов округления:
00 – к ближайшему;
01 – к ближайшему меньшему (округление вниз, к «-∞»);
10 – к ближайшему большему (округление вверх, к «+∞»);
11 – округление к нулю (усечение);
(Сущность методов см. в конспекте машинной арифметики).
Метод округления к ближайшему принимается по умолчанию и пригоден для большинства приложений. Он обеспечивает наиболее точную (погрешность не более половины младшего разряда) и статистически не смещенную оценку результата (погрешность является знакопеременной).
Округление усечением используется в основном как поддержка целочисленной арифметики.
Метод округления вниз и вверх используется в основном в, так называемой, интервальной арифметике и позволяет определить верхнюю и нижнюю границы многоэтапного вычисления, когда промежуточные результаты нужно округлять.
Поле RC оказывает влияние только на выполнение арифметических команд.
Регистры указателя команды FIP
и указателя операнда FDP
FIP – Floating Instruction Pointer регистры 48-и разрядные
FDP – Floating Data Pointer
Информация, содержащаяся в этих регистрах, предназначена только для обработки особых случаев, в связи с этим эти регистры иногда называют указателями особого случая.
Когда FPU выполняет численную команду, она автоматически сохраняет в этих регистрах адреса команды и её операнда (если он есть), а также первые 11 бит кода операции для R-режима.
R – Real (реальный режим, для совместимости младших и старших моделей)
В принципе сохраняются 2 старших байта команды, причем 5 старших бит всех команд FPU кодируется одинаково (11011 – ESC, кодом под внешние операции).
При работе в P-режиме в качестве FIP сохраняются значения CS:EIP, а в качестве FDP сохраняются значения DS:EA.
Содержимое регистров FIP, FDP используется обработчиками прерываний FPU.
Система команд FPU
Общее число команд FPU по мнемоникам порядка 80-и.
Основные типы команд:
· пересылки;
· арифметические;
· сравнения;
· трансцендентные;
· управления.
Команды пересылки данных:
1) Загрузка (FLD, FILD, FBLD);
Общий вид этих команд:
mem → ST(0)
ST(i) → ST(0) только для FLD
Загрузка операнда предваряется декрементом поля TOP.
2) Команды сохранения (FST(P), FIST(P), FBSTP);
ST(0) → mem
ST(0) → ST(i) только для FST(P)
3) Команда обмена (FXCH);
ST(0) → ST(i)
4) Условная пересылка (FCMOVcc, cc – condition cod (код условия));
Действие команды:
ST(i) → ST(0), if cc=1
Мнемокоды cc и условия пересылки:
Мненокод |
Условие |
||
B NB E NE BE NBE U NU |
(Below) (Non Below) (Equal) (Non Equal) |
CF=1 CF=0 ZF=1 ZF=0 CF=1 или ZF=1 CF=0 и ZF=0 PF=1 PF=0 |
четность/ нечетность |
5) Загрузка констант;
const → ST(0)
FLDZ (0)
FLD1 (1)
FLDPI (π)
FLDL2T ()
FLDL2E ()
FLDLG2 ()
FLDLN2 ()
Арифметические команды:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.