nop
pseudolyszt.net tratta nop e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
nop non fa nulla. Il nome è l'abbreviazione di "no operation" (nessuna operazione). Quando il processore raggiunge un nop, nessun registro cambia, nessuna memoria viene toccata, e l'esecuzione prosegue con l'istruzione successiva. Occupa uno slot nel programma e passa un tick di tempo.
nop è una pseudo-istruzione per la riga sottostante.
addi zero, zero, 0
RISC-V include un registro chiamato zero che contiene sempre 0. Una lettura restituisce 0, e una scrittura viene scartata. Quell'addi somma 0 e 0 e scarta il risultato, quindi l'istruzione si completa e nulla cambia. RISC-V non ha bisogno di un nop dedicato perché il registro zero ne fornisce uno.
I processori reali usano i nop come riempimento, affinché un'istruzione successiva inizi a un confine di memoria che l'hardware gestisce più rapidamente, e come segnaposto che gli strumenti sovrascrivono in seguito con istruzioni reali. I compilatori li inseriscono sistematicamente, ed è per questo che il codice disassemblato li contiene anche se nessun programmatore li ha digitati.
Il manuale RISC-V afferma che nop non modifica alcuno stato visibile architetturalmente, cioè nulla che un programma possa osservare, a parte l'avanzamento del pc e l'incremento di eventuali contatori di prestazioni. Ne indica due usi: allineare segmenti di codice a confini di indirizzo adatti all'hardware, e lasciare spazio per modifiche successive al codice. Il manuale spiega che la codifica usa addi perché quell'istruzione costa meno risorse sulla maggior parte dei sistemi, dato che legge un solo registro.
In questo simulatore nop serve come spaziatore o marcatore durante gli esperimenti. Superare un nop fa avanzare il pc di 4 e non cambia alcun registro o posizione di memoria.
Si espande in
addi zero, zero, 0
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 1 nop # advances one instruction, changes nothing addi t0, t0, 1 # t0 = 2
