X86 на самом деле является машиной с 8 регистрами (eax / ebx / ecx / edx / esi / edi / ebp / esp). Вы теряете 1 из них на указатель стека / базовый указатель, поэтому при практическом использовании вы получаете 7, что немного ниже, но даже на некоторых RISC-машинах есть 8 (SuperH и ARM в режиме THUMB, потому что они имеют 16-битную инструкцию размер и другие регистры будут слишком длинными для кодирования!). Для 64-битного кода вы обновляете с 8 до 16 (в кодировке команд AFAIK использовались оставшиеся биты).
Тем не менее, 8 регистров - это как раз то, что достаточно для конвейерной обработки процессора, который идеально подходит для 486-х и пенсий. Некоторые другие архитектуры, такие как 6502/65816, умерли в начале 32-битной эры, потому что вы просто не можете сделать быструю конвейерную версию по порядку (у вас есть только 3 регистра и только 1 для общей математики, так что все вызывает остановку! ). Как только вы доберетесь до поколения, в котором все ваши регистры переименованы и все вышло из строя (pentium 2 и т. Д.), Это уже не имеет значения, и вы не получите срывов, если будете использовать один и тот же регистр снова и снова, и тогда 8 регистров вполне в порядке.
Другое использование для большего количества регистров - хранить константы цикла в регистрах, и вам не нужно это делать на x86, потому что каждая инструкция может выполнять загрузку памяти, поэтому вы можете хранить все свои константы в памяти. Это единственная функция, отсутствующая в RISC (по определению), и хотя они компенсируют ее тем, что упрощают конвейерную обработку (наибольшая задержка составляет 2 цикла вместо 3) и немного более суперскалярны, размер вашего кода все еще немного увеличивается. ..
Существуют некоторые неочевидные затраты на добавление дополнительных регистров. Ваши инструкции становятся длиннее, потому что вам нужно больше битов, что увеличивает размер программы, что замедляет вашу программу, если скорость вашего кода ограничена пропускной способностью чтения инструкций в памяти!
Существует также тот факт, что чем больше ваш регистровый файл, тем больше уровней мультиплексора / общих схем вам придется пройти, чтобы прочитать значение, что увеличивает задержку, что потенциально может снизить тактовую частоту!
Вот почему традиционное мнение заключается в том, что более 32 регистров не очень хорошая идея (бесполезно, особенно на неработающем процессоре), а 8 слишком мало (чтение памяти все еще стоит дорого). !) и почему идеальная архитектура считается чем-то вроде 75% RISC 25% CISC, и почему ARM популярен (сбалансировано почти правильно!), почти все архитектуры RISC все еще имеют некоторые части CISC (вычисление адреса в каждой памяти OP) , 32-битные операционные коды, но не более!), Почему Itanium не удалось (128-битные операционные коды? 64 регистра? Нет вычисления адреса в оперативной памяти ???).
По всем этим причинам x86 не был превзойден - уверен, что кодировка инструкций полностью безумна, но кроме этого, все безумные переупорядочивание и переименование, а также спекулятивное безумие, связанное с сохранением нагрузки, на самом деле все действительно полезные функции и это именно то, что дает ему преимущество перед различными более простыми конструкциями на заказ, такими как POWER6. Как только вы все переупорядочиваете и переименовываете, все наборы команд в любом случае более или менее одинаковы, поэтому очень сложно создать дизайн, который на самом деле быстрее, за исключением особых случаев (по сути, графических процессоров). Как только процессоры ARM станут такими же быстрыми, как x86, они станут такими же сумасшедшими и сложными, как те, что выпускает Intel.