Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЭВМ и ПУ.doc
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

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

Для безоперандных арифметических команд операндами по умолчанию являются регистры 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);

FXXXPST(i),ST(0).

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

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

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

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

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

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

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

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

4.5.3.Дополнительные арифметические команды

МНЕМОКОД

ОПИСАНИЕ

FSQRT

Извлечение квадратного корня

FSCALE

Масштабирование на степень 2

FPREM

Нахождение частичного остатка

FPREM1

Нахождение остатка

FRNDINT

Округление до целого

FXTRACT

Выделение порядка и мантиссы

FABS

Нахождение абсолютной величины

FCHS

Изменение знака

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

FSCALE: . ЕслиST(1) не целое и больше 1 по абсолютной величине, то берется ближайшее меньшее целое, еслиST(1) меньше 1 или находится вне диапазона, то результат неопределенный, особый случай не генерируется. Начиная с сопроцессора 80387 ограничений на операнды команды нет.

FXTRACT: разлагаетST(0) на два числа с плавающей точкой: несмещенный порядок и знаковую мантиссу. Порядок заменяет старое значениеST(0), а мантисса включается сверху, то есть указатель стека уменьшается на единицу. Порядок истинный, в форме вещественного числа.

FRNDINT: округляетST(0) до целого числа в формате с плавающей точкой согласно полюRCрегистра состояния.

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

FCHS: инвертирует знак содержимогоST(0).

FPREM: вычисляет остаток от деления содержимогоST(0) на число изST(1), знак остатка совпадает со знакомST(0). Остаток заменяет содержимоеST(0).FPREMформирует частичный остаток, так как операция может прекратиться, не завершив операции деления.FPREMработает, производя повторяющиеся машинные вычитания, при этом производится не более 64 вычитаний. Если 64 вычитания достаточно, чтобы числоST(0) <ST(1), то вST(0) будет находится истинный остаток, а бит С2кода условия сбрасывается в нуль. Если 64 вычитаний недостаточно, то С2устанавливается в единицу, а вST(0) находится уменьшенный результат после 64 вычитаний. С2проверяется командойJP, после передачи регистра состояния вAXи командойSAHF. Повторное вычитаниеFPREMдо образования С2= 0 дает точный остаток. 64 вычитания делают для того, чтобы между повторными исполнениями команды можно было прервать сопроцессор (64 вычитания гарантируют, чтоFPREMне будет длиться дольше команды деления, то есть не превысит длительности максимальной по времени команды). Применяется в основном в вычислениях тригонометрических функций.

FPREM1 (введена в систему команд для сопроцессора 80387): вычисляет величинуREM=ST-ST(1)*Q, гдеQ– целая часть числаST/ST(1); С032– содержат младшие три бита частного.