Команды пересылки данных

Команды  осуществляют обмен данными (операндов и результатов выполнения команд) между верхним регистром стека
.ST(O) и регистрами ST(i) и памятью. Структурой сопроцессора определены два формата данных: внутренний - для их хранения и обработки в устройствах сопроцессора и внешний - для хранения в памяти вычислительной системы.
Данные из внутреннего формата во внешний и наоборот преобразуются сопроцессором КМ1810ВМ87 автоматически при выполнении соответствующей команды.Представление данных и содержимого про- граммно-доступных устройств (ПДУ) в памяти вычислительной системы приведено на рис. 22 и 23 соответственно.
Команда FILD (INTEGER LOAD) уменьшает на единицу содержимое указателя стека ST в регистре слова состояния, преобразует внешний 2-, 4- или 8-байтный целочисленный формат во внутренний временный действительный формат и загружает его в верхний (новый) регистр стека. Целочисленный нуль из внешнего формата преобразуется во внутренний временный действительный формат, как положительный нуль. При выполнении команды FILD контролируется особый случай - "недействительная операция".
FBLD (PACKED DECIMAL (BCD) LOAD) уменьшает на единицу содержимое указателя стека STP в регистре слова состояния, преобразует внешний упакованный двоично-десятичный формат во внутренний 10-байтный временный действительный формат и загружает его в верхний (новый) регистр стека. При загрузке знак операнда-источника сохраняется включая случай, когда значение представляет собой отрицательный нуль. FBLD является точной операцией, т.е. операнд-источник загружается без ошибки округления. Предполагается, что упакованный десятичный операнд-источник находится в диапазоне (0...9)Н. Командой FBLD не проверяется наличие недействительных десятичных разрядов (А, В, С, D, Е, F)OH, и попытка загрузки недействительного кода не обнаруживается. При выполнении команды FBLD контролируется особый случай - "недействительная операция".
FLD (LOAD REAL) уменьшает на единицу содержимое указателя стека STP в регистре слова состояния, преобразует из внешней памяти 4- или 8-байтный действительный формат операнда-источника во внутренний 10-байтный временный действительный формат и загружает его в верхний (новый) регистр стека, а также позволяет загрузить в новый регистр стека из внешней памяти или из произвольного регистра стека ST(i) операнд-источник, представленный в 10-байтном временном действительном формате. Команда FLD ST(0) при профаммировании дублирует содержимое верхнего (нового) регистра стека до ее выполнения в нем. Во время выполнения команды FLD контролируются особые случаи - "недействительная операция" и "денормализованный операнд".
FST (STORE REAL) запоминает действительное данное из текущего регистра стека ST(0) в произвольном регистре стека ST(i) либо в 4- или 8-байтном слове памяти, после чего содержимое указателя стека в регистре слова состояния увеличивается на единицу. Если информация в приемнике представлена в 4- или 8-байтном действительном формате, то значащая часть округляется до ширины формата приемника в соответствии со значением поля управления округлением RC управляющего слова, а порядок преобразуется до ширины и длины смещения формата приемника. Если, однако, верхняя позиция стека отмечена признаком специальной величины (бесконечность, нечисло или денормализованный операнд), то значащая часть содержимого верхней позиции стека не округляется, а просто укорачивается справа для соответствия формату приемника. Порядок передается в
приемник также без преобразования, лишь укорачивается справа. Это сохраняет возможность распознавания таких величин, как бесконечность или нечисло (порядок - все единицы), и денормализованной величины (порядок - все нули), что позволяет в дальнейшем производить правильную загрузку этой величины и присваивать ей соответствующий признак в регистре признаков.
Задание команды FST ST(0) эквивалентно выполнению холостой операции без пересылки данных. Команда FST проверяет наличие особых случаев: "недействительная операция", "переполнение", "антипереполнение" и "точность".
FSTP (STORE REAL AND POP) запоминает действительное данное из текущего ST(0) в произвольном регистре стека ST(i) либо в 4-, 8- или 10-байтном слове памяти и выгружает содержимое текущего регистра из стека. Действительное данное из операнда-источника выгружается путем увеличения содержимого указателя стека в регистре слова состояния на единицу и присвоения верхнему регистру стека ST(0) состояния "пусто" в регистре признаков. В остальном команда FSTP аналогична команде FST. Задание команды FSTP ST(0) эквивалентно выборке из стека без пересылки данных.
FBSTP (PACKED DECIMAL (BCD) AND POP) преобразует содержимое верхнего ST(0) в упакованное двоично-десятичное целое число, запоминает результаты в 10-байтном 'слове памяти и выгружает содержимое текущего регистра из стека. Содержимое операнда-источника выгружается путем присвоения верхнему ST(0) признака "пусто" в регистре признаков и увеличения на единицу указателя стека в регистре слова состояния. Команда FBSTP проверяет наличие особого случая - "недействительная операция".
FIST (INTEGER STORE) преобразует содержимое верхнего ST(0) из внутреннего 10-байтного временного действительного формата во внешний двоичный целочисленный формат, округляет его в соответствии со значением поля RC в управляющем регистре и запоминает результат в 2- или 4-байтном слове памяти. Значение поля STP в регистре слова состояния не изменяется. Временные действительные положительный и отрицательный истинные нули преобразуются в целочисленный положительный нуль. Команда FIST проверяет наличие особых случаев - "недействительная операция" и "точность".
FISTP (INTEGER STORE AND POP) работает аналогично команде FIST, за исключением того, что она после пересылки данных производит выборку из стека путем присвоения верхнему ST(0) признака "пусто" в регистре признаков и последующего увеличения на единицу указателя стека в регистре слова состояния. Команда FISTP выполняет операции с внешними 2-, 4- или 8-байтными целочисленными форматами (MEM2I, MEM4I и МЕМ81 соответственно).
FXCH (EXCHANGE REGISTER) обменивает содержимые текущего ST(0) и первого ST(1) или произвольного ST(i) регистров стека. Команда FXCH допускает два способа кодирования операндов: только с операндом-приемником (FXCH ST(i)) и без операндов (FXCH). Если в команде операнд-приемник не задан, то используется регистр стека ST(1). Команда FXCH проверяет наличие особого случая - "недействительная операция".
Арифметические команды
Набор арифметических команд  включает в себя большое число вариантов базовых команд сложения, вычитания, умножения, деления и др. Многообразие вариантов базовых команд, форм операндов, использование целочисленных и действительных выполнения арифметических команд в устройствах сопроцессора или памяти значительно упрощают разработку рабочих программ.
Команды FADD (ADD REAL), FSUB (SUBTRACT REAL), FMTJL (MULTIPLY REAL) и FDIV (DIVIDE REAL) выполняют сложение, вычитание, умножение и деление соответственно действительных данных из устройства-приемника и устройства-источника и записывают результат в устройство-приемник. В командах разрешены ссылки на следующие наборы устройств:
ПРИЕМНИК    источник
Текущий регистр стека ST(0)    Произвольный регистр стека ST(i)
Произвольный ромстр стека ST(i)    Текущий регистр стека ST(0)
Текущий регистр стека S1'(0)    ' 4-байтное слово памяти MEM4R
Текущий регистр стека S'I'(O)    8-байтное слово памяти MEM8R
FSUBR (SUBTRACT REAL REVERSED) и FDIVR (DIVIDE REAL REVERSED) аналогичны командам FSUB и FDIV соответственно, '.a исключением того, что они позволяют вычислять разность и частное от деления действительных данных из устройства-источника и устройства-приемника. Содержимое текущего регистра стека ST(0) можно удвоить, обнулить, возвести в квадрат или заменить действительной единицей с помощью команд FADD ST, ST(0); FSUB ST, ST(0) и FSUBR ST, ST(0); FMUL ST, ST(0); FDIV ST, ST(0) соответственно.
Команды FADD, FSUB, FMUL, FDIV, FDIVR и FSUBR проверяют наличие особых случаев: "недействительная операция", "денормализованный операнд", "переполнение", "антипереполнение" и "точность".
FADD/FADDP (ADD REAL AND POP), FSUB/FSUBP (SUBTRACT REAL AND POP), FMUL/FMULP (MULTIPLY REAL AND POP) и FDIV/FDIVP (DIVIDE REAL AND POP) вычисляют сумму, разность, произведение и частное от деления соответственно действительных данных из первого или произвольного ST(i) и текущего ST(0) регистров стека, записывают результат вычисления в первый или произвольный регистр ST(i) и выгружают содержимое текущего регистра стека путем увеличения показателя стека STP в регистре слова состояния на единицу и присвоения регистру ST(0) признака "пусто" в регистре признаков.
FSUBR/FSUBRP (SUBTRACT REAL REVERSED AND POP) и FDIVR/FDIVRP (DIVIDE REAL REVERSED AND POP) аналогичны командам FSUB/FSUBP и FDIV/FDIVP соответственно, за исключением того, что они вычисляют разность и частное от деления действительных данных из текущего ST(0) и первого ST(1) или произвольного ST(i) регистра стека.
Команды FADD/FADDP, FSUB/FSUBP, FMUL/FMULP, FDIV/FDIVP, FSUBR/FSUBRP и FDIVR/FDIVRP проверяют особые случаи: "недействительная операция", "денормализованный операнд", "переполнение", "антипереполнение" и "точность".
FIADD (INTEGER ADD), FISUB (INTEGER SUBTRACT), FIMUL (INTEGER MULTIPLY) и FIDIV (INTEGER DIVIDE) выполняют сложение, вычитание, умножение и деление соответственно действительного данного из текущего регистра стека и целочисленного данного из 2- или 4-байтного слова памяти и записывают результат вычисления в текущий регистр стека ST(0).
FISUBR (INTEGER SUBTRACT REVERSED) и FIDIVR (INTEGER DIVIDE REVERSED) вычисляют разность и частное от деления соответственно целочисленного данного из 2- или 4-байтного слова памяти и действительного данного из текущего регистра стека ST(0).
Команды FIADD, FISUB, FIMUL, FIDIV, FISUBR и FIDIVR проверяют наличие особых случаев: "недействительная операция", "денормализованный операнд", "переполнение" и "точность".
FPREM (PARTIAL REMAINDER) вычисляет остаток от деления действительных данных (делимого и делителя), если они значительно различаются абсолютными величинами, занимают немного машинного времени. Это может увеличить время обслуживания запроса на прерывание в вычислительной системе, так как использовать команды микропроцессора КМ1810ВМ87 в процедуре обслуживания прерывания разрешается только после завершения выполнения его текущей команды. Поэтому процедура вычисления остатка от деления реализуется программно-аппаратными средствами с помощью команды вычисления частичного остатка FPREM микропроцессора.
Команда FPREM уменьшает делимое из текущего регистра стека ST(0) путем многократного вычитания делителя из первого регистра стека ST(1) на величину не более чем 2м и записывает результат вычисления в текущий регистр стека ST(0). Если после выполнения команды содержимое ST(0) меньше делителя из ST(1), то оно является истинным остатком (поле бита условия С2 в регистре слова состояния устанавливается в состояние "О"), в противном случае - частичным остатком (поле бита условия С2 в регистре слова состояния устанавливается в состояние "1").
Если получен частичный остаток, то вычисление истинного остатка следует продолжить, используя частичный остаток делимого команды FPREM. При получении истинного остатка поля битов условий СО, С1 и СЗ содержат 0-, 1- и 2-й биты частного от деления соответственно. Знак остатка соответствует знаку делимого.
Пример программы вычисления истинного остатка:
; ST(0) - делимое
; ST(1) - делитель
Цикл: FPREM
FSTSW статус 87 FWAIT
MOV АН, BYTE PRT статус 87 + 1 AND АН, 04Н JNZ цикл
; ST(0) - истинный остаток
Другим условием завершения программного цикла может быть отношение ST(0) < 'ST(l). Если ST(0) = ST(1), то истинный остаток равен нулю.
Одно из основных применений команды FPREM - приведение аргументов трансцендентных функций к области существования. Три младших разряда частного позволяют определить квадрант аргумента.
FSCALE (SCALE) масштабирует действительное данное из текущего ST(0) путем сложения его порядка с масштабным множителем из первого ST(1), т.е. ST(0) 2ST(1). Масштабный множитель рассматривается как целое число в пределах от минус 215 до плюс 215. Команда FSCALE записывает результат масштабирования в текущий ST(0).
Если содержимое ST(1) - не целое число, но находится в указанных допусках и по модулю больше единицы, то команда округляет его до целого числа. Округление осуществляется в сторону нуля. Если содержимое ST(1) не находится в указанных пределах или по модулю меньше единицы, то результат выполнения команды не определяется. Особый случай при этом не вырабатывается.
Команда FSCALE проверяет особые случаи: "недействительная операция", "переполнение" и "антипереполнение". Эту команду рекомендуется использовать для масштабирования элементов задания вектора, так как она быстро выполняет умножение или деление координат вектора на целую степень числа 2.
FRNDINT (ROUND TO INTEGER) округляет действительное данное из текущего регистра стека до целого числа. Режим округления определяется содержимым поля RC в регистре управляющего слова. Команда FRNDINT проверяет особые случаи: "недействительная операция" и "точность".
FSQRT (SQUARE ROOT) вычисляет квадратный корень действительного данного (аргумента) из текущего ST(0) и записывает результат вычисления в этот же регистр. Область существования функции: (+0) < х < ( ). Команда FSQRT проверяет особые случаи: "недействительная операция", "денормализованный операнд" и "точность".
FXTRACT (EXTRACT EXPONENT AND SIGNIFICANT) раскладывает действительное данное из ST(0) на два действительных данных, одно из которых - величина несмещенного порядка исходного данного, второе - мантисса. Содержимое полей в формате действительного данного, представляющего собой величину несмещенного порядка исходного данного, формируется следующим образом: содержимое поля "знак" - знак исходного данного; содержимое поля "порядок" - смещенный порядок исходного данного; содержимое поля "мантисса" - несмещенный порядок (смещенный порядок действительного данного минус смещение 3FFFH) исходного данного.
Содержимое полей в формате действительного данного, являющегося мантиссой исходного данного, формируется так: содержимое поля "знак" - знак исходного данного; содержимое поля "порядок" - смещение 3FFFH; содержимое поля "мантисса" - мантисса исходного данного.
Данное, представляющее собой величину несмещенного порядка, записывается в новый ST(0), затем данное, представляющее собой мантиссу, проталкивается в стек. Если исходный операнд равен нулю, FXTRACT вырабатывает нули в регистрах ST(0) и ST(1).
Пример разложения действительного данного командой FXTRACT (S-знак, Е - порядок, L и R-целая и дробная части мантиссы соответственно)
    S    Е    L    R
