T&T - PIC

 

Le istruzioni ROTATE

 


Le istruzioni di ROTATE nei PIC

Le istruzioni che effettuano una rotazione del contenuto di un registro sono diverse, a seconda della famiglia:

Mid range

rrf Rotate Right (with carry) ruota a destra attraverso il carry
rlf Rotate Left (with carry) ruota a sinistra attraverso il carry

Enhanced

rrncf Rotare Right No Carry ruota a destra senza interessare il carry
rlncf Rotate Left No Carry ruota a sinistra senza interessare il carry
rrcf Rotate Right with Carry ruota a destra attraverso il carry
rlcf Rotate Left with Carry ruota a sinistra attraverso il carry

Nel set di istruzione del core a 14 bit sono disponibili due classiche istruzioni che consentono di ruotare un registro attraverso il bit di Carry dello STATUS.
Le medesime istruzioni, nel set a 16 bit assumono un nome differente, ma la funzione è la medesima.

14 bit 16 bit funzione
rrf rrcf ruota a destra attraverso il carry
rlf rlcf ruota a sinistra attraverso il carry

Questa differenza di denominazione è necessaria perchè nel set Enhanced esistono anche rotazioni che non coinvolgono il Carry.

Vediamo inizialmente come operano queste due istruzioni.


Rotate Left through Carry - rlf, rlcf

La sintassi dell' istruzione è questa:

Sintassi: [label] RLF f, d

Descrizione: Il contenuto del registro f è ruotato di un bit a sinistra attraverso il Carry.
Se d = w o d = 0, il risultato è salvato in WREG. Se d = f o d = 1, il risultato è salvato nel registro f.

Operazione: (f(n)) -> d(n+1), f(7) -> C, C -> d(0)

Operando: 0 ≤ f ≤ 127, d[0,1]

Flag di STATUS modificati:  solo C

Numero cicli necessari all' esecuzione: 1

La rotazione a sinistra attraverso il Carry consiste nelle seguenti operazioni:

  • il bit 7 del registro da ruotare viene passato al Carry

  • tutti gli altri bit si spostano verso sinistra di una posizione

  • al posto del bit zero viene iniettato il valore che aveva il Carry prima della rotazione

    L' intera sequenza richiede un solo ciclo per essere eseguita.

Bisogna tenere presente che il risultato delle istruzioni di rotate possono essere indirizzato sia al file che viene ruotato, sia all' accumulatore WREG.
L' identificazione tra le due possibilità avviene nel sorgente con il suffisso f o w, per cui la linea

   rlf   registro, f  

farà ruotare il contenuto del registro f come visto ora.
Ma se il suffisso diventa w, l' operazione eseguita produrrà un diverso effetto. Quindi:

   rlf   registro, w  

genererà la seguente situazione:

Il bit 7 del registro sarà passato al Carry, come nel caso precedente.

Il contenuto del registro sarà ruotato, portando il Carry precedente nel bit 0, ma il valore così ottenuto non sarà salvato nel registro, bensì si troverà in WREG.

Di conseguenza, il contenuto del registro resta immutato, mentre cambierà il contenuto di WREG.

Del tutto analoga la situazione per l' istruzione rlcf, con le seguenti differenze:

  • diversi flag di STATUS che vengono interessati dal risultato dell' operazione

  • a causa della maggiore estensione n bit dell' opcode, il range di f è maggiore  

Sintassi: [label] RLCF f, d(, a)

Descrizione: Il contenuto del registro f è ruotato di un bit a destra attraverso il Carry.
Se d = w o d = 0, il risultato è salvato in WREG. Se d = f o d = 1, il risultato è salvato nel registro f.

Operazione: (f(n)) -> d(n+1), f(7) -> C, C -> d(0)

Operando: 0 ≤ f ≤ 255, d[0,1]

Flag di STATUS modificati:  C, N, Z

Numero cicli necessari all' esecuzione: 1

a è il parametro dell' Access Bank, se posto a 0. Se a 1 è valida la selezione del banco con i BSR.
Non è necessario indicare questo parametro con MPASM in quanto la sua gestione è automatica. 

Va anche ricordato che, abilitando il set di istruzioni esteso, l' istruzione opera in Indexed Literal Offset Adderssing con f ≤ 95.


Rotate Left with Carry - rrf, rrcf

La sintassi dell' istruzione è questa:

Sintassi: [label] RRF f, d

Descrizione: Il contenuto del registro f è ruotato di un bit a destra attraverso il Carry.
Se d = w o d = 0, il risultato è salvato in WREG. Se d = f o d = 1, il risultato è salvato nel registro f.

Operazione: (f(n)) -> d(n-1), f(0) -> C, C -> d(7)

Operando: 0 ≤ f ≤ 127, d[0,1]

Flag di STATUS modificati:  solo C

Numero cicli necessari all' esecuzione: 1

A specchio, il comportamento della rotazione a destra attraverso il Carry

  • il bit 0 del registro da ruotare viene passato al Carry

  • tutti gli altri bit si spostano verso sinistra di una posizione

  • al posto del bit 7 viene iniettato il valore che aveva il Carry prima della rotazione

    L' intera sequenza richiede un solo ciclo per essere eseguita.

 

Come per la precedente istruzione, il risultato può essere indirizzato sia al file che viene ruotato, sia all' accumulatore WREG.
L' identificazione tra le due possibilità avviene nel sorgente con il suffisso f o w, per cui la linea

   rrf   registro, f  

farà ruotare il contenuto del registro f come visto ora.
Ma se il suffisso diventa w, l' operazione eseguita produrrà un diverso effetto. Quindi:

   rrf   registro, w  

genererà la seguente situazione:

Il bit 0 del registro sarà passato al Carry, come nel caso precedente.

Il contenuto del registro sarà ruotato, portando il Carry precedente nel bit 7, ma il valore così ottenuto non sarà salvato nel registro, bensì si troverà in WREG.

Di conseguenza, il contenuto del registro resta immutato, mentre cambierà il contenuto di WREG.

Del tutto analoga la situazione per l' istruzione rrcf, con le seguenti differenze:

  • diversi flag di STATUS che vengono interessati dal risultato dell' operazione

  • a causa della maggiore estensione n bit dell' opcode, il range di f è maggiore  

Sintassi: [label] RRCF f, d(, a)

Descrizione: Il contenuto del registro f è ruotato di un bit a destra attraverso il Carry.
Se d = w o d = 0, il risultato è salvato in WREG. Se d = f o d = 1, il risultato è salvato nel registro f.

Operazione: (f(n)) -> d(n-1), f(0) -> C, C -> d(7)

Operando: 0 ≤ f ≤ 255, d[0,1]

Flag di STATUS modificati:  C, N, Z

Numero cicli necessari all' esecuzione: 1

a è il parametro dell' Access Bank, se posto a 0. Se a 1 è valida la selezione del banco con i BSR.
Non è necessario indicare questo parametro con MPASM in quanto la sua gestione è automatica. 

Va anche ricordato che, abilitando il set di istruzioni esteso, l' istruzione opera in Indexed Literal Offset Adderssing con f ≤ 95.


Una possibile funzione di queste istruzioni è l' analisi bit per bit del contenuto di un registro oppure il suo trattamento come un registro di scorrimento


 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 13/10/14.