mv
pseudolyszt.net tratta mv e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
mv copia il valore di un registro in un altro. Il nome è l'abbreviazione di move. Dopo la riga seguente, entrambi i registri contengono lo stesso valore e la sorgente, t0, rimane invariata.
mv a0, t0
mv è una pseudoistruzione. L'assembler riscrive questo nome leggibile in un'istruzione reale, mostrata di seguito.
addi rd, rs, 0
Aggiungere zero a un valore e memorizzarlo altrove ne crea una copia. RISC-V non ha un'istruzione di spostamento dedicata e riutilizza invece l'addizione.
Registri diversi hanno compiti diversi, ed è questa la ragione abituale per usare mv. Per convenzione, i calcoli avvengono nei registri temporanei (t0, t1 e così via). Quando una funzione viene chiamata, i suoi argomenti vanno in registri specifici (a0, a1 e così via), e i risultati tornano in a0. Un programma quindi inserisce un mv prima di una chiamata, che mette un valore calcolato nel registro che il codice chiamato legge, e un mv dopo una chiamata, che salva un risultato restituito in un luogo sicuro.
mv a0, t0 call square mv s0, a0
Mettere i valori nei registri giusti al momento giusto è gran parte della programmazione in assembly, e mv lo fa.
Il manuale RISC-V afferma che addi con la costante 0 implementa la pseudoistruzione dell'assembler mv.
Poiché mv copia il valore, modificare la destinazione in seguito lascia la sorgente invariata. Questo rende mv utile per conservare una copia di un valore prima che un ciclo modifichi l'originale. La traccia del simulatore mostra l'addi che viene eseguito al posto di mv.
Si espande in
addi rd, rs, 0
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 42 mv t1, t0 # t1 = 42
