x87 е наименование на набор от инструкции за работа с числа с плаваща запетая в процесорната архитектура x86. Подобно на архитектурата x86 тези инструкции носят името си от поредицата математически копроцесори на Intel, в които са били въведени.

История

Първоначално (до появата на процесора Intel 486) архитектурата x86 не разполага с инструкции за обработка на числа с плаваща запетая. Още от самото начало обаче Intel предлага математическия копроцесор 8087, който работи съвместно с 8086 и ускорява изчисленията с плаваща запетая.

През 1985 г. IEEE публикува под името IEEE 754 стандарт за двоична аритметика с плаваща запетая. На практика този стандарт се основава на архитектурата на копроцесора 8087 на Intel и дефинира типовете данни, операциите и начините за обработка на изключенията при работа с двоични числа с плаваща запетая. През 1987 г. е публикувана по-обща версия на стандарта, която е независима от основата на бройната система и носи името IEEE 854.

Повечето производители на компилатори създават емулиращи програмни библиотеки, които позволяват на програмиста да използва един и същ програмен интерфейс независимо дали компютърът, на който се изпълняват програмите, има математически копроцесор, или няма такъв. Това улеснява употребата на инструкциите и те започват да се използват широко в софтуерните продукти. По-късно се появяват копроцесорите 80187, 80287, 80387 и 80487. С въвеждането на процесора 486 математическият копроцесор става част от процесорното ядро, а инструкциите от набора x87 стават неразделна част от архитектурата x86.

След появата на инструкциите SIMD (3DNow! и най-вече SSE) инструкциите от набора x87 вече не са най-бързият начин за извършване на изчисления с плаваща запетая в процесорите от семейството x86. Все пак този набор инструкции остават най-универсални и гъвкави, поради което продължават да се използват широко, особено в случаите, когато точността е по-важна от бързината.

Технология

Иструкциите за работа с числа с плаваща запетая добавят следните разширения към архитектурата x86:

Регистри

Инструкциите от набора x87 използват осем регистъра за данни с имена от ST0 до ST7. Всеки от тях е 80-битов и съдържа едно 80-битово число с плаваща запетая с разширена точност. Освен тези регистри x87 включва и три 16-битови контролни регистъра (наричани control, status и tag); както и три други регистъра, които се използват за записване на адреса на инструкцията, данните и вида на операцията, които са предизвикали последното програмно изключение (exception).

Осемте регистъра за данни са организирани в стек, като за указател на върха на стека се използлва 3-битово поле от 16-битовия регистър status.

Типове данни

Инструкциите от набора x87 работят върху седем типа данни, които могат да се разделят на следните групи:

Трябва да се има предвид, че описаните формати на данните важат само при съхраняването на число в паметта. При прехвърлянето му в някои от регистрите на процесор от типа x87 числото автоматично се преобразува в 80-битово с плваваща запетая с разширена точност и се обработва в този формат.

Методи за адресиране

Операндите на x87 инструкциите може да се намират или в x87 регистрите, или в паметта (не се използват непосредствени операнди – такива, които са кодирани в самата инструкция).

Повечето x87 инструкции могат да приемат операнд от паметта, а някои от тях могат и да записват резултата в паметта. При достъп до операнд в паметта, могат да се използват стандартните x86 методи за адресиране.

Повечето x87 инструкции могат да приемат операнд от x87 регистър и да записват резултата в него. При достъп до x87 регистрите се използва означението ST(i), където i е число от 0 до 7. ST(0) обозначава регистъра, който е на върха на регистровия стек, ST(1) е регистърът под него и т.н.

Повечето x87 инструкции са с два операнда, като първият е едновременно и място, където се записва резултатът от операцията (подобно на x86 инструкциите).

Инструкции

Имената на всички x87 инструкции започват с буквата F (например FADD, FMUL и др.). Те могат да се разделят на следните групи:

Трансфер и конвертиране на данни

Зареждане на константи

Аритметични

Трансцендентни

Сравнение и проверка

Други

Проблеми

По отношение на функционалност, точност и универсалност, x87 инструкциите са напълно достатъчни за почти всички видове приложения. Основният им недостатък се крие в наследената от x86 SISD организация, при която всяка инструкция оперира само върху един набор от операнди. Това значително намалява максимално възможната производителност и ограничава употребата на x87 инструкциите в области като обработка на звук и видео, компютърни игри и други.

Приложения

В исторически аспект, x87 са основният набор от инструкции за обработка на числа с плаваща запетая. Значението им е най-голямо по време на появата на първите 3D компютърни игри (Doom, Quake) и възпроизвеждането на видео на персоналните компютри.

След появата на SSE, x87 инструкциите се използват в много по-тесен кръг от приложения, при които са по-важни точността и възможността за гъвкава обработка на грешките и специалните случаи (най-вече научно-технически приложения).

Специфичните предимства на x87 инструкциите са:

Вижте също

Външни препратки