Математический сопроцессор — различия между версиями
Tsarevfs (обсуждение | вклад) (→Регистры) |
|||
Строка 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.