Le istruzioni di ROTATE senza Carry
Il set Enhanced consente di disporre di due altre rotazioni che vengono
effettuate senza toccare iul contenuto del Carry. Queste istruzioni non
esistono nel set dei PIC con core a 12 e 14 bit.
opcode |
funzione |
rrncf |
ruota a destra senza il carry |
rlncf |
ruota a sinistra senza il carry |
Questa differenza di denominazione è necessaria perchè
nel set Enhanced esistono anche rotazioni che coinvolgono il Carry.
Rotate Left No Carry - rlncf
La sintassi è questa:
Sintassi: [label] RLNCF f,
d(, a)
Descrizione: Il contenuto del registro f è ruotato di un
bit a sinistra senza interessare 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) -> d(0),
Operando: 0 ≤ f ≤ 255, d[0,1]
Flag di STATUS modificati: 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.
La rotazione a sinistra senza Carry è semplicemente una
rotazione del contenuto del registro su se stesso; il contenuto del Carry NON
viene toccato:
|
-
il bit 7 del registro da ruotare viene
passato al bit 0 dello stesso registro
-
tutti i bit si spostano verso sinistra di una
posizione e quindi
-
al posto del bit zero viene iniettato il
valore che aveva il bit 7 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
farà ruotare il contenuto del registro f come visto ora.
Ma se il suffisso diventa w, l' operazione eseguita produrrà un diverso
effetto. Quindi:
genererà la seguente situazione:
|
Il contenuto del registro sarà ruotato, senza influenzare il Carry,
ma il valore così ottenuto non sarà salvato nel registro, bensì si
troverà in WREG.
Di conseguenza, il contenuto del registro resta immutato. |
Rotate Left No Carry - rrncf
La sua sintassi è la seguente:
Sintassi: [label] RRNCF f,
d(, a)
Descrizione: Il contenuto del registro f è ruotato di un
bit a destra senza interessare 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) -> d(7)
Operando: 0 ≤ f ≤ 255, d[0,1]
Flag di STATUS modificati: 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.
A specchio il comportamento della rotazione a destra senza il Carry
|
-
il bit 0 del registro da ruotare va a
sostituire il bit 7 dello steso registro
-
tutti gli altri bit si spostano verso destra
di una posizione
-
al posto del bit sette viene iniettato il
valore che aveva il bit 0 prima della rotazione
|
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
farà ruotare il contenuto del registro f come visto ora.
Ma se il suffisso diventa w, l' operazione eseguita produrrà un diverso
effetto. Quindi:
genererà la seguente situazione:
|
Il bit 0 del registro sarà al bit 7, come nel caso
precedente. Il contenuto del registro sarà ruotato, 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. |
Queste istruzioni ruotano il registro su se stesso, fornendo un supporto
per operazioni matematiche e strutture genere shift register.
|