Citazione:
Orginalmente inviato da landyandy
Grazie!!
Quindi RRNCF è un semplice shift a destra?
|
In effetti non è un semplice shift a destra, o meglio esegue lo shift a destra del registro f (dei pic) senza influenzare il flag carry (riporto), però fa rientrare il bit shiftato al posto del msb.
In pratica l'istruzione ruota circolarmente il registro verso destra di un bit ogni volta che viene richiamata.
In C non esiste un equivalente diretto, ">>" e "<<" fanno solo lo shift di tot bit nel verso richiesto inserendo uno zero al posto del msb, però agiscono su tutti i tipi dati supportati dal C e non solo su un singolo registro a otto bit.
Esempio pratico, se la variabile A è di tipo unsigned int e contiene, in formato binario, "1111000011110000" ed esegui uno shfit verso destra di quattro bit ottieni "0000111100001111".
In pratica shiftare verso destra è equivalente a dividere il valore per la potenza di due pari al numero di bit, se shifti un bit è come dividere per due, se shifti due bit è come dividere per quattro, etc.
Stessa cosa per lo shift verso sinistra con la differenza che è lsb ad essere sostituito con lo zero ed è equivalente a moltiplicare per una potenza di due.
Usare lo shift al posto di moltiplicazioni/divisioni per potenze di due è molto più efficace, richiede meno cicli macchina, dell'operazione divisione/moltiplicazione, a meno che non siano supportate in hardware da apposita circuiteria.