В более ранних процессорах не все регистры были равны:
- На микросхемах не хватило места, чтобы иметь сумматор для каждого регистра.
- С 8 битами было недостаточно доступных кодов операций для всех возможных комбинаций источника и назначения.
Таким образом, допущение, что один конкретный регистр всегда был задействован, когда использовался сумматор, делало чип менее сложным, а коды операций короче.
Например, 6510 (используемый в Commodore 64) может быть добавлен только с использованием регистра A, а для индексации используются X или Y. Есть инструкции INC X и INC Y, но нет INC A.
Поскольку регистры имели различное использование, были выбраны мнемоники, отражающие их использование. Например, A, X и Y в 6510 (вместо A, B и C).
Имена в 8086 выбраны так, чтобы отражать их использование. С 4 регистрами общего назначения было логично назвать их AX, BX, CX и DX. Дополнительные регистры индексации назывались BP и SP (мнемоника: базовый указатель, указатель стека).
Поскольку многие коды операций были расширены до 16 битов, было место для указания, какой из четырех регистров использовался. Однако некоторые исторические причины все еще применялись, поскольку CX был немного особенным: REP и лайки, которые являются 8-битными кодами операций, всегда используют CX в качестве счетчика. Простая мнемоника CX = Counter помогает запомнить, какая из них используется.
Операционные коды для преемников 8086 должны были быть обратно совместимыми, и это беспорядок в результате использования операционных кодов переменной длины. Когда 32-битные шины стали более распространенными, были опробованы процессоры с фиксированной длиной кода операции. Это упрощает декодирующую часть ЦП, которая высвобождает пространство, которое можно использовать, например, для большего количества регистров.
Процессоры, которые придерживались этой идеи, называются процессорами RISC (CPU с уменьшенным набором инструкций), в отличие от CISC (CPU с комплексным набором инструкций).
Чем больше регистров, тем меньше перетекания в память. По сути, регистры - это самый быстрый доступный кэш, поэтому увеличение количества регистров является хорошей идеей даже в наши дни. Отсутствие специализированных инструкций было (возможно, более чем) компенсировано более быстрым выполнением простых инструкций.
32-битные операционные коды фиксированной длины имеют достаточно места для включения источника, второго источника, операции и места назначения. SPARC удалось сжать 5 битов для каждого из источника, второго источника и места назначения, и, следовательно, одновременно было доступно 32 регистра.
32 регистра слишком много, чтобы использовать буквы, и в любом случае они были в основном равны, поэтому нумерация их была очевидным выбором. Буква «R» использовалась для того, чтобы отличить их от констант 0..31, а буква «R» была легкой мнемоникой для Регистра. Следовательно: R0..R31.
На протяжении многих лет Pentium и его преемники поддерживали обратную совместимость. Тем не менее, многие из наиболее успешных идей RISC также были неоправданными. Часто эти новые RISC-подобные инструкции выполняются быстрее, чем обратно-совместимые версии.
Интел также увеличил количество регистров, чтобы уменьшить количество обращений к памяти.
И, видимо, Intel наконец начала использовать R-нотацию. Обратная совместимость гарантирует, что AX, BX, ... останутся, но я бы поспорил, что AX - это просто синоним, например, R0.
Отказ от ответственности : Выше мой взгляд на историю. Это будет неполным, так как я не был свидетелем ранних частей истории из первых рук. Тем не менее, я надеюсь, что это будет полезно для некоторых.