Un'architettura CPU basata su registro ha uno o più registri di uso generale (in cui "registro generale" esclude i registri di scopi speciali, come il puntatore dello stack e il puntatore di istruzioni).
Un'architettura CPU basata su accumulatore è un'architettura CPU basata su registro che ha solo un registro generale (l'accumulatore).
Il vantaggio / i principale di "più che un registro generale" è che il compilatore non deve "versare" tanti valori temporanei nello stack; ed è più facile per la CPU eseguire più istruzioni indipendenti in parallelo.
Per un esempio, immagina di voler fare a = (b - c) + (d - f) + 123
. Per un confronto "mele vs mele" userò l'assembly 80x86 di 32-bit della sintassi Intel per entrambi gli esempi (ma uso EAX solo per l'architettura CPU basata su accumulator).
Per l'architettura CPU basata su accumulatore, può essere:
mov eax,[b] ;Group 1
sub eax,[c] ;Group 2
add eax,123 ;Group 3
mov [a],eax ;Group 4
mov eax,[d]
sub eax,[e] ;Group 5
add [a],eax ;Group 6
Si noti che la maggior parte di queste istruzioni dipende dal risultato dell'istruzione precedente e pertanto non può essere eseguita in parallelo. I commenti "; Gruppo N" sono lì per indicare quali gruppi di istruzioni possono essere eseguiti in parallelo (e mostrare che, assumendo una qualche forma di abilità interna di "rinominazione del registro", "gruppo 4" è l'unico gruppo in cui 2 istruzioni sono suscettibili di essere fatto in parallelo).
L'uso di più registri potrebbe darti:
mov eax,[b] ;Group 1
mov ebx,[d]
sub eax,[c] ;Group 2
sub ebx,[e]
lea eax,[eax+ebx+123] ;Group 3
mov [a],eax ;Group 4
In questo caso, c'è un'istruzione in meno e 2 in meno gruppi di istruzioni (più istruzioni possibili eseguite in parallelo). Ciò potrebbe significare "25% più veloce" nella pratica.
Naturalmente in pratica il codice fa più di un calcolo relativamente semplice; quindi c'è ancora più possibilità di "più istruzioni in parallelo". Per esempio; con solo 2 registri in più (ad esempio ECX ed EDX) dovrebbe essere facile vedere che si potrebbe fare a = (b - c) + (d - f) + 123
e g = (h - i) + (j - k) + 456
nello stesso intervallo di tempo (eseguendo entrambi i calcoli in parallelo con registri diversi); e dovrebbe anche essere facile vedere che per l'architettura CPU basata su accumulatore non è possibile eseguire i calcoli in parallelo (due calcoli richiederebbero il doppio del tempo di un calcolo).
Nota: c'è almeno una "potenziale inesattezza tecnica" in ciò che ho scritto qui (che riguarda principalmente le capacità teoriche della ridenominazione dei registri e la sua applicazione su architetture CPU basate su accumulator). Questo è intenzionale. Trovo che entrare troppo nel dettaglio (nel tentativo di essere "100% tecnicamente corretto" e coprire tutti i piccoli casi d'angolo) rende molto più difficile per le persone capire le parti rilevanti.