Почему там только четыре регистра?

Почему там только четыре регистра в наиболее распространенном ЦП (x86)? Разве огромное увеличение скорости там не было бы то, если бы больше регистров было добавлено? Когда больше регистров будет добавлено?

17
задан skaffman 20 May 2010 в 22:54
поделиться

8 ответов

Сейчас более 4-х. Если вы посмотрите на историю архитектуры x86 , вы увидите, что она произошла от набора инструкций 8086. Intel всегда хотела сохранить некоторую степень обратной совместимости в своей линейке процессоров, поэтому все последующие процессоры просто расширяли исходные регистры A, B, C, D до большего количества битов. Исходные регистры сегментов сегодня можно использовать для общих целей, поскольку сегментов больше нет (это упрощение, но примерно так). Новая архитектура x64 также предоставляет несколько дополнительных регистров.

9
ответ дан 30 November 2019 в 10:53
поделиться

Ну, есть и другие, четыре особые, я думаю, они «общего назначения», Причины всего этого и то, почему остальное не используется так часто, заключаются в следующем:

  • x86 не был лучшим набором инструкций, чтобы быть стандартом де-факто, Intell просто увидела потенциал обратной совместимости, когда к нему присоединилась AMD. только вопрос времени.
  • Сейчас это стандарт де-факто, поэтому мы должны с этим жить.
  • Добавление регистров больше не будет для x86, поэтому вы имеете в виду «создание нового набора инструкций на основе x86 с большим количеством регистров».
  • Большинство компиляторов не будут использовать их, так как они могут с таким же успехом компилироваться в x86, чтобы нацеливаться на надмножество x86.
  • Чем больше регистров, тем дороже оборудование.
0
ответ дан 30 November 2019 в 10:53
поделиться
  1. Регистры раньше было дорого реализовывать.
  2. Не обязательно. Количество регистров в современном x86 CPU намного превышает то, что раскрывает CPU - CPU поддерживает теневые регистры, которые переименовываются по мере необходимости на основе потока инструкций.
  3. В AMD64/x86_64. При работе в 64-разрядном режиме количество регистров общего назначения удваивается (в дополнение к удвоению их размера).

Существует множество архитектур с большим количеством регистров (ARM, PowerPC и т.д.). Временами они могут достигать более высокой пропускной способности инструкций, поскольку меньше работы выполняется при манипулировании стеком, и инструкции могут быть короче (нет необходимости ссылаться на переменные стека). Противоположный момент - вызовы функций становятся более дорогими из-за экономии регистров.

4
ответ дан 30 November 2019 в 10:53
поделиться

Используемая регистрами память действительно дорогостоящая для разработки в ЦП. Помимо трудностей конструкции, связанных с этим, увеличение количества доступных регистров делает микросхемы ЦП более дорогими.

Вдобавок:

  • Существуют и другие методы повышения производительности ЦП, которые являются более экономичными
  • Даже если введено больше, вам все равно необходимо обновить набор инструкций и модифицировать компиляторы для использования.
  • Регистров уже больше 4: Из википедии (миры, эх, самый надежный источник)
    • AX / EAX / RAX: аккумулятор
    • BX / EBX / RBX: базовый индекс (например, массивы)
    • CX / ECX / RCX: счетчик
    • DX / EDX / RDX: данные / общие
    • SI / ESI / RSI: "индекс источника" для строковых операций.
    • DI / EDI / RDI: «индекс назначения» для строковых операций.
    • SP / ESP / RSP: указатель стека для верхнего адреса стека.
    • BP / EBP / RBP: указатель базы стека для хранения адреса текущего кадра стека.
    • IP / EIP / RIP: указатель инструкции. Содержит счетчик программы, текущий адрес инструкции.
0
ответ дан 30 November 2019 в 10:53
поделиться

Um..... (E/R)AX, (E/R)BX, (E/R)CX, (E/R)DX, (E/R)SI, (E/R)DI, (E/R)SP, (E/R)BP, (E/R)IP. Я считаю, что это больше, чем 4. :)

