El set de instrucciones de la familia mayor de 8 bits de Microchip denominados High Perfomance PIC, albergan las siguientes características:
- Las instrucciones son altamente ortogonales, es decir, casi todas las instrucciones pueden usar cualquier operando.
- Instrucciones muy parecidas a las arquitecturas inferiores para una fácil migración y adaptación.
- Todas las instrucciones tienen la misma longitud, en esta arquitectura es de 16-bits.
- Para un reloj principal de 4 MHz, el tiempo de ejecución de la mayoría de las instrucciones es de 1 us, excepto las instrucciones de salto, que es de 2 us.
Operaciones de tamaño byte.
Son las denominadas, en anglosajón, Byte-Oriented Operations, consisten en las instrucciones que manejan registros y el lugar de almacenar la operación correspondiente, en un literal, denominado 'f', o en el registro de trabajo, llamado 'w'.
El set de instrucciones es el que se muestra en la siguiente tabla.
Operador | Descripción | Ciclos de Reloj | Operador 16-bit | Flags Afectados |
---|---|---|---|---|
addwf....f,d, a | W + f -> (d) | 1 | 0010 01da ffff ffff | C, DC, Z, OV, N |
addwfc....f, d, a | W+f+C -> (d) | 1 | 0010 00da ffff ffff | C, DC, Z, OV, N |
andwf....f, d, a | W AND f -> (d) | 1 | 0001 01da ffff ffff | Z, N |
clrf..........f, a | f = 0 | 1 | 0110 101a ffff ffff | Z |
comf.......f,d,a | NOT f -> (d) | 1 | 0001 11da ffff ffff | Z,N |
cpfseq...f,a | Compara f con W, salta si son iguales | 1 (2 o 3) | 0110 001a ffff ffff | Ninguno |
cpfsgt...f,a | Compara f con W, salta si f > W | 1 (2 o 3) | 0110 010a ffff ffff | Ninguno |
cpfslt...f,a | Compara f con W, salta si f <> | 1 (2 o 3) | 0110 000a ffff ffff | Ninguno |
decf........f, d,a | f -- -> (d) | 1 | 0000 01da dfff ffff | C, DC, Z, OV, N |
decfsz....f, d,a | f-- , salta si f = 0 -> (d) | 1 (2 o 3) | 0010 11da ffff ffff | Ninguno |
dcfsnz....f, d,a | f-- , salta si f NOT 0 -> (d) | 1 (2 o 3) | 0100 11da ffff ffff | Ninguno |
incf.........f, d,a | f++ -> (d) | 1 | 0010 10da ffff ffff | C, DC, Z, OV, N |
incfsz.....f, d,a | f++ , salta si f = 0->(d) | 1 (2 o 3) | 0011 11da ffff ffff | Ninguno |
infsnz.....f, d,a | f++ , salta si f NOT 0->(d) | 1 (2 o 3) | 0100 10da ffff ffff | Ninguno |
iorwf......f, d,a | W OR f -> (d) | 1 | 0001 00da ffff ffff | Z,N |
movf......f, d,a | Mover f -> (d) | 1 | 0101 00da ffff ffff | Z,N |
movff....fs, fd | Mover fs -> fd | 2 | 1100 ffff ffff ffff 1111 ffff ffff ffff | Ninguno |
movwf....f,a | W -> (f) | 1 | 0110 111a ffff ffff | Ninguno |
mulwf....f,a | f * W | 1 | 0000 001a ffff ffff | Ninguno |
negf........f,a | #f -> (f) | 1 | 0110 110a ffff ffff | C, DC, Z, OV, N |
rlcf.........f, d,a | Rotar Izquierda f -> (d) | 1 | 0011 01da ffff ffff | C, Z, N |
rlncf......f, d,a | Rotar Izquierda f sin Carry-> (d) | 1 | 0100 01da ffff ffff | Z, N |
rrcf........f, d,a | Rotar Derecha f -> (d) | 1 | 0011 00da ffff ffff | C, Z, N |
rrncf.....f, d,a | Rotar Derecha f sin Carry -> (d) | 1 | 0100 00da ffff ffff | Z, N |
setf........f, a | f = 1 | 1 | 0110 100a ffff ffff | Ninguno |
subfwb.f, d | f - W - C -> (d) | 1 | 0101 01da ffff ffff | C, DC, Z, OV, N |
subwf....f, d | W - f -> (d) | 1 | 0101 11da ffff ffff | C, DC, Z, OV, N |
subwfb.f, d | W - f - C -> (d) | 1 | 0101 10da ffff ffff | C, DC, Z, OV, N |
swapf....f, d,a | Msb -> Lsb -> (d) | 1 | 0011 10da ffff ffff | Ninguno |
tstfsz....f, a | Comprueba f, salta si f = 0 | 1 (2 o 3) | 0110 011a ffff ffff | Ninguno |
xorwf....f, d,a | W XOR f -> (d) | 1 | 0001 10da ffff ffff | Z, N |
Operaciones de tamaño bit.
Son las denominadas, en anglosajón, Bit-Oriented File Register Operations, consisten en las instrucciones tamaño bit de los registros y el lugar de almacenar la operación correspondiente, en un literal, denominado 'f', o en una dirección de memoria correspondiente al bit del registro, denominado 'b'.
El set de instrucciones es el que se muestra en la siguiente tabla.
Operador | Descripción | Ciclos de Reloj | Operador 16-bit | Flags Afectados |
---|---|---|---|---|
bcf...........f, b,a | f = 0 -> (b) | 1 | 1001 bbba ffff ffff | Ninguno |
bsf...........f, b,a | f = 1 -> (b) | 1 | 1000 bbba ffff ffff | Ninguno |
btfsc.......f, b,a | Salta si f = 0 | 1 (2 o 3) | 1011 bbba ffff ffff | Ninguno |
btfss.......f, b,a | Salta si f = 1 | 1 (2 o 3) | 1010 bbba bfff ffff | Ninguno |
btg..........f, b,a | Invertir bit de f | 1 | 0111 bbba bfff ffff | Ninguno |
Operaciones de control.
Son las denominadas, en anglosajón, Control Operations, consisten en las instrucciones que se encargan del sentido del flujo del programa, así cómo de gobernar la pila entre otras funciones.
El set de instrucciones es el que se muestra en la siguiente tabla.
Operador | Descripción | Ciclos de Reloj | Operador 16-bit | Flags Afectados |
---|---|---|---|---|
bc...............n | Salta si C = 1 | 1 (2) | 1110 0010 nnnn nnnn | Ninguno |
bn............n | Salta si es negativo | 1 (2) | 1110 0110 nnnn nnnn | Ninguno |
bnc.............n | Salta si C = 0 | 1 (2) | 1110 0011 nnnn nnnn | Ninguno |
bnn............n | Salta si no es negativo | 1 (2) | 1110 0111 nnnn nnnn | Ninguno |
bnov..........n | Salta si no hay desbordamiento | 1 (2) | 1110 0101 nnnn nnnn | Ninguno |
bnz.............n | Salta si no es cero | 1 (2) | 1110 0001 nnnn nnnn | Ninguno |
bov.............n | Salta si hay desbordamiento | 1 (2) | 1110 0100 nnnn nnnn | Ninguno |
bra...........n | Salta a n | 2 | 1101 0nnn nnnn nnnn | Ninguno |
bz................n | Salta si es cero | 1 (2) | 1110 0000 nnnn nnnn | Ninguno |
call..........n,s | LLamada a subrutina | 2 | 1110 110s kkkk kkkk 1111 kkkk kkkk kkkk | Ninguno |
clrwdt........- | Limpia watchdog | 1 | 0000 0000 0000 0100 | #TO, #PD |
daw..........- | Ajuste decimal W | 1 | 0000 0000 0000 0111 | C, DC |
goto............k | Ir a n | 2 | 1110 1111 kkkk kkkk 1111 kkkk kkkk kkkk | Ninguno |
nop..........- | Sin operación | 1 | 0000 0000 0000 0000 | Ninguno |
pop..........- | Apilar datos en la pila | 1 | 0000 0000 0000 0110 | Ninguno |
push........- | Desapilar datos de la pila | 1 | 0000 0000 0000 0101 | Ninguno |
rcall........n | LLamada relativa a n | 2 | 1101 1nnn nnnn nnnn | Ninguno |
reset | Reset por software | 1 | 0000 0000 1111 1111 | Todos |
retfie.......s | Salida de una subrutina de interrupción | 2 | 0000 0000 0001 000s | GIE/GIEH, PEIE/GIEL |
retlw.......k | Salida de una subrutina con literal en W | 2 | 0000 1100 kkkk kkkk | Ninguno |
return.....s | Salida de una subrutina | 2 | 0000 0000 0001 001s | Ninguno |
sleep.......- | Entrada en modo Standby | 1 | 0000 0000 0000 0011 | #TO, #PD |
Operaciones con Literales.
Son las denominadas, en anglosajón, Literal Operations, consisten en las instrucciones que se encargan del manejo de literales.
El set de instrucciones es el que se muestra en la siguiente tabla.
Operador | Descripción | Ciclos de Reloj | Operador 16-bit | Flags Afectados |
---|---|---|---|---|
addlw........k | k + W -> (W) | 1 | 0000 1111 kkkk kkkk | C, DC, Z, OV, N |
andlw......k | k AND W -> (W) | 1 | 0000 1011 kkkk kkkk | Z,N |
iorlw.........k | k OR W -> (W) | 1 | 0000 1001 kkkk kkkk | Z,N |
lfsr............f,k | k -> f | 1 | 1110 1110 00ff kkkk 0000 1001 kkkk kkkk | Ninguno |
movlb.......k | k -> BSR<.3:0.> | 1 | 0000 0001 0000 kkkk | Ninguno |
movlw......k | k -> W | 1 | 0000 1110 kkkk kkkk | Ninguno |
mullw......k | k * W -> (W) | 1 | 0000 1101 kkkk kkkk | Ninguno |
retlw.......k | Salida de subrutina con literal k en W | 2 | 0000 1100 kkkk kkkk | Ninguno |
sublw........k | k - W -> W | 1 | 0000 1000 kkkk kkkk | C, DC, Z, OV, N |
xorlw......k | k XOR W -> (W) | 1 | 0000 1010 kkkk kkkk | Z,N |
Operaciones con Datos de memoria y Memoria de Programa.
Son las instrucciones de manejo de tablas, ya sean en memoria de programa o en memoria ram de datos.
El set de instrucciones es el que se muestra en la siguiente tabla.
Operador | Descripción | Ciclos de Reloj | Operador 16-bit | Flags Afectados |
---|---|---|---|---|
TBLRD* | Lectura de tabla | 2 | 0000 0000 0000 1000 | Ninguno |
TBLRD*+ | Lectura de tabla con postincremento | 0000 0000 0000 1001 | Ninguno | |
TBLRD*- | Lectura de tabla con postdecremento | 0000 0000 0000 1010 | Ninguno | |
TBLRD+* | Lectura de tabla con preincremento | 0000 0000 0000 1011 | Ninguno | |
TBLWT* | Escritura en tabla | 2 (5) | 0000 0000 0000 1100 | Ninguno |
TBLWT*+ | Escritura en tabla con postincremento | 0000 0000 0000 1101 | Ninguno | |
TBLWT*- | Escritura en tabla con postdecremento | 0000 0000 0000 1110 | Ninguno | |
TBLWT+* | Escritura en tabla con preincremento | 0000 0000 0000 1111 | Ninguno |
Nota: El carácter # significa señal negada.
0 comentarios:
Publicar un comentario