Исходное данное ST(0)    0    100 0000 0000 0011    1    01010...10
Порядок ST(1)    0    100 0000 0000 0001    1    00000...00
Мантисса ST(2)    0    011 1111 1111 11111    1    01010...10

Команда FXTRACT проверяет наличие особого случая - "недействительная операция".
FABS (ABSOLUTE VALUE) формирует абсолютное значение действительного данного из текущего регистра стека путем замены его знака на положительный. Команда FABS проверяет наличие особого случая - "недействительная операция".
FCHS (CHANGE SIGN) изменяет знак действительного данного из текущего регистра стека ST(0) на противоположный, а также проверяет наличие особого случая - "недействительная операция".
Команды сравнения и проверки
Каждая из команд сравнения (табл. 17) анализирует содержимое текущего регистра стека, при необходимости сравнивает его с содержимым других регистров и по результату анализа устанавливает содержимое полей битов условий СЗ, С2, С1 и СО в регистре слова состояния.
FXAM        9B    D9    E5    12/23

Предусмотрены специальные формы операций сравнения с двоичными целыми и действительными числами, а также выгрузка из стека после сравнения не требующихся более операндов. Передача кода условий СЗ, С2, С1 и СО в память для анализа осуществляется после сравнения по команде FSTSW. Некоторые команды, не принадлежащие к группе команд сравнения, могут также изменять код условий СЗ, С2, С1 и СО в регистре слова состояния.
FCOM (COMPARE REAL) сравнивает действительное данное из текущего ST(0) с действительным данным из первого или произвольного ST(i) регистров стека либо с 4- или 8-байтным словом памяти и по результату сравнения устанавливает содержимое полей битов условий СО и СЗ в регистре слова состояния
Нечисловые величины и проективные бесконечности не могут быть сравнимы. При попытке их сравнения поля битов условий СЗ и СО устанавливаются в единичное состояние. Положительный и отрицательный действительные нули считаются равными. Команда FCOM проверяет наличие особых случаев - "недействительная операция" и "денормализованный операнд".
FCOMP (COMPARE REAL AND POP) по назначению аналогична команде FCOM, за исключением того, что она выгружает содержимое текущего регистра стека путем увеличения содержимого указателя стека в регистре слова состояния на единицу и присвоения верхнему регистру стека ST(0) состояния "пусто" в регистре признаков.
FCOMPP (COMPARE REAL AND POP TWICE) сравнивает действительное данное из текущего регистра стека с действительным данным из первого регистра стека, по результату сравнения устанавливает содержимое полей условий СО и СЗ в регистре слова состояния и выгружает содержимое текущего ST(0) и первого ST(1) регистров стека. Действительное данное из операнда-источника и операнда:приемника выгружается увеличением содержимого указателя стека в регистре слова состояния на два и присвоением верхнему и первому регистрам состояния "пусто" в регистре признаков. Команда FCOMPP проверяет наличие особых случаев - "недействительная операция" и "денормализованный операнд".
FICOM (INTEGER COMPARE) сравнивает действительное данное из текущего регистра стека ST(0) с целочисленным данным из 2- или 4-байтного слова памяти и по результату сравнения устанавливает содержимое полей битов условий СЗ и СО в регистре слова состояния. Команда FICOM проверяет наличие особых случаев - "недействительная операция" и "денормализованный операнд".
FICOMP (INTEGER COMPARE AND POP) по назначению аналогична команде FICOM, за исключением того, что она выгружает содержимое регистра стека путем увеличения содержимого указателя стека в регистре слова состояния на единицу и присвоения верхнему регистру стека ST(0) признака "пусто" в регистре признаков.
FTST (TEST STACK TOP AGAINST + 0,0) сравнивает действительное данное из текущего регистра стека с положительным действительным нулем, по результату сравнения устанавливает содержимое полей битов условий СЗ и СО в регистре слова
Нечисловая величина или проективная бесконечность    1    1

Команда FTST проверяет наличие особых случаев - "недействительная операция" и "денормализованный операнд".
EXAM (EXAMINE STACK ТОР) анализирует содержимое текущего регистра стека и по результату анализа устанавливает содержимое полей битов условий СЗ, С2, С1 и СО в регистре слова состояния
 
Трансцендентные команды
Команды этой группы (табл. 21) занимают много времени при вычислении тригонометрических (прямых и обратных), гиперболических (прямых и обратных), логарифмических и показательных функций. Трансцендентные команды оперируют с одним или двумя верхними регистрами стека и возвращают свои результаты также в стек.

FYL2X    9В    D9    F1    900/1100

Трансцендентные команды предполагают, что используемые в них операнды являются действительными и находятся в допустимых диапазонах, которые приведены ниже. Чтобы операнд трансцендентной команды рассматривался как действительный, он должен быть нормализован. Ненормализованные, денормализованные операнды, бесконечности и нечисловые величины считаются недействительными.
Если трансцендентный операнд недействителен или выходит за пределы допустимого диапазона, команды вырабатывают неопределенный результат, не сигнализируя при этом особого случая. Ответственность за то, чтобы операнды трансцендентных операций перед выполнением команд были действительными и находились в пределах допустимого диапазона, ложится на программиста. Для периодических функций приведение действительного операнда к допустимому диапазону может осуществляться с помощью команды FPREM.
Команда FPTAN (PARTIAL TANGENT - вычисление частичного тангенса) формирует два числа X и Y, отношение которых (X/Y) равно тангенсу аргумента Z. Исходное значение аргумента Z находится в текущем регистре стека. После выполнения команды FPTAN число Y записывается в текущий регистр стека, а число X проталкивается в стек. Область существования функции 0<Z<n/4. Команда FPTAN проверяет наличие особых случаев - "недействительная операция" и "точность". Результат вычисления функции (отношение Y/X) может быть использован для вычисления тригонометрических функций тангенса и котангенса, например с помощью команд FDIV или FDIR соответственно.
FPATAN (PARTIAL ARCTANGENT - вычисление частичного арктангенса) формирует число Z, равное арктангенсу отношения аргументов Y и X (Z= ARCTAN Y/X). Исходное значение аргумента X должно храниться в текущем регистре стека, а аргумента Y - в первом. В результате выполнения команды FPATAN число Z записывается в первый регистр стека, а содержимое текущего регистра выталкивается из стека. Область существования функции +0<Y<X<°° . Команда FPATAN проверяет наличие особых случаев - "антипереполнение" и "точность".
F2XM1 (вычисление функции Z=2X-1). Исходное значение аргумента X должно храниться в текущем регистре стека. В результате выполнения команды F2XM1 число Z записывается в текущий регистр стека. Область существования функции 0<Х<0,5.
Эта команда предназначена для получения высокоточного результата, даже если X весьма близок к нулю. Для вычисления Z=2X нужно прибавить единицу к результату, полученному по команде F2XM1.
Данную команду можно использовать для вычисления 10х - по формуле 2Х|°8210, функции ех - по формуле 2Х1О82Е, функции Yx - по формуле 2xlo82Y, применяя имеющиеся в сопроцессоре команды FLDL2T, FLDL2E и FYL2X соответственно. Команда F2XM1 проверяет наличие особых случаев - "антипереполнение" и "точность".
FYL2XP1 формирует число Z=Ylog2(X + l). Исходное значение аргумента X должно храниться в текущем регистре стека, а аргумента Y - в первом. В результате выполнения команды FYL2XP1 число Z записывается в первый регистр стека, а содержимое текущего регистра выталкивается из стека. Область существования функции - 0<Х<(1 - 1//2) и-оо <Y<°o . Данная команда позволяет получить по сравнению с командой FYL2X более точный результат для аргумента X, близкого к единице. Команда FYL2XP1 контролирует наличие особого случая - "точность".
FYL2X формирует число Z = Ylog2X. Исходное значение аргумента X должно храниться в текущем регистре стека, а аргумента Y - в первом. После выполнения команды FYL2X число Z записывается в первый регистр стека, а содержимое текущего регистра выталкивается из стека. Область существования функции 0 < X < и -оо <Y<oo . Исходные значения аргументов команды не проверяются на принадлежность к этой области. Команда FYL2X проверяет наличие особого случая - "точность".
Команды загрузки констант
Команды сопроцессора FLDZ, FLD1, FLDP1, FLDL2T, FLDL2E, FLDLG2 и FLDLN2 (табл. 22) загружают в стек константы: "Действительный положительный нуль", "Действительная положительная единица", "Число Jt ", "Двоичный логарифм числа 10", "Двоичный логарифм основания натурального логарифма е", "Десятичный логарифм числа 2" и "Натуральный логарифм числа 2" соответственно. Значения констант имеют полную точность временного действительного формата (64 разряда) и остаются точными примерно до 19 десятичных разрядов. Поскольку каждая константа во временном действительном формате занимает 10 байт памяти, то для экономии
Команды загрузки в стек констант
Формат    Код    Время в тактах
FLDZ    9В    D9    ЕЕ    11/17
FLD1    9В    D9    Е8    15/21
FLDP1    9В    D9    ЕВ    16/22
FLDL2T    9В    D9    Е9    16/22
FLDL2E    9В    D9    ЕА    15/21
FLDLG2    9В    D9    ЕС    18/24
FLDLN2    9В    D9    ED    17/23

объема внешней памяти и времени выборки ПЗУ констант размещено внутри сопроцессора.
Команды управления
Команды управления (табл. 23) предназначены главным образом для выполнения операций на системном уровне. Они включают операции инициализации (установка исходного состояния), обработки особых случаев, записи (восстановления) частичного или полного набора состояний устройств сопроцессора и переключения задач.
Все команды сопроцессора, за исключением части команд управления, записываются только в форме "С ожиданием". Префиксом имени такой команды является символ F, а первым байтом кода команды - код команды WAIT ЦП (т.е. 9ВН). Часть команд управления имеет вторую дополнительную форму записи "Без ожидания". Префиксом имени команды в данном случае является сочетание символов FN, а первым байтом кода такой команды - код NOP ЦП (т.е. 90Н).
Команды в форме "Без ожидания" используются в критических областях программы, где команда WAIT ЦП может привести к состоянию бесконечного ожидания. Если прерывания ЦП запрещены и существует возможность выдачи запроса прерывания от сопроцессора, то следует использовать команды в форме "Без ожидания".
FENI/FNENI (ENABLE INTERRUPTS) устанавливает поле маски разрешения прерываний IEM управляющего слова CW в нулевое состояние и тем самым разрешает выдачу запроса на прерывание от микропроцессора.
FCLEX/FNCLEX (CLEAR EXCEPTIONS) устанавливает в нулевое состояние поля флажков особых случаев (IE, DE, ZE, ОЕ, UE и РЕ), ноле запроса на прерывание (IR) и поле занятости МП (В) в слове состояния SW. Данная команда обычно используется в процедуре обработки особых случаев перед возвратом в прерванную программу с целью устранения повторного вызова процедуры обработки особых случаев.

FDISI/FNDISI (DISABLE INTERRUPTS) устанавливает поле маски разрешения прерываний IEM (управляющего слова CW) в единичное состояние и тем самым маскирует (запрещает) запросы на прерывание от сопроцессора.
FINIT/FNINIT (INITIALIZE PROCESSOR) выполняет начальную установку устройств МП КМ1810ВМ87 подобно сигналу системного сброса RESET (см.табл. 23), за исключением того, что тип ЦП (8- или 16-разрядный) не устанавливается. Если команда FNINIT прерывает выполнение другой команды, то последняя не возобновляется.
FDECSTP (DECREMENT STACK POINTER) уменьшает (декре- ментирует) содержимое указателя стека ST в регистре слова состояния на единицу (т.е. уменьшает адрес текущего регистра стека).
F1NCSTP (INCREMENT STACK POINTER) увеличивает (инкре- ментирует) содержимое указателя стека ST в регистре слова состояния на единицу (т.е. увеличивает адрес текущего регистра стека).
FLDENV (LOAD ENVIRONMENT) загружает частичный набор программно-доступных устройств сопроцессора содержимым 14- байтной области памяти, как показано на рис. 23.
FRSTOR (RESTORE SAVED STATE) восстанавливает содержимое полного набора программно-доступных устройств сопроцессора по содержимому 94-байтной области памяти (см. рис. 23), которое, как правило, определяется командой FSAVE/FNSAVE. Параллельно команде FRSTOR могут выполняться команды ЦП, а команда FWAIT - только после ее завершения.
FLDCW (LOAD CONTROL WORD) загружает управляющее слово CW содержимым 2-байтного слова памяти (см. рис. 23), т.е.изменяет режим работы сопроцессора.
FSTENV/FNSTENV (STORE ENVIRONMENTV) запоминает содержимое частичного набора программно-доступных устройств сопроцессора (управляющее слово CW, слово состояния SW, слово признаков TW, указатель текущей команды ЕР) в 14-байтной области памяти, как показано на рис. 23, и устанавливает в состояние "1" поля масок особых случаев в управляющем слове CW. Параллельно команде FSTENV/FNSTENV не должны выполняться другие команды сопроцессора. Это обеспечивается выполнением следующей за ней команды в форме "С ожиданием" или команды FWAIT.
FSTCW/FNSTCW (STORE CONTROL WORD) запоминает содержимое управляющего слова CW в 2-байтном слове памяти .
FSTSW/FNSTSW (STORE STATUS WORD) запоминает содержимое слова состояния SW в 2-байтном слове памяти.
FSAVE/FNSAVE (SAVE STATE) сохраняет содержимое полного набора программно-доступных устройств сопроцессора (на момент завершения выполнения предыдущей команды) в 94-байтной области памяти, как показано на рис. 23, и выполняет начальную установку устройств сопроцессора подобно сигналу системного сброса RESET.
FFREE (FREE REGISTER) устанавливает в регистре признаков признак "пусто" для текущего регистра стека, при этом содержимое регистра не изменяется.
FNOP (NO OPERATION) выполняет холостую операцию сопроцессора (перезапись содержимого текущего регистра стека в этот же регистр).
FWAIT (CPU WAIT WHTLE NDP IS BUSY) переводит ЦП в состояние ожидания до момента завершения выполнения предыдущей команды сопроцессора (т.е. до тех пор, пока сопроцессор занят выполнением предыдущей команды). При использовании в вычислительной системе сопроцессора данная команда эквивалентна команде WAIT ЦП, а при использовании эмулятора сопроцессора - команде NOP ЦП. Команда FWAIT применяется для синхронизации работы сопроцессора и ЦП, например:
FNSTSW    статус 87
FWAIT ; ожидать FNSTSW MOV АХ, статус 87
Время выполнения команд сопроцессора в тактах генератора CLK. Время выполнения команд сопроцессора в микросекундах определяется по формуле
T = C/F,
где С. - время выполнения команды в тактах; F - тактовая частота, МГц.
Время выполнения команды сопроцессора приведено в предположении, что выполняемая команда находится в очереди команд. Если операнд выполняемой команды находится в памяти, то к времени, приведенному в графе "Время в тактах", прибавляется время вычисления исполнительного адреса ЕА=5...12 тактов синхронизации. При наличии в команде префикса замены сегментного регистра время вычисления исполнительного адреса должно быть увеличено на два такта.
Если в вычислительной системе используется 16-разрядный ЦП и операнд находится по нечетному адресу, то время выполнения команды должно быть увеличено на четыре такта для каждого обращения к памяти. Время выполнения команд ЦП WAIT (NOP) не учитывается.
Особые случаи не увеличивают времени выполнения команды, за исключением немаскируемых "переполнения", "антипереполнения" и "маскируемого денормализованного операнда", которые увеличивают время на 14, 16, 33 такта соответственно.
 


Обсудить вопрос в студенческом форуме

 

Сайт содержит информацию о учебном заведении и студенческой общине и не является официальным