Кіріспе

x86 нұсқамалар жиынтығы архитектурасының ішкі жиыны – x86 архитектурасы нұсқамалар жиынтығының бір бөлігі. Ол 8086 нұсқамалар жиынтығына кеңейтілген нұсқа ретінде пайда болды, x86 процессорларымен бірге жұмыс істейтін, қосымша жылжымалы нүктелі копроцессорлар түрінде. Бұл микрочиптердің атауы "87" санымен аяқталады. Бұл NPX (Numeric Processor eXtension) деп те аталады. Базалық нұсқамалар жиынтығының басқа кеңейтімдері сияқты, x87 нұсқамалары жұмыс істейтін бағдарламаларды құру үшін міндетті емес, бірақ ортақ сандық есептемелерді аппараттық және микрокод деңгейінде жүзеге асырып, тиісті машиналық кодқа қарағанда оларды әлдеқайда жылдам орындауға мүмкіндік береді. x87 нұсқамалар жиынтығына қосу, алу және салыстыру сияқты қарапайым жылжымалы нүктелі операциялармен қатар, мысалы, тангенс функциясы мен оның кері функциясын есептеу сияқты күрделі сандық операцияларға арналған нұсқамалар да кіреді. Intel 80486 процессорынан бастап көптеген x86 процессорлары осы x87 нұсқамаларын негізгі процессорда жүзеге асырды, бірақ бұл термин кейде осы нұсқамалар жиынтығының бөлігін атау үшін қолданылады. x87 нұсқамалары компьютерлерде стандартты болғанға дейін, компиляторлар мен бағдарламашылар жылжымалы нүктелі операцияларды орындау үшін өте баяу кітапханалық функцияларды пайдалануға мәжбүр болды, және бұл әдіс әлі де (төмен құнмен) енгізілген жүйелерде қолданылады.

Сипаттама

x87 регистрлері ST(0) бастап ST(7) дейін сегіз деңгейлі терең, қатаң емес стек құрылымын құрайды. Оларға операторлардың кез келгені арқылы, жоғарғы шегіне қатысты сменаны пайдаланып тікелей қол жеткізуге болады, сондай-ақ стекке түсіру және стектен алу мүмкіндігі бар. (Бұл схеманы стек фреймінің түсіріліп, алынып тасталып, индекстелуімен салыстыруға болады.) Бұл стекке мәндерді түсіруге, есептеуге және алуға арналған нұсқаулар бар. Бірлік операциялар (FSQRT, FPTAN және т.б.) автоматты түрде ең жоғарғы ST(0) регистріне жүгінеді, ал екілік операциялар (FADD, FMUL, FCOM және т.б.) ST(0) және ST(1) регистрлеріне жүгінеді. Қатаң емес стек моделі екілік операцияларға ST(0) регистрін тікелей жад операторымен немесе нақты стек регистрі ST(x) пен дәстүрлі аккумулятор рөлінде (бірлескен мақсат және сол оператор) пайдалануға мүмкіндік береді. Бұл нұсқаулар бойынша ST(0) регистрі өзгертілмеген оператор ретінде, ал ST(x) мақсат ретінде кері айналуы мүмкін. Сонымен қатар, ST(0) регистрінің мазмұны FXCH ST(x) нұсқауын пайдаланып басқа стек регистрімен алмастырылуы мүмкін. Бұл мүмкіндіктер x87 стекін жеті еркін адрестелетін регистр және арнайы аккумулятор (немесе жеті тәуелсіз аккумулятор) ретінде пайдалануға мүмкіндік береді. Бұл әсіресе суперскалярлы x86 процессорларында (мысалы, 1993 жылғы Pentium және одан кейінгілері) маңызды, онда осы алмасу нұсқаулары (кодтары D9C8 және D9CFh) FPU нұсқауларымен қатар FXCH ST(x) үшін бүтін сандық жолдардың біреуін пайдаланып, нөлдік уақыттық кешігуге дейін оңтайландырылады. Адамдарға арналған тілде табиғи және ыңғайлы болғанына қарамастан, кейбір компилятор жасаушылар x87 кодын тиімді жоспарлайтын автоматты код генераторларын жасау қиын деп тапты. Мұндай стекке негізделген интерфейс функция шақыруларында уақытша айнымалыларды сақтау қажеттілігін, регистрге негізделген интерфейске қарағанда азайтуы мүмкін (бірақ тарихи тұрғыдан алғанда, 8087 жүзеге асыруындағы жобалау мәселелері бұл мүмкіндікті шектеді). x87 IEEE 754 1985 стандартына сәйкес бірлік, екілік және 80 биттік екі есе кеңейтілген дәлдіктегі екілік үзілмелі нүктелік арифметиканы қамтамасыз етеді. Әдепкі бойынша, x87 процессорларының барлығы ішкі түрде 80 биттік екі есе кеңейтілген дәлдікті қолданады (көптеген есептеулерде тұрақты дәлдікті сақтау үшін, IEEE 754 жобалау негіздемесін қараңыз). Арифметикалық операциялардың берілген тізбегі, қатаң бірлік немесе екілік IEEE 754 FPU-мен салыстырғанда сәл өзгеше болуы мүмкін. Бұл кейбір жартылай сандық есептеулер үшін қиындықтар тудыруы мүмкін, себебі олар дұрыс жұмыс істеу үшін екі есе дәлдікті қабылдайды. Мұндай проблемаларды болдырмау үшін x87 арнайы конфигурация/күй регистрін пайдаланып, әр операциядан кейін автоматты түрде бірлік немесе екілік дәлдікке дейін дөңгелектеуге конфигурациялануы мүмкін. SSE2 енгізілгеннен кейін x87 нұсқаулары бұрынғыдай маңызды емес, бірақ дөңгелектеу қатесіне сезімтал сандық есептеулер үшін жоғары дәлдікті скалярлық бірлік ретінде маңызды болып қалады, сондай-ақ 80 биттік форматта қол жетімді 64 биттік мантисса дәлдігі мен кеңейтілген ауқымын қажет етеді.

