Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекция №6. Работа с сопроцессором. Команды для работы с FPU. Работа с FPU.

Поиск

Вещественные форматы, используемые в процессорах Intel:

· короткое вещественное ( Single ): бит 31 — знак мантиссы, биты 30 –23 — 8-битный порядок + 127 (27-1), биты 22–0 — 23-битная мантисса без первой цифры;

· длинное вещественное ( Double ): бит 63 — знак мантиссы, биты 62–52 — 11-битный порядок + 1023 (210-1), биты 51 – 0 — 52-битная мантисса без первой цифры;

· расширенное вещественное ( Extended ): бит 79 — знак мантиссы, биты 78–64 — 15-битный порядок + 16 383 (214-1), биты 63–0 — 64-битная мантисса с первой цифрой (то есть бит 63 равен 1).


Регистры FPU

FPU предоставляет восемь регистров для хранения данных и пять вспомогательных регистров.

Регистры данных (R0 – R7) рассматриваются как стек, вершина которого называется ST(0), а более глубокие элементы — ST(1), ST(2) и так далее до ST(7).

 

 

Рис. 13. Регистры FPU

 

К регистрам R0 – R7 нельзя обращаться напрямую, по именам, но если процессор поддерживает расширение ММХ, то мантиссы, находящиеся в этих регистрах, становятся доступны, как ММ0 – ММ7.

Регистр состояний SR содержит слово состояния FPU:

Регистр управления CR:

Биты 15 – 13 — зарезервированы.

Бит 12 «IC» — управление бесконечностью (поддерживается для совместимости с 8087 и 80287 — вне зависимости от значения этого бита > ).

Биты 11 – 10 «RC» — управление округлением.

Биты 9 – 8 «PC» — управление точностью.

Биты 7 – 6 — зарезервированы.

Бит 5 «РМ» — маска неточного результата.

Бит 4 «UM» — маска антипереполнения.

Бит 3 «ОМ» — маска переполнения.

Бит 2 «ZM» — маска деления на ноль.

Бит 1 «DM» — маска денормализованного операнда.

Бит 0 «IM» — маска недействительной операции.

Биты RC определяют способ округления результатов команд FPU до заданной точности (табл. 10).

Таблица 10. Способы округления

Значение RC Способ округления
  к ближайшему числу
  к отрицательной бесконечности
  к положительной бесконечности
  к нулю

 

Биты PC определяют точность результатов команд FADD, FSUB, FSUBR, FMUL, FDIV, FDIVR и FSQRT (табл. 11).

Таблица 11. Точность результатов

Значение PC Точность результатов
  одинарная точность (32-битные числа)
  Зарезервировано
  двойная точность (64-битные числа)
  расширенная точность (80-битные числа)

Регистр тегов TW содержит восемь пар бит, описывающих содержание каждого регистра данных.

Регистры FIP и FDP содержат адрес последней выполненной команды (кроме FINIT, FCLEX, FLDCW, FSTCW, FSTSW, FSTSWAX, FSTENV, FLDENV, FSAVE, FRSTOR и FWAIT) и адрес ее операнда соответственно и используются в обработчиках исключений для анализа вызвавшей его команды.

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

1)

 Команда: FLD источник
 Назначение: Загрузить вещественное число в стек

Команда помещает в стек содержимое источника (32-, 64- или 80-битная переменная или ST(n)). Команда FLD ST(0) делает копию вершины стека.

 

2)

 Команда: FST приемник
 Назначение: Скопировать вещественное число из стека
 Команда: FSTP приемник
 Назначение: Считать вещественное число из стека

Копирует ST(0) в приемник (32- или 64-битную переменную или пустой ST(n) в случае FST; 32-, 64- или 80-битную переменную или пустой ST(n) в случае FSTP). FSTP после этого выталкивает число из стека (помечает ST(0) как пустой).

 

3)

 Команда: FILD источник
 Назначение: Загрузить целое число в стек

Преобразовывает целое число со знаком из источника (16-, 32- или 64-битная переменная) в вещественный формат и помещает в вершину стека.

 

4)

 Команда: FIST приемник
 Назначение: Скопировать целое число из стека
 Команда: FISTP приемник
 Назначение: Считать целое число из стека

Преобразовывает число из вершины стека в целое со знаком и записывает его в приемник (16- или 32-битная переменная для FIST; 16-, 32- или 64-битная переменная для FISTP). FISTP после этого выталкивает число из стека (помечает ST(0) как пустой).

 

