В основном это верно только для x86, потому что ни ARM, ни PowerPC, ни MIPS, ни Sparc не реализуют свои FPU как машины на основе стека.
Теперь, когда мы сузили его до x86, причина очевидна. Как и многие другие вещи в вычислительной технике, это сводится к историческим причинам (некоторые называют это истерическим изюмом, потому что настоящая причина на самом деле не имеет смысла).
Историческая причина в том, что в архитектуре x86 не было FPU. Я знаю, вы скажете: «Но посмотрите на Pentium!». Да, у них были FPU, но исходный 8086, который IBM выбрал для создания своего ПК, не имел FPU - это была строго целочисленная машина, как и многие современные микроконтроллеры низкого уровня.
Это не было большой проблемой, потому что он в основном предназначался для недорогих терминалов и текстовых процессоров. Но его дешевизна и популярность внезапно привели к тому, что его начали использовать в научных и инженерных целях. Поэтому люди придумали дополнительные карты расширения с чипом FPU, чтобы ускорить процесс. В самых популярных из этих карт используется чип на основе стека, который также был произведен Intel. Этот небольшой факт упростил для Intel дальнейшую интеграцию чипа в будущие поколения процессоров.
В этот момент Intel все еще могла разработать набор инструкций, не основанный на дополнительном чипе. Но случилось две вещи. Многие приложения, в основном игры и электронные таблицы, начали использовать надстройку FPU, и эти приложения стали очень и очень популярными. Другие поставщики чипов тоже видели, что происходит на рынке ПК, и захотели принять участие. Итак, вынужденная обратная совместимость и необходимость быстро добавить эту функцию, Intel сделала наиболее разумную вещь (с точки зрения управления бизнесом, не обязательно с точки зрения инженерии): они просто включили чип сопроцессора в свою следующую версию x86, чтобы отдел маркетинга может сказать, что у них есть FPU.
Короче говоря: истерический изюм!
person
slebetman
schedule
14.02.2012
ST(x)
), только SSE/AVX/FMA/MMX/3DNow! которые имеют именованные регистры - person Necrolis   schedule 14.02.2012