Дополнительные арифметические команды

МНЕМОКОД ОПИСАНИЕ
FSQRT Извлечение квадратного корня
FSCALE Масштабирование на степень 2
FPREM Нахождение частичного остатка
FPREM1 Нахождение остатка
FRNDINT Округление до целого
FXTRACT Выделение порядка и мантиссы
FABS Нахождение абсолютной величины
FCHS Изменение знака

FSQRT:- извлекает квадратный корень из ST(0) и записывает результат в ST(0). При попытке извлечения корня из отрицательного числа возникает особый случай недействительной операции. Начиная с процессора 80486, разрешены операции : .

FSCALE: . Если ST(1) не целое и больше 1 по абсолютной величине, то берется ближайшее меньшее целое, если ST(1) меньше 1 или находится вне диапазона, то результат неопределенный, особый случай не генерируется. Начиная с сопроцессора 80387 ограничений на операнды команды нет.

FXTRACT: разлагает ST(0) на два числа с плавающей точкой: несмещенный порядок и знаковую мантиссу. Порядок заменяет старое значение ST(0), а мантисса включается сверху, то есть указатель стека уменьшается на единицу. Порядок истинный, в форме вещественного числа.

FRNDINT: округляет ST(0) до целого числа в формате с плавающей точкой согласно полю RC регистра состояния.

FABS: заменяет содержимое регистра ST(0) на его абсолютное значение (изменяет знаковый разряд).

FCHS: инвертирует знак содержимого ST(0).

FPREM: вычисляет остаток от деления содержимого ST(0) на число из ST(1), знак остатка совпадает со знаком ST(0). Остаток заменяет содержимое ST(0). FPREM формирует частичный остаток, так как операция может прекратиться, не завершив операции деления. FPREM работает, производя повторяющиеся машинные вычитания, при этом производится не более 64 вычитаний. Если 64 вычитания достаточно, чтобы число ST(0) < ST(1), то в ST(0) будет находится истинный остаток, а бит С2 кода условия сбрасывается в нуль. Если 64 вычитаний недостаточно, то С2 устанавливается в единицу, а в ST(0) находится уменьшенный результат после 64 вычитаний. С2 проверяется командой JP, после передачи регистра состояния в AX и командой SAHF. Повторное вычитание FPREM до образования С2 = 0 дает точный остаток. 64 вычитания делают для того, чтобы между повторными исполнениями команды можно было прервать сопроцессор (64 вычитания гарантируют, что FPREM не будет длиться дольше команды деления, то есть не превысит длительности максимальной по времени команды). Применяется в основном в вычислениях тригонометрических функций.

FPREM1 (введена в систему команд для сопроцессора 80387): вычисляет величину REM = ST - ST(1)*Q, где Q – целая часть числа ST/ST(1); С032 – содержат младшие три бита частного.