Cosa significa la 'R' nei nomi dei registri x64?

22

So che i registri a 32 bit sono stati denominati come i registri a 16 bit con un prefisso "E" per indicare esteso. Ho sempre pensato che ciò significasse esteso da 16 a 32 bit, anche se non l'ho mai visto in modo esplicito.

Stavo cercando di scoprire cosa significasse la 'R', ma le mie competenze su Google mi hanno deluso. Qualcuno sa?

    
posta Matt 30.12.2011 - 08:19
fonte

3 risposte

28

Significa registrati e non è tutto per ragioni storiche.

La parte storica è che Intel ha preso l'abitudine di enumerare i registri con lettere con l'8008 (da A a E più H e L). Quel sistema era più che adeguato in quel momento perché i microprocessori avevano pochissimi registri e non erano suscettibili di ottenere di più, e la maggior parte dei progetti lo ha fatto. Il sentimento prevalente allora era che il software sarebbe stato riscritto per le nuove CPU man mano che apparivano, quindi cambiare lo schema di denominazione dei registri tra i modelli non sarebbe stato un grosso problema. Nessuno ha previsto che l'8088 si evolva in una "famiglia" dopo essere stato incorporato nel PC IBM e il giogo della compatibilità con le versioni precedenti ha praticamente obbligato Intel a dover adottare schemi come la "E" sui registri a 32 bit per mantenerlo.

La parte non storica è tutto pratica. Usando le lettere per i registri di uso generale si limita a 26, meno se si eliminano quelli che potrebbero causare confusione con i nomi di registri speciali come il contatore del programma, i flag o il puntatore dello stack.

Non ho una fonte per confermarlo, ma sospetto che la scelta di R come prefisso e l'introduzione di R8 a R15 su CPU a 64 bit segnali una transizione ai registri numerati, che sono stati la norma tra architetture a 32 bit e più grandi non derivate dall'800 per quasi mezzo secolo. IBM lo ha fatto negli anni '60 con il 360 ed è stato seguito da PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intel i860 e i960 e un mucchio di altri che sono stati dimenticati da molto tempo.

Noterai che i registri esistenti si adatterebbero bene in R0 a R7 se esistessero, e non mi sorprenderebbe un po 'se venissero trattati in quel modo internamente. I registri lunghi esistenti (RAX / EAX / AX / AL, RBX / EBX / BX / BL, ecc.) Rimarranno probabilmente in attesa finché il sole non si esaurisce.

    
risposta data 30.12.2011 - 19:20
fonte
6

Nei processori precedenti, non tutti i registri erano uguali:

  • Non c'era abbastanza spazio sui chip per avere un'unità di aggiunta per ogni registro.
  • Con 8 bit, non c'erano abbastanza codici opzionali disponibili per tutte le possibili combinazioni di origine e destinazione.

Quindi, supponendo che uno specifico registro fosse sempre implicato quando era coinvolto il sommatore, rendeva il chip meno complesso e gli opcode più brevi.

es. il 6510 (usato in Commodore 64) poteva solo aggiungere usando il registro A, e l'indicizzazione usata X o Y. Ci sono istruzioni INC X e INC Y, ma non INC A.

Poiché i registri avevano usi diversi, i mnemonici venivano scelti in base al loro utilizzo. Per esempio. A, X e Y nel 6510 (anziché A, B e C).

I nomi nell'8086 vengono scelti per riflettere anche il loro uso. Con 4 registri general purpose, era logico chiamarli AX, BX, CX e DX. Ulteriori registri di indicizzazione sono stati chiamati BP e SP (mnemonico: puntatore di base, puntatore di stack).

Dato che molti codici opzionali erano estesi a 16 bit, c'era spazio per indicare quale dei quattro registri era stato utilizzato. Tuttavia, alcuni dei motivi storici sono ancora applicati, poiché CX era un po 'speciale: REP e simili, che sono opcode a 8 bit, usano sempre CX come contatore. Un semplice messaggio mnemonico, CX = Counter, aiuta a ricordare quale viene utilizzato.

Gli opcode per i successori dell'8086 dovevano essere retrocompatibili e sono un disastro a causa degli opcode di lunghezza variabile. Quando i bus a 32 bit sono diventati più comuni, sono stati provati processori con lunghezza opcode fissa. Ciò semplifica la parte di decodifica della CPU, che ha liberato spazio che potrebbe essere utilizzato per es. più registri.

I processori che hanno seguito questa linea di pensiero sono chiamati processori RISC (CPU di set di istruzioni ridotte), in contrasto con il CISC (CPU dell'insieme di istruzioni complesse).

Più registri si traducono in una minore dispersione in memoria. Fondamentalmente, i registri sono la cache più veloce disponibile, quindi aumentare il numero di registri è una buona idea, anche al giorno d'oggi. La mancanza di istruzioni specializzate era (si sperava più di) compensata dal più rapido passaggio di istruzioni semplici.

I codici opachi a 32 bit di lunghezza fissa hanno spazio sufficiente per includere una fonte, una seconda fonte, un'operazione e una destinazione. SPARC è riuscito a raggrinzire 5 bit per ciascuna sorgente, seconda fonte e destinazione, e quindi ha avuto 32 registri visibili allo stesso tempo.

32 registri sono troppi per usare le lettere, e comunque erano per lo più uguali, quindi la loro numerazione era la scelta più ovvia. La 'R' è stata usata per distinguerli dalle costanti 0..31, e 'R' era un semplice mnemonico per Register. Pertanto: R0..R31.

Nel corso degli anni, il Pentium e i suoi successori hanno mantenuto la compatibilità all'indietro. Tuttavia, molte delle idee RISC più efficaci sono state incorporate. Di frequente, quelle nuove istruzioni simili a RISC funzioneranno più velocemente rispetto alle versioni compatibili con versioni precedenti.

Anche il numero di registri è stato aumentato da Intel, per ridurre il numero di accessi alla memoria.

E a quanto pare, Intel ha finalmente iniziato a usare la notazione R. La compatibilità all'indietro assicurerà che AX, BX, ... rimarrà, ma scommetterei che AX è solo un sinonimo per es. R0.

Disclaimer : quanto sopra è la mia visione della storia. Sarà incompleto perché non ero in giro per assistere di persona alle prime parti della storia. Tuttavia, spero che sia utile per alcuni.

    
risposta data 31.12.2011 - 07:20
fonte
4

Significa semplicemente "registrati". Per ragioni storiche.

    
risposta data 30.12.2011 - 08:22
fonte

Leggi altre domande sui tag