Il Set di istruzioni dei PIC18
|
BYTE-ORIENTED OPERATIONS
Svariate aggiunte anche nell' area delle istruzioni di trattamento dei
byte, con una notevole aggiunta di possibilità utili.
In particolare :
- tre istruzioni di comparazione diretta tra il registro W e un altro
registro f
- due istruzioni di skip a seguito di incremento e decremento che
completano quelle già presenti nel set 16F, rendendo più agevole la
gestione dei loop in cui si decrementa o incrementa un contatore
- una comoda istruzione di move tra registro e registro (MOVFF), che
mancava al set 16F
- le istruzioni di rotate sono state aggiornate con due istruzioni che
interessano il Carry e due no. Attenzione che lo mnemonico del set 16F
RLF/RRF è diventato RLCF/RRCF , ovvero comprendente il Carry, mentre
RLNCF/RRNCF sono rate che non comprendono il Carry
- due istruzioni aritmetiche, una di moltiplicazione a 8 bit tra W e un
altro registro ed una di sottrazione con Borrow
- SWAPF è sostituita con TSTFSZ
La sintassi di tutte è modificata dall' aggiunta del modo a nelle
opzioni dell' oggetto, mentre gli mnemonici vecchi sono ancora in uso.
Mnemonici
e
Operandi
|
Descrizione |
Cicli |
16-Bit
Instruction Word |
Status
Affected
|
Note |
BYTE-ORIENTED
OPERATIONS |
ADDWF f,d,a |
Add WREG and f |
1 |
0010 01da ffff ffff |
C,DC, Z,
OV, N |
1,2 |
ADDWFC f,d,a |
Add WREG and Carry bit to f |
1 |
0010 00da ffff ffff |
C,DC, Z,
OV, N |
1,2 |
ANDWF f,d,a |
AND WREG with f |
1 |
0001 01da ffff ffff |
Z,N |
1,2 |
CLRF f,d,a |
Clear f |
1 |
0110 101a ffff ffff |
Z |
2 |
COMF f,d,a |
Complement f |
1 (2/3) |
0110 11da ffff ffff |
Z,N |
1,2 |
CPFSEQ f,a |
Compare f with WREG, Skip = |
1 (2/3) |
0110 001a ffff ffff |
- |
4 |
CPFSGT f,a |
Compare f with WREG, Skip > |
1 (2/3) |
0110 010a ffff ffff |
- |
4 |
CPFSLT f,a |
Compare f with WREG, Skip < |
1 (2/3) |
0110 000a ffff ffff |
- |
1,2 |
DECF f,d,a |
Decrement f |
1 |
0000 01da ffff ffff |
C,DC,Z,
OV, N |
all |
DECFSZ f,d,a |
Decrement f, Skip if 0 |
1 (2/3) |
0010 11da ffff ffff |
- |
all |
DCFSNZ f,d,a |
Decrement f, Skip if Not 0 |
1 (2/3) |
0100 11da ffff ffff |
- |
1,2 |
INCF f,d,a |
Increment f |
1 |
0010 10da ffff ffff |
C,DC, Z,
OV, N |
all |
INCFSZ f,d,a |
Increment f, Skip if 0 |
1 (2/3) |
0011 11da ffff ffff |
- |
4 |
INFSNZ f,d,a |
Increment f, Skip if Not 0 |
1 (2/3) |
0100 10da ffff ffff |
- |
1,2 |
IORWF f,d,a |
Inclusive OR WREG with f |
1 |
0001 00da ffff ffff |
Z,N |
1,2 |
MOVF f,d,a |
Move f |
1 |
0101 00da ffff ffff |
Z,N |
1 |
MOVFF fs,fd |
Move fs (source) to 1st word
fd (dest.) 2nd word
|
2 |
1100 ffff ffff ffff
1111 ffff ffff ffff |
- |
|
MOVWF f,a |
Move WREG to f |
1 |
0110 ffff ffff ffff |
- |
|
MULWF f,a |
Multiply WREG with f |
1 |
0000 111a ffff ffff |
- |
1,2 |
NEGF f,a |
Negate f |
1 |
0110 110a ffff ffff |
C,DC, Z,
OV, N |
|
RLCF
f,d,a |
Rotate Left f through Carry |
1 |
0011 01da ffff ffff |
C,Z,N |
1,2 |
RLNCF f,d,a |
Rotate Left f (No Carry) |
1 |
0100 01da ffff ffff |
Z,N |
|
RRCF
f,d,a |
Rotate Right f through Carry |
1 |
0011 00da ffff ffff |
C,Z,N |
|
RRNCF f,d,a |
Rotate Right f (No Carry) |
1 |
0100 00da ffff ffff |
Z,N |
|
SETF f,d,a |
Set f |
1 |
0110 100a ffff ffff |
- |
|
SUBFWB f,d,a |
Subtract f from WREG w/ Borrow
|
1 |
0101 01da ffff ffff |
C,DC, Z,
OV, N |
1,2 |
SUBWF f,d,a |
Subtract WREG from f |
1 |
0101 11da ffff ffff |
C,DC, Z,
OV, N |
|
SUBWFB f,d,a |
Subtract WREG from f w/ Borrow |
1 |
0011 10da ffff ffff |
- |
4 |
TSTFSZ f,a |
Swap Nibbles in f |
1 (2/3) |
0110 011a ffff ffff |
- |
1,2 |
XORWF f,d,a |
EXclusive OR WREG with f |
1 |
0001 10da ffff ffff |
Z,N |
|
Note
- Quando un PORT viene modificato come funzione di se stesso (ad es. MOVF
PORTB, 1, 0), il valore usato è quello presente sui pin del port.
Ad esempio, se il data latch è =_ 1 per un pin configurato come ingresso
ed è mantenuto a livello basso da un segnale
- Se l' istruzione è eseguita sul registro TMR0 (se applicabile con
‘d’ = 1), il presacler assegnato sarà azzerato.
- Se il Program Counter (PC) viene modificato o un test condizionale è
vero, l' istruzione richiede 2 cicli, il secondo dei quali è eseguito
come un NOP.
- Alcune istruzioni hanno la lunghezza di 2 word., la seconda delle quali
sarà eseguita come un NOP se la prima parte dell' istruzione contiene
tutte le informazioni necessarie nei primi 16 bit. Questo garantisce che
tute le locazioni della mmeoria programma contengano una istruzione
valida.
Va inoltre notato che l' istruzione CLRW non è più
supportata.
|