Арифметические команды



12.4.2. Арифметические команды

Сопроцессор использует шесть основных типов арифметических команд:

FxxxПервый операнд берется из верхушки стека (источник), второй - следующий элемент стека. Результат выполнения команды записывается в стек.
Fxxx памятьИсточник берется из памяти, приемником является верхушка стека ST(0). Указатель стека ST не изменяется, команда действительна только для операндов с одинарной и двойной точностью.
Fixxx памятьАналогично предыдущему типу команды, но операндами могут быть 16- или32-битовые целые числа.
Fxxx ST, ST(i)Для этого типа регистр ST(i) является источником, а ST(0) - верхушка стека - приемником. Указатель стека не изменяется.
Fxxx ST(i), STДля этого типа регитр ST(0) является источником, а ST(i) - приемником. Указатель стека не изменяется.
FxxxP ST(i), STРегистр ST(i) - приемник, регистр ST(0) - источник. После выполнения команды источник ST(0) извлекается из стека.

Строка "xxx" может принимать следующие значения: ADD Сложение SUB Вычитание


SUBR Обратное вычитание, уменьшаемое и вычитаемое меняются местами MUL Умножение DIV Деление DIVR Обратное деление, делимое и делитель меняются местами

Кроме основных арифметических команд имеются дополнительные арифметические команды:

FSQRTИзвлечение квадратного корня
FSCALEМасштабирование на степень числа 2
FPREMВычисление частичного остатка
FRNDINTОкругление до целого
FXTRACTВыделение порядка числа и мантиссы
FABSВычисление абсолютной величины числа
FCHSИзменение знака числа

По команде FSQRT вычисленное значение квадратного корня записывается в верхушку стека ST(0).

Команда FSCALE изменяет порядок числа, находящегося в ST(0). По этой команде значение порядка числа ST(0) складывается с масштабным коэффициентом, который должен быть предварительно записан в ST(1). Действие этой команды можно представить следующей формулой: ST(0) = ST(0) * 2n, где -215 <= n <= +215

В этой формуле n - это ST(1).

Команда FPREM вычисляет остаток от деления делимого ST(0) на делитель ST(1). Знак результата равен знаку ST(0), а сам результат получается в вершине стека ST(0).

Действие команды заключается в сдвигах и вычитания, аналогично "ручному" делению "в столбик". После выполнения команды флаг C2 регистра состояния может принимать следующие значения:

0 остаток от деления, полученный в ST(0), меньше делителя ST(1), команда завершилась полностью;
ST(0) содержит частичный остаток, программа должна еще раз выполнить команду для получения точного значения остатка.

Команда RNDINT округляет ST(0) в соответствии с содержимым поля RC управляющего регистра.

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



Содержание раздела