Өндірушілер

Intel 8087 немесе одан кейінгі модельдермен үйлесімді қалқыма нүктелік құрылғыларды жобалаған немесе өндірген компаниялар: AMD (287, 387, 486DX, 5x86, K5, K6, K7, K8), Chips and Technologies (Super MATH копроцессорлары), Cyrix (FasMath, Cx87SLC, Cx87DLC және т.б., 6x86, Cyrix MII), Fujitsu (алғашқы Pentium Mobile және т.б.), Harris Semiconductor (80387 және 486DX процессорларын өндірді), IBM (әртүрлі 387 және 486 жобалары), IDT (WinChip, C3, C7, Nano және т.б.), IIT (2C87, 3C87 және т.б.), LC Technology (Green MATH копроцессорлары), National Semiconductor (Geode GX1, Geode GXm және т.б.), NexGen (Nx587), Rise Technology (mP6), ST Microelectronics (486DX, 5x86 және т.б. өндірді), Texas Instruments (486DX процессорларын және т.б. өндірді), Transmeta (TM5600 және TM5800), ULSI (Math·Co копроцессорлары), VIA (C3, C7 және Nano және т.б.), Weitek (1067, 1167, 3167 және 4167) және Xtend (83S87SX 25 және басқа копроцессорлар).

8087 саны

8087 – Intel компаниясы жасаған 16 биттік процессорларға арналған алғашқы математикалық копроцессор. Ол Intel 8088 немесе 8086 микропроцессорларымен бірге жұмыс істеу үшін құрастырылған. (Intel-дің бұрынғы 8231 және 8232 қозғалатын нүктелі процессорлары, i8080 процессорымен қолдануға бағытталған, шындығында 1977 және 1979 жылдарғы AMD-нің Am9511 және Am9512 FPU-ларының лицензиялық нұсқалары еді.)

80C187

1982 жылғы түпнұсқа 80188 және 80186 (NMOS негізінде) деректер кестесінде нақты математикалық копроцессорлар туралы айтылғанмен, шындығында екі чип те 8087 копроцессорымен жұптастырылған. Бірақ 1987 жылы, жаңартылған CMOS негізіндегі Intel 80C186 процессорымен жұмыс істеу үшін Intel 80C187 математикалық копроцессорын енгізді. 80C187 копроцессорының негізгі процессормен интерфейсі 8087 копроцессорымен бірдей болғанымен, оның ядросы негізінен 80387SX-тің ядросына сәйкес келеді, сондықтан ол толыққанды IEEE 754 стандартына сай келіп, 80387 копроцессорының барлық қосымша командаларын орындай алады.

80287 нөмірі

