Математический сопроцессор — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Регистры)
Строка 1: Строка 1:
 +
{| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;"
 +
|+
 +
|-align="center"
 +
|'''НЕТ ВОЙНЕ'''
 +
|-style="font-size: 16px;"
 +
|
 +
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.
 +
 +
Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.
 +
 +
Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.
 +
 +
Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.
 +
 +
''Антивоенный комитет России''
 +
|-style="font-size: 16px;"
 +
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
 +
|-style="font-size: 16px;"
 +
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].
 +
|}
 +
 
'''Floating-point unit''', FPU — блок процессора предназначенный для обратки чисел с плавающей точкой.
 
'''Floating-point unit''', FPU — блок процессора предназначенный для обратки чисел с плавающей точкой.
 
Раньше сопроцессор был отдельной микросхемой. Теперь чаще всего он находится непосредственно на кристале процессора.
 
Раньше сопроцессор был отдельной микросхемой. Теперь чаще всего он находится непосредственно на кристале процессора.

Версия 08:30, 1 сентября 2022

НЕТ ВОЙНЕ

24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.

Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.

Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.

Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.

Антивоенный комитет России

Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки.

Floating-point unit, FPU — блок процессора предназначенный для обратки чисел с плавающей точкой. Раньше сопроцессор был отдельной микросхемой. Теперь чаще всего он находится непосредственно на кристале процессора.

Типы данных

Сопроцессор архитектуры х86 способен обрабатывать следующие типы данных:

  • single (float)
  • double
  • extended (80 бит)
  • int (16/32/64 бит)
  • bcd80 — двоично-десятичный 10-байтовый формат, каждый полубайт которого хранит одну десятичную цифру


Регистры

Регистры общего назначения не подходят для обработки чисел с плавающей точкой. Для этих чисел существуют 8 специальных регистров организованных в кольцевой стек.

Это 80-битовые регистры r0-r7, однако в программе к ним обращаются по именам st(*)(без скобок при компиляции в yasm).

st(2) r7
st(1) r6
st(0) r5
st(7) r4
st(6) r3
st(5) r2
st(4) r1
st(3) r0

При добавлении в стек еще однго элемента произойдет сдвиг этих имен. st(7) станет st(0) — вершиной стека.

st(3) r7
st(2) r6
st(1) r5
st(0) r4
st(7) r3
st(6) r2
st(5) r1
st(4) r0


Управляющие регистры

Так же существуют несколько специальных регистров:

  • cr \\управляющий регистр. Позволяет контролировать режимы округления и пр.
  • sr \\регистр состония
  • tw \\метки (пустой, число, не число, ...)

При обработке исключений так же используются:

  • fip \\регистр указателя команд
  • fdp \\регистр указателя данных

Команды

  • fld/fild/fbl

загрузка из памяти или копирование из другого fpu регистра в st(0). Например:

fld st(0)

fild dword [eax]

  • fst(p)/fist(p)/fbstp *(p) +выталкивает вершину

загрузка в память или st(*) из st(0) регистра

  • fxch \\swap(st(0), st(*))
  • fcmov_cc \\условная загрузка
  • fcom st(2)(p(p)) \\сравнение с вершиной


  • fstsw ax
  • sahf

флаги сопроцессора в флаги процессора

  • fucom(p) \\еще одно сравнение
  • ficom(p) \\сравнение с памятью
  • fcomi(p) \\результат сравнения в flags
  • fucomi(p)

Вычисления

  • fadd(p)/fiadd \\st(0) = arg + st(0)
  • fsub(p)/fisub \\st(0) = st(0) - arg
  • sfubr(p)/fisubr \\st(0) = arg - st(0)
  • fmul(p)/fimul
  • fdiv(p)/fidiv
  • dfivr(p)/fidivr
  • frem/frem1 st(0) - n * st(1) \\остаток получаемый вычитаниями (не блолее 64 штук)
  • fchs

изменить знак на противоположный.

Работают с st(0) Не нуждаются в отдельныз пояснениях.

  • fabs
  • frndint
  • fsin
  • fcos
  • fsincos
  • fptan
  • fpatanb


  • fld1/z/pi/...

загрузка констант

  • fincstp
  • fdecstp

двигаем указатель стека, не меняя состояние регистров (пустой/полный)

  • ffree

освободить регистр

  • fnop

поделать ничего. Теперь и на fpu.