Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.4.6. Команды специальных операций

К этой группе относятся команды, реализующие некоторые арифметические процедуры, и вычисление тригонометрических и трансцендентных функций. Коды и форматы команд приведены в табл. 2.37.

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

Команда FXTRACT разлагает содержимое ST(0) на два компонента: порядок и мантис­су со знаком, которые размещаются в двух верхних регистрах арифметического стека. При этом значение поля ТОР в регистре FPSR уменьшается на единицу, и в новую вершину стека ST(0) заносится мантисса, а в регистр ST(1) [бывший ST(0)] - порядок, представлен­ный в виде вещественного числа (формат РТ). В поле Е регистра ST(0) заносится число 3FFFH, соответствующее нулевому значению порядка. Если после команды FXTRACT вы­полнить команду FSCALE, то будет восстановлено исходное число.

Команда FRNDINT выполняет округление числа, хранящегося в ST(0), до целого значе­ния в соответствии со способом, определяемым полем RC в регистре FPCR.

При выполнении тригонометрических функций sin, cos с помощью команд FSIN, FCOS, FSINCOS содержимое ST(0) воспринимается как число радианов. Значения функций, по­лученные с помощью команд FSIN, FCOS, заносятся в регистр ST(0). При выполнении ко­манд FSINCOS производится уменьшение на единицу поля ТОР, и полученные значения функций sin и cos заносятся в два верхних регистра ST(0) и ST(1) [бывший ST(0)].

Команда FPTAN производит вычисление функции tg от числа, содержащегося в регистре ST(0). Полученный результат сохраняется в этом же регистре, после чего значение поля ТОР в регистре FPSR уменьшается на единицу, и в новую вершину стека ST(0) записывается число 1,0 в формате РТ. Таким образом, значение функции tg оказывается в регистре ST(1).

При выполнении команд FSIN, FCOS, FSINCOS, FPTAN исходный операнд в регистре ST(0) должен находиться в диапазоне - 2 63 ... +2 63. Если операнд выходит за указанные границы, то в регистре FPSR устанавливается значение бита С2 = 1, а результатом опера­ции будет неопределенное значение (код неопределенности в формате РТ). Какое-либо исключение при этом не реализуется.

Команда FPATAN вычисляет значение функции arctg (х/у), где х содержится в регистре ST(1), у в ST(0). После вычисления производится выталкивание из стека (значение поля ТОР в регистре FPSR увеличивается на единицу), а результат вычисления размещается в новой вершине стека ST(0) [бывшем регистре ST(1)].

Команда F2XM1 вычисляет значение функции 2 х - 1, где х-содержимое регистра ST(0). Результат операции размещается в том же регистре 5Т(0).При этом величина х должна находиться в диапазоне - 1 ... +1, иначе результатом операции будет неопределенность (см. табл. 2.26).

При вычислении логарифмических функций y*log 2 х, y*log 2 (х+1) с помощью команд FYL2X, FYL2XP1 операнд х размещается в ST(0), операнд у - в ST(1). При выполнении команд производится извлечение операндов из стека, а результат заносится в вершину стека. Значение поля ТОР в регистре FPSR после выполнения этих команд возрастает на единицу, т.е. результат будет содержаться в новой вершине стека ST(0) - бывшем регистре ST(1). На значения операнда х накладываются определенные ограничения. При выполне­нии команды FYL2X должно быть значение х > 0, иначе реализуется исключение недей­ствительной операции #1. При выполнении команды FYL2XP1 операнд х должен находить­ся в диапазоне

-(1- !2/2)< х< + (1 - I2/2),

иначе результатом операции будет неопределенность (см. табл. 2.26).