Арифметические команды
Сопроцессор использует шесть основных типов арифметических команд:
Команда | Описание | ||
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), команда завершилась полность |
1 |
ST(0) содержит частичный остаток, программа должна еще раз выполнить команду для получения точного значения остатка |
Команда FABS вычисляет абсолютное значение ST(0). Аналогично, команда FCHS изменяет знак ST(0) на противоположный.