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

Для безоперандных арифметических команд операндами по умолчанию являются регистры ST(0), ST(1). Для однооперандных арифметических команд - один из операндов - это вершина стека ST(0).

Для всех арифметических команд существуют обычные (прямые) формы команд: FADD, FSUB, FMUL, FDIV , а для команд вычитания и деления существуют ещё и обратные формы команд: FSUBR , FDIVR.

Для обратных форм команд выполняется следующая схема:

источник - приемник=приемник или источник / приемник = приемник. Для прямых команд уменьшаемое или делимое берется из приемника.

Существует шесть форм команд:

FXXX;

FXXX память;

FIXXX память;

FXXX ST(0), ST(i);

FXXX ST(i), ST(0);

FXXXP ST(i), ST(0).

Здесь ХХХ- мнемокод арифметической команды.

При реализации команд первого типа процессор извлекает из стека два верхних операнда, а затем включает в стек результат операции. В результате указатель вершины стека увеличивается на единицу.

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

Реализации команд третьего типа присходит аналогично командам второго типа, но операнды в памяти целые (16 или 32 бита).

При реализации команд четвертого типа любой регистр ST(i) служит источником, а вершина стека – приемником, при этом указатель вершины стека не изменяется.

При реализации команд пятого типа любой регистр ST(i) служит приемником, а вершина стека - источником, при этом указатель вершигы стека не изменяется.

При реализации команд шестого типа любой регистр ST(i) служит приемником, а вершина стека - источником, по окончании операции источник извлекается из стека, то есть указатель вершины стека увеличивается на единицу.

Арифметические операции над целыми числами выполняется медленнее, чем в основном процессоре.