80287 (i287) – Intel 80286 микропроцессорлар сериясының математикалық копроцессоры. Intel модельдері 6-дан 12 МГц-ге дейінгі жоғары жиілік шегі бар түрлерін қамтиды. NMOS нұсқасы 6, 8 және 10 МГц жиілікте қол жетімді болды. 10 МГц Intel 80287 10 Numerics Coprocessor нұсқасы 100 данасы үшін 250 АҚШ долларына сатылды. 80287, 80287 8 және 80287 10 сандарының қорапталған нұсқалары тиісінше 212, 326 және 374 АҚШ долларына сатылды. 80C287A-ның қорапталған нұсқасы 457 АҚШ долларына сатылды. 387-ге ұқсас өнімділігі бар басқа 287 модельдері – CHMOS III технологиясымен жасалған Intel 80C287 және AMD-нің CMOS процесінде, толық статикалық қақпаларды ғана пайдалана отырып өндірілген AMD 80EC287. Кейіннен i80287XL, 387 SX микроархитектурасымен және 287 контактілік тізбегімен (pinout) бірге шықты. Сонымен қатар, ноутбуктерге арналған арнайы нұсқасы – i80287XLT және басқа да түрлері болды. Ол ішкі 3/2 көбейтушісін қамтиды, сондықтан копроцессорды процессор жылдамдығының 2/3 бөлігінде іске қосатын аналық платалар FPU-ді процессордың жылдамдығымен бірдей іске қоса алатын болды. 80287XL және 80287XLT екі нұсқасы да 50%-ға артық өнімділік, 83%-ға аз қуат тұтыну және қосымша командаларды ұсынды. 80287 және 80287XL микропроцессорлары 80386 микропроцессорымен жұмыс істейді және бастапқыда 80386 үшін қол жетімді жалғыз копроцессорлар болды, 1987 жылы 80387 енгізілгенге дейін. Соңында, олар Cyrix Cx486SLC чипімен де жұмыс істей алды. Дегенмен, бұл екі чип үшін де 80387 жоғары өнімділігі және командалар жиынтығының кең мүмкіндіктеріне байланысты басымдық берілді.

80387 нөмірі

80387 (387 немесе i387) – IEEE 754 1985 стандартына толық сәйкес келетін алғашқы Intel копроцессоры. 1987 жылы, 386 чипінен екі жыл кейін шығарылған i387, Intel-дің бұрынғы 8087/80287 копроцессорларына қарағанда айтарлықтай жақсартылған жылдамдыққа және тригонометриялық функцияларының жақсартылған сипаттамаларына ие. Ол 100 данадан бастап 500 АҚШ долларынан сатылды. Біраз уақыттан кейін Intel компаниясының жеке компьютерлерді жаңарту бөлімшесі арқылы бөлшек сауда бағасымен 795 АҚШ долларына сатылды. 25 МГц нұсқасы бөлшек сауда арналарында 1395 АҚШ долларына қолжетімді болды. Intel M387 математикалық копроцессоры MIL STD 883 Rev. C стандартына сәйкес келеді. Бұл құрылғы 55 және 125 °C аралығында температураны өзгерту, герметикалық жабылу және ұзартылған сынақтан өтті. Бұл әскери нұсқа 16 МГц жиілікте жұмыс істейді. Бұл әскери нұсқа 68 контактілі PGA және төрт жақты корпус (quad flatpack) форматында қолжетімді болды. PGA нұсқасы 100 данадан тұратын партияға 1155 АҚШ долларынан сатылды. 387DX-тің 33 МГц нұсқасы да қолжетімді болды және секундына 3,4 мегауэтс өнімділік көрсетті. 16, 20, 25 және 33 МГц 387DX математикалық копроцессорларының қорапталған нұсқалары тиісінше 570, 647, 814 және 994 АҚШ долларынан сатылды. 8087 және 80287 копроцессорларының FPTAN және FPATAN нұсқаулары аргументті ±π/4 (±45°) диапазонымен шектейді, сонымен қатар 8087 және 80287 SIN және COS функциялары үшін тікелей нұсқауларды қамтимайды. Копроцессорсыз 386 чипі әдетте жылжымалы нүктелік арифметиканы (салыстырмалы түрде баяу) бағдарламалық тәсілмен орындайды, бұл бағдарламалық ерекшеліктерді басқарушы арқылы жүзеге асырылады. 386 чипіне математикалық копроцессор қосылғанда, копроцессор жылжымалы нүктелік арифметиканы аппараттық деңгейде орындайды, нәтижелерді (эмуляцияланған) бағдарламалық кітапханаға шақырудан әлдеқайда жылдам қайтарады. i387 тек стандартты i386 чипімен үйлесімді, ол 32 биттік процессор шинасын қолдайды. Кейінірек құны төмендетілген i386SX, 16 биттік дерек шинасын қолдайды, сондықтан i387-нің 32 биттік шинасымен байланыса алмайды. i386SX өзіне арналған 80387SX копроцессорын қажет етеді, ол SX-тің 16 биттік дерек шинасымен үйлесімді. Intel 387SX копроцессорының төмен қуатты нұсқасын шығарды.

80487 нөмірі

i487SX (P23N) Intel i486SX процессорлары үшін қалқыма нүктелік операцияларды жеделдетуге арналған копроцессор ретінде сатылды. Бірақ ішінде толыққанды i486DX процессоры болды. i486SX жүйесіне орнатылғанда, i487 негізгі процессорды тоқтатып, барлық процессорлық операцияларды өзіне алды. i487 i486SX процессордың орналасқандығын анықтап, бастапқы процессорсыз жұмыс істемейтіндей етілген.

80587 - - - - - - - - - - - - - - -

Nx587 – бұл x86 процессорлары үшін процессордан бөлек жасалған соңғы FPU, осы жағдайда NexGen-нің Nx586 процессорлары.