5)

 Команда: FXCH приемник
 Назначение: Обменять местами два регистра стека

Обмен местами содержимого регистра ST(0) и приёмника (регистр ST(n)). Если операнд не указан, обменивается содержимое ST(0) и ST(1).

Базовая арифметика FPU

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

Fxxx Используются ST(1) и ST(0). Первый операнд берется из верхушки стека (источник), второй - следующий элемент стека. Результат выполнения команды записывается в стек.
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 Обратное деление, делимое и делитель меняются местами

1)

 Команда: FADD приемник,источник
 Назначение: Сложение вещественных чисел
 Команда: FADDP приемник,источник
 Назначение: Сложение вещественных чисел с выталкиванием из стека
 Команда: FIADD источник
 Назначение: Сложение целых чисел

Команда выполняет сложение источника и приемника и помещает результат в приемник. Команда FADDP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды сложения могут принимать следующие формы:

· FADD источник, когда источником является 32- или 64-битная переменная, а приемником — ST(0);

· FADD ST(0),ST(n), FADD ST(n),ST(0), FADDP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FADD без операндов — эквивалентно FADD ST(0),ST(1); FADDP без операндов — эквивалентно FADDP ST(1),ST(0);

· FIADD источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

2)

 Команда: FSUB приемник,источник
 Назначение: Вычитание вещественных чисел
 Команда: FSUBP приемник,источник
 Назначение: Вычитание с выталкиванием из стека
 Команда: FISUB источник
 Назначение: Вычитание целых чисел

Выполняет вычитание источника из приемника и сохраняет результат в приемнике. Команда FSUBP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды вычитания могут принимать следующие формы:

· FSUB источник, когда источником является 32- или 64-битная переменная, содержащая вещественное число, а приемником — ST(0);

· FSUB ST(0),ST(n), FSUB ST(n),ST(0), FSUBP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FSUB без операндов — эквивалентно FSUB ST(0),ST(1); FSUBP без операндов — эквивалентно FSUBP ST(1),ST(0);

· FISUB источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

Если один из операндов — бесконечность, результат — бесконечность соответствующего знака. Если оба операнда — бесконечности одного знака, результат не определен (происходит исключение «недопустимая операция»).

3)

 Команда: FSUBR приемник,источник
 Назначение: Обратное вычитание вещественных чисел
 Команда: FSUBRP приемник,источник
 Назначение: Обратное вычитание с выталкиванием
 Команда: FISUBR источник
 Назначение: Обратное вычитание целых чисел

Команды эквивалентны FSUB/FSUBP/FISUB, но выполняют вычитание приемника из источника, а не источника из приемника.

4)

 Команда: FMUL приемник,источник
 Назначение: Умножение вещественных чисел
 Команда: FMULP приемник,источник
 Назначение: Умножение с выталкиванием из стека
 Команда: FIMUL источник
 Назначение: Умножение целых чисел

Выполняет умножение источника и приемника и помещает результат в приемник. Команда FMULP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды умножения могут принимать следующие формы:

· FMUL источник, когда источником является 32- или 64-битная переменная, а приемником — ST(0);

· FMUL ST(0),ST(n), FMUL ST(n),ST(0), FMULP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FMUL без операндов — эквивалентно FMUL ST(0),ST(1); FMULP без операндов — эквивалентно FMULP ST(1),ST(0);

· FIMUL источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).

5)

 Команда: FDIV приемник,источник
 Назначение: Деление вещественных чисел
 Команда: FDIVP приемник,источник
 Назначение: Деление с выталкиванием из стека
 Команда: FIDIV источник
 Назначение: Деление целых чисел

Выполняет деление приемника на источник и сохраняет результат в приемнике. Команда FDIVP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды могут принимать следующие формы:

· FDIV источник, когда источником является 32- или 64-битная переменная, содержащая вещественное число, а приемником — ST(0);

· FDIV ST(0),ST(n), FDIV ST(n),ST(0), FDIVP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

· FDIV без операндов — эквивалентно FDIV ST(0),ST(1); FDIVP без операндов — эквивалентно FDIVP ST(1),ST(0);

· FIDIV источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником — ST(0).


6)

 Команда: FCHS
 Назначение: Изменить знак

Изменяет знак ST(0), превращая положительное число в отрицательное, и наоборот.

7)

 Команда: FRNDINT
 Назначение: Округлить до целого


Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 365; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.30.14 (0.01 с.)