Repertorio 35 instrucciones-MPLAB-Assembler
Notas:
- Al modificar un registro de E/S con una operación sobre él mismo (por ejemplo MOVF PORTB,1), el valor utilizado es el que se halle presente en las patillas del PORTB. Por ejemplo, si el biestable tiene un "1" para una patilla configurada como entrada y se pone a nivel bajo desde el exterior, el dato se volverá a escribir como "0".
- Si se ejecuta esta instrucción sobre el TMR0 y d=1, se borrará el conteo de la preescala asignada (preescaler), si está asignado al TMR0, pero no se borrará la preescala asignada en OPTION_REG, que controla Timer0.
- Si se modifica el Contador de Programa PC o una condición de prueba es verdadera, la instrucción requiere dos ciclos máquina. El segundo ciclo se ejecuta como un NOP.
En las tablas siguientes, por orden alfabético, veremos todos los datos de interés sobre las 35 instrucciones.
Algunos son de poca importancia. En cambio otros, como la
operación, la sintaxis, el comportamiento del registro STATUS y los
ejemplos, son imprescindibles para comprender su funcionamiento.
Repertorio 35 instrucciones:
Las 35 instrucciones ó mnemónicos de la gama media de Microchip las encontraremos resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Z los flags del registro STATUS.
Instrucciones orientadas a registros | ||||||
MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
ADDWF | f,d | w + f → d | 00 0111 dfff ffff | C, DC, Z | 1 | 1,2 |
ANDWF | f,d | w AND f → d | 00 0101 dfff ffff | Z | 1 | 1,2 |
CLRF | f | 00 h → f | 00 0001 1fff ffff | Z | 1 | 2 |
CLRW | - | 00 h → w | 00 0001 0xxx xxxx | Z | 1 | - |
COMF | f,d | Complemento de f → d | 00 1001 dfff ffff | Z | 1 | 1,2 |
DECF | f,d | f - 1 → d | 00 0011 dfff ffff | Z | 1 | 1,2 |
DECFSZ | f,d | f - 1 → d (si es 0 salta) | 00 1011 dfff ffff | Ninguna | 1(2) | 1,2,3 |
INCF | f,d | f + 1 → d | 00 1010 dfff ffff | Z | 1 | 1,2 |
INCFSZ | f,d | f + 1 → d (si es 0 salta) | 00 1111 dfff ffff | Ninguna | 1(2) | 1,2,3 |
IORWF | f,d | w OR f → d | 00 0100 dfff ffff | Z | 1 | 1,2 |
MOVF | f,d | f → d | 00 1000 dfff ffff | Z | 1 | 1,2 |
MOVWF | f | w → f | 00 0000 1fff ffff | Ninguna | 1 | - |
NOP | - | No operación | 00 0000 0xx0 0000 | Ninguna | 1 | - |
RLF | f,d | Rota f izq por carry → d | 00 1101 dfff ffff | C | 1 | 1,2 |
RRF | f,d | Rota f dcha por carry → d | 00 1100 dfff ffff | C | 1 | 1,2 |
SUBWF | f,d | f - w → d | 00 0010 dfff ffff | C,DC,Z | 1 | 1,2 |
SWAPF | f,d | Intercambia nibbles de f → d | 00 1110 dfff ffff | Ninguna | 1 | 1,2 |
XORWF | f,d | w XOR f → d | 00 0110 dfff ffff | Z | 1 | 1,2 |
Instrucciones orientadas a bit | ||||||
MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
BCF | f,b | Pone a 0 bit b de registro f | 01 00bb bfff ffff | Ninguna | 1 | 1,2 |
BSF | f,b | Pone a 1 bit b de registro f | 01 01bb bfff ffff | Ninguna | 1 | 1,2 |
BTFSC | f,b | Salto si bit b de reg. f es 0 | 01 10bb bfff ffff | Ninguna | 1(2) | 3 |
BTFSS | f,b | Salto si bit b de reg. f es 1 | 01 11bb bfff ffff | Ninguna | 1(2) | 3 |
Instrucciones con literales y de control | ||||||
MNEMÓNICO OPERANDOS |
DESCRIPCIÓN | CÓDIGO OP | BANDERAS | NCIC | NOTAS | |
ADDLW | k | w + k → w | 11 111x kkkk kkkk | C,DC,Z | 1 | - |
ANDLW | k | w AND k → w | 11 1001 kkkk kkkk | Z | 1 | - |
CALL | k | Llamada a subrutina k | 10 0kkk kkkk kkkk | Ninguna | 2 | - |
CLRWDT | - | Borra temporizador del WDT | 00 0000 0110 0100 | TO,PD | 1 | - |
GOTO | k | Ir a dirección k | 10 1kkk kkkk kkkk | Ninguna | 2 | - |
IORLW | k | w OR k → w | 11 1000 kkkk kkkk | Z | 1 | - |
MOVLW | k | k → w | 11 00xx kkkk kkkk | Ninguna | 1 | - |
RETFIE | - | Retorno de una interrupción | 00 0000 0000 1001 | Ninguna | 2 | - |
RETLW | k | Retorno con k en w | 11 01xx kkkk kkkk | Ninguna | 2 | - |
RETURN | - | Retorno de una subrutina | 00 0000 0000 1000 | Ninguna | 2 | - |
SLEEP | - | Modo Standby | 00 0000 0110 0011 | TO, PD | 1 | - |
SUBLW | k | k - w → w | 11 110x kkkk kkkk | C,DC,Z | 1 | - |
XORLW | k | w XOR k → w | 11 1010 kkkk kkkk | Z | 1 | - |
Instrucciones especiales:
Existe un conjunto de instrucciones especiales diseñadas para
facilitar las operaciones a la hora de diseñar nuestros algoritmos.
Estas instrucciones pueden ser implementadas con una, dos o tres de las
instrucciones de la gama media. La mayoría de ellas se basa en las
operaciones con los acarreos y con los bits del registro status en
general.
Este cuadro sólo debe servir de referencia y se recomienda usar
la forma equivalente del repertorio de instrucciones, no obstante,
pueden encontrarse programas que los utilicen. Por supuesto con estos
algoritmos, aunque utilicen una sola expresión, no vamos disminuir los
ciclos máquina necesarios.
Mnemónico Parámetros |
Descripción | Traducción | Operación Equivalente |
Flag | |
ADDCF | f, d | Add Carry to File | Sumar acarreo a f | BTFSC 3,0 INCF f,d |
Z |
ADDDCF | f, d | Add Digit Carry to File | Sumar acarreo de digito a f | BTFSC 3,1 INCF f,d |
Z |
B | K | Branch | Saltar a una etiqueta | GOTO k | - |
BC | K | Branch on Carry | Saltar a una etiqueta si hay acarreo | BTFSC 3,0 GOTO k |
- |
BDC | K | Branch on Digit Carry | Saltar a una etiqueta si hay acarreo de digito | BTFSC 3,1 GOTO k |
- |
BNC | K | Branch on No Carry | Saltar a una etiqueta si no hay acarreo | BTFSS 3,0 GOTO k |
- |
BNDC | K | Branch on No Digit Carry | Saltar a una etiqueta si no hay acarreo de digito | BTFSS 3,1 GOTO k |
- |
BNZ | K | Branch on No Zero | Saltar a una etiqueta si no hay cero | BTFSS 3,2 GOTO k |
- |
BZ | K | Branch on Zero | Saltar a una etiqueta si hay cero | BTFSC 3,2 GOTO k |
- |
CLRC | Clear Carry | Poner a cero acarreo | BCF 3,0 | - | |
CLRDC | Clear Digit Carry | Poner a cero acarreo de digito | BCF 3,1 | - | |
CLRZ | Clear Zero | Poner a cero el flag Zero | BCF 3,2 | - | |
LCALL | K | Long CALL | Llamada larga a una etiqueta | BSF/BCF 0A,3 BSF/BCF 0A,4 CALL k |
- |
LGOTO | K | Long GOTO | Salto largo a una etiqueta | BSF/BCF 0A,3 BSF/BCF 0A,4 GOTO k |
- |
MOVFW | F | Move File to W | Mover registro a W | MOVF f,0 | Z |
NEGF | f, d | Negate File | Negar un registro | COMF f,1 INCF f,d |
Z |
SETC | Set Carry | Poner a uno el acarreo | BSF 3,0 | - | |
SETDC | Set Digit Carry | Poner a uno el acarreo de digito | BSF 3,1 | - | |
SETZ | Set Zero | Poner a uno el Zero | BSF 3,2 | - | |
SKPC | Skip on Carry | Saltar si hay acarreo | BTFSS 3,0 | - | |
SKPDC | Skip on Digit Carry | Saltar si hay acarreo de digito | BTFSS 3,1 | - | |
SKPNC | Skip on No Carry | Saltar si no hay acarreo | BTFSC 3,0 | - | |
SKPNDC | Skip on No Digit Carry | Saltar si no hay acarreo de digito | BTFSC 3,1 | - | |
SKPNZ | Skip on Non Zero | Saltar si no hay Zero | BTFSC 3,2 | - | |
SKPZ | Skip on Zero | Saltar si hay Zero | BTFSS 3,2 | - | |
SUBCF | f,d | Substract Carry from File | Restar acarreo del registro | BTFSC 3,0 DECF f,d |
Z |
SUBDCF | f,d | Substract Digit Carry from File | Restar acarreo de dígito del registro | BTFSC 3,1 DECF f,d |
Z |
TSTF | f | Test File | Probar registro | MOVF f,1 | Z |
(IMAGENES-Juego de instrucciones-Ensamblador/Descarga)
Fuente:
Recreateoficial
Electrónica