logo search
несколько программ / bsp33

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

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

Команда

Описание

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) содержит частичный остаток, программа должна еще раз выполнить команду для получения точного значения остатка

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

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