Nel set di istruzioni RISC-V, i registri sono 32 e sono indicati come x0 fino a x31. Ogni registro ha un nome convenzionale per facilitarne l’uso e un ruolo specifico.

Registri generali (x0 - x31)

ai (fact-checked)

RegistroNomeScopo
x0zeroContiene sempre 0 (hardwired)
x1raReturn Address (indirizzo di ritorno per funzioni)
x2spStack Pointer (punta alla cima dello stack)
x3gpGlobal Pointer (variabili globali, usato in ABI)
x4tpThread Pointer (usato per il contesto dei thread)
x5t0Temporaneo (uso generale, non preservato tra chiamate)
x6t1Temporaneo
x7t2Temporaneo
x8s0/fpSaved Register / Frame Pointer (preservato tra chiamate)
x9s1Saved Register (preservato tra chiamate)
x10a0Argomento 1 / valore di ritorno
x11a1Argomento 2 / valore di ritorno
x12a2Argomento 3
x13a3Argomento 4
x14a4Argomento 5
x15a5Argomento 6
x16a6Argomento 7
x17a7Argomento 8 (anche codice di sistema per le syscall)
x18s2Saved Register (preservato tra chiamate)
x19s3Saved Register
x20s4Saved Register
x21s5Saved Register
x22s6Saved Register
x23s7Saved Register
x24s8Saved Register
x25s9Saved Register
x26s10Saved Register
x27s11Saved Register
x28t3Temporaneo
x29t4Temporaneo
x30t5Temporaneo
x31t6Temporaneo

Classificazione Funzionale

  • Registri temporanei (t0 - t6)
    • Usati per calcoli temporanei
    • Non preservati tra chiamate di funzione
  • Registri salvati (s0 - s11)
    • Preservati tra chiamate
    • Devono essere salvati e ripristinati se usati da una funzione
  • Registri degli argomenti (a0 - a7)
    • Passano parametri alle funzioni
    • a0 e a1 usati per il valore di ritorno
  • Registri speciali
    • zero: sempre 0 (utile per ottimizzazioni)
    • ra: contiene l’indirizzo di ritorno della funzione chiamante
    • sp: gestisce lo stack (deve essere gestito con attenzione)
    • gp: puntatore ai dati globali
    • tp: usato per la gestione dei thread

Uso nei programmi

Esempio di funzione che somma due numeri:

add_function:
    add a0, a0, a1  # a0 = a0 + a1
    ret             # ritorna (indirizzo salvato in ra)

Qui a0 e a1 contengono i parametri della funzione, e il risultato viene restituito in a0.