Nos processadores anteriores, nem todos os registros eram iguais:
- Não havia espaço suficiente nos chips para ter uma unidade somadora para cada registro.
- Com 8 bits, não havia códigos de operação suficientes disponíveis para todas as combinações possíveis de origem e destino.
Portanto, supondo que um registro específico sempre estivesse envolvido quando o adicionador estava envolvido, tornava o chip menos complexo e os códigos de operação mais curtos.
Por exemplo, o 6510 (usado no Commodore 64) só poderia adicionar usando o registro A e a indexação usada X ou Y. Existem instruções INC X e INC Y, mas não INC A.
Como os registros tinham diferentes usos, os mnemônicos foram escolhidos refletindo seu uso. Por exemplo, A, X e Y no 6510 (em vez de A, B e C).
Os nomes no 8086 são escolhidos para refletir seu uso também. Com quatro registros de uso geral, era lógico chamá-los de AX, BX, CX e DX. Registros de indexação adicionais foram chamados BP e SP (mnemônico: Ponteiro Base, Ponteiro de Pilha).
Como muitos opcodes foram estendidos para 16 bits, havia algum espaço para indicar qual dos quatro registradores era usado. No entanto, algumas das razões históricas ainda se aplicavam, pois o CX era um pouco especial: o REP e os gostos, que são opcodes de 8 bits, sempre usam o CX como contador. Um mnemônico simples, CX = Counter, ajuda a lembrar qual deles é usado.
Os códigos de operação para sucessores do 8086 precisavam ser compatíveis com versões anteriores e são uma bagunça como resultado dos códigos de operação de comprimento variável. Quando os barramentos de 32 bits se tornaram mais comuns, foram testados processadores com comprimento fixo de código de operação. Isso simplifica a parte de decodificação da CPU, que liberou espaço que poderia ser usado para, por exemplo, mais registros.
Os processadores que seguiram essa linha de pensamento são chamados de processadores RISC (CPU do conjunto de instruções reduzido), para contrastar com o CISC (CPU do conjunto de instruções complexo).
Mais registros resultam em menos transbordamento para a memória. Basicamente, os registros são o cache mais rápido disponível, portanto, aumentar o número de registros é uma boa idéia, mesmo hoje em dia. A falta de instruções especializadas foi (espero que mais do que) compensada pelo rápido envio de instruções simples.
Opcodes de comprimento fixo de 32 bits têm espaço suficiente para incluir uma fonte, uma segunda fonte, uma operação e um destino. O SPARC conseguiu torcer 5 bits para cada fonte, segunda fonte e destino e, portanto, tinha 32 registros visíveis ao mesmo tempo.
32 registros são demais para usar letras, e eles eram praticamente iguais de qualquer maneira, portanto, numerá-los era a escolha óbvia. O 'R' foi usado para distingui-los das constantes 0..31 e 'R' foi um mnemônico fácil para o Register. Portanto: R0..R31.
Ao longo dos anos, o Pentium e seus sucessores mantiveram compatibilidade com versões anteriores. No entanto, muitas das idéias mais bem-sucedidas do RISC também foram incorporadas. Freqüentemente, essas novas instruções do tipo RISC serão executadas mais rapidamente do que as versões compatíveis com versões anteriores.
O número de registros também foi aumentado pela Intel, para reduzir o número de acessos à memória.
E, aparentemente, a Intel finalmente começou a usar a notação R. A compatibilidade com versões anteriores garantirá que o AX, o BX, ... permaneçam, mas eu apostaria que o AX é apenas um sinônimo para, por exemplo, R0.
Isenção de responsabilidade : A descrição acima é minha visão da história. Será incompleto, pois eu não estava por perto para testemunhar as partes anteriores da história em primeira mão. No entanto, espero que seja útil para alguns.