0
ответ дан 30 November 2019 в 10:53
поделиться

Это просто зависит от архитектурных решений.Intel Itanium имеет 128 регистров общего назначения и 128 регистров с плавающей запятой, тогда как Intel x86 имеет только 8 регистров общего назначения и стек из 8 регистров с плавающей запятой.

0
ответ дан 30 November 2019 в 10:53
поделиться

В x86 всегда было более четырех регистров. Изначально у него есть CS, DS, ES, SS, AX, BX, CX, DX, SI, DI, BP, SP, IP и флаги. Из них семь (AX, BX, CX, DX, SI, DI и BP) поддерживали наиболее общие операции (сложение, вычитание и т. Д.). BP и BX также поддерживали использование в качестве «базового» регистра (т. Е. Для хранения адресов для косвенное обращение). SI и DI также могут использоваться в качестве индексных регистров, которые примерно такие же, как базовые регистры, за исключением того, что инструкция может генерировать адрес из одного базового регистра и одного индексного регистра, но НЕ из двух индексных регистров или двух базовых регистров. По крайней мере, при типичном использовании SP выполняет роль указателя стека.

С тех пор регистры стали больше, было добавлено больше, а некоторые из них стали более универсальными, поэтому (например) теперь вы можете использовать любые 2 регистра общего назначения в двух регистровых режимах адресации. Как ни странно, в 386 были добавлены два сегментных регистра (FS и GS), которые также позволяли использовать 32-битные сегменты, что в большинстве случаев делало все сегментные регистры почти несущественными. Иногда они используются для локального хранилища потоков.

Я также должен добавить, что когда вы выполняете многозадачность, многопоточность и т. Д., Большое количество регистров может иметь довольно серьезное наказание - поскольку вы не знаете, какие регистры используются, когда вы выполняете контекст switch вы должны сохранить все регистры в одной задаче и загрузить все сохраненные регистры для следующей задачи. В процессорах типа Itanium или SPARC с 200+ регистрами это может быть довольно медленным.Последние SPARC выделяют изрядную часть площади чипа для оптимизации этого, но их переключение задач все еще относительно медленное. На Itanium дела обстоят еще хуже - одна из причин, по которой он менее чем впечатляет при выполнении типичных серверных задач, даже несмотря на то, что он отлично справляется с научными вычислениями с (очень) небольшим количеством переключателей задач.

Наконец, конечно, все это действительно сильно отличается от того, как работает достаточно современная реализация x86. Начиная с Pentium Pro, Intel отделила архитектурные регистры (то есть те, которые могут быть адресованы в инструкции) от реализации. Для поддержки одновременного выполнения вне очереди Pentium Pro имел (если обслуживала память) набор из 40 внутренних регистров и использовал «переименование регистров», поэтому два (или более) из них могли соответствовать заданному архитектурному регистру в данный момент времени. . Например, если вы манипулируете регистром, затем сохраняете его, загружаете другое значение и манипулируете им, процессор может обнаружить, что загрузка разрывает цепочку зависимостей между этими двумя наборами инструкций, поэтому он может выполнять обе эти манипуляции одновременно.

Pentium Pro сейчас, конечно, довольно старый - и, конечно, AMD тоже существует уже некоторое время (хотя их конструкции в этом отношении достаточно похожи). Хотя детали меняются с появлением новых процессоров, возможность переименования, которая отделяет архитектурные регистры от физических регистров, теперь более или менее стала реальностью.

25
ответ дан 30 November 2019 в 10:53
поделиться

Больше регистров не обязательно ускоряет работу, они усложняют архитектуру ЦП, поскольку регистры должны находиться рядом с другими компонентами, а многие инструкции работают только с определенными регистрами.

Но современные процессоры имеют более четырех регистров, на мой взгляд, это AX, BX, CX, DX, SI, DI, BP, ... тогда у процессора есть внутренние регистры, например для PIC (счетчики команд процессора )

2
ответ дан 30 November 2019 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: