acb41f5d

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


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



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) на противоположный.



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