You are on page 1of 23

INSTITUTO UNIVERSITARIO DE TECNOLOGÍA

Antonio José de Sucre


GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador

Set de Instrucciones del PIC16F84

Para los PIC se han creado unas instrucciones y una estructura de programa que los hacen más
sencillos. Las instrucciones de los microcontrolador PIC cumplen con las siguientes condiciones:
1) Juego de instrucciones reducido (RISC): Por ejemplo, solo existen 35 instrucciones en el
PIC16F84A.
2) Sencillas y rápidas: La mayoría se ejecuta en un ciclo de instrucción, y solo las de salto precisan
2 ciclos. El ciclo de instrucción consta de 4 ciclos de reloj principal. De esta manera un dispositivo
con un cristal de cuarzo de 4 MHz realiza 1 millón de instrucciones por segundo.
3) Ortogonalidad: La ubicación de los operandos que manejan es muy flexible. Cualquier objeto del
procesador puede actuar como origen o como destino.
4) Formato uniforme de las instrucciones: Todas las instrucciones tienen una longitud fija de bits.
Esta característica significa un notable ahorro de la memoria de programa y una facilidad en la
construcción de compiladores.
5) Formato uniforme de los datos. Todas los datos que maneja la memoria Ram tienen una longitud
fija de 8 bits
Un programa es una serie de instrucciones mediante las cuales un sistema basado en CPU realiza
una tarea en particular y la forma más simple de realizar un programa es mediante el lenguaje
ensamblador. El lenguaje ensamblador "es complejo por su sencillez". Esto quiere decir que, a
diferencia de los lenguajes de alto nivel, aquí no hay funciones que solucionen y simplifiquen
algoritmos, si no que hay que implementar hasta los pasos más elementales. Las intrucciones en
ensamblador contienen:
f: Registro al que afecta la instrucción
W: Acumulador (Working register)
b: Número de bit (hay instrucciones que afectan a un solo bit)
k: constante (un número)
d: selección de destino del resultado de la instrucción, puede ser "0" o "1", si es "0" el resultado se
guarda en el acumulador (W) y si es "1" se guarda en el registro f al que afecta la instrucción.

Un programa en código fuente es un fichero ASCII con extensión ASM que está formado por 4
columnas para identificar las diferentes funciones:
Etiquetas: Dan nombre a determinadas partes del programa (hasta 32 caracteres)
Instrucciones: Son las instrucciones que se pasan al microcontrolador o una DIRECTIVA al
ensamblador.
Datos: Datos u operandos para las instrucciones.
Comentarios: Siempre después de un “;” son descripciones para hacer más legible el listado.

INSTRUCCIONES ASM DEL PIC16F84

Instrucciones orientadas a los bytes


Mnemónico Parámetros Descripción N° Ciclos Banderas
ADDWF f, d Add W and f 1 C, DC, Z
ANDWF f, d AND W with f 1 Z
CLRF f Clear f 1 Z
CLRW - Clear W 1 Z
COMF f, d Complement f 1 Z
DECF f, d Decrement f 1 Z
Microprocesadores Ing. Verónica Pérez 1
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
DECFSZ f, d Decrement f, Skip if 0 1(2) None
INCF f, d Increment f 1 Z
INCFSZ f, d Increment f, Skip if 0 1(2) None
IORWF f, d Inclusive OR W with f 1 Z
MOVF f, d Move f 1 Z
MOVWF f Move W to f 1 None
NOP - No Operation 1 None
RLF f, d Rotate left f through carry 1 C
RRF f, d Rotate right f through carry 1 C
SUBWF f, d Subtract W from f 1 C, DC, Z
SWAPF f, d Swap nibbles in f 1 None
XORWF f, d Exclusive OR W with f 1 Z

Instrucciones orientadas a los bits


Mnemónico Parámetros Descripción N° Ciclos Banderas
BCF f, b Bit Clear f 1 None
BSF f, b Bit Set f 1 None
BTFSC f, b Bit Test f, Skip if Clear 1 (2) None
BTFSS f, b Bit Test f, Skip if Set 1 (2) None

Operaciones con literales y de control


Mnemónico Parámetros Descripción N° Ciclos Banderas
ADDLW k Add literal and W 1 C, DC, Z
ANDLW k AND literal with W 1 Z
CALL k Call subroutine 2
CLRWDT - Clear Watchdog Timer 1 TO,PD
GOTO k Go to address 2 None
IORLW k Inclusive OR literal with W 1 Z
MOVLW k Move literal to W 1 None
RETFIE - Return from interrupt 2 None
RETLW k Return with literal in W 2 None
RETURN - Return from Subroutine 2 None
SLEEP - Go into standby mode 1 TO,PD
SUBLW k Subtract W from literal 1 C, DC, Z
XORLW k Exclusive OR literal with W 1 Z

Microprocesadores Ing. Verónica Pérez 2


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador

DE CONTROL Y MANEJO DE LITERALES.


INSTRUCCIÓN: ADDLW k (hex = 3E kk)
Descripción: Sumar al acumulador el valor k.
Operación: W=W+k
Esta instrucción suma un valor de un literal al contenido del registro “W” y lo
guarda en “W”.
Ejemplo: MOVLW 3 ; carga el acumulador W con el valor 3.
ADDLW 1 ; suma 1 al acumulador.
Al final el acumulador tendrá el valor 4.
Registro STATUS: Modifica los bits Z, DC y C.
 Z vale 1 si el resultado de la operación es 0.
 DC vale 1 si el resultado de la operación es un número superior a 15.
 C vale 1 si el resultado de la operación es positivo o el bit 7 del registro
que contiene el resultado vale 0. En caso contrario C vale 0 (resultado
negativo).

INSTRUCCIÓN: ANDLW k (hex = 39 kk)


Descripción: Operación lógica AND entre el acumulador W y el literal k
Operación: W = W AND k
Esta instrucción realiza una operación lógica AND entre el contenido de “W” y
k. El resultado se guarda siempre en el acumulador “W”
Ejemplo: Si cargamos el acumulador con el binario 10101010B y hacemos un AND con
el binario 11110000B, nos quedará el resultado de la operación en el
acumulador “W”.
MOVLW 10101010B
ANDLW 11110000B
El resultado de la operación queda en “W” = 10100000B.

Explicación de la operación AND:


Tenemos 4 posibles combinaciones entre dos bits
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
Vemos que solamente en el caso de que ambos bits sean 1, el resultado será
1. Esta instrucción compara dos bytes, bit a bit.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: CALL k (hex = 2k kk)


Descripción: Llama a una subrutina en la dirección k.
Operación: CALL  k...RETURN  PC+1.
Esta instrucción llama a un grupo de instrucciones (subrutina) que comienzan
en la dirección k, donde k puede ser un valor numérico o una etiqueta.
Siempre termina con la instrucción de retorno (RETURN o RETLW).
Microprocesadores Ing. Verónica Pérez 3
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Definición de subrutina: son un grupo de instrucciones que forman un
programa dentro del programa principal y que se ejecutan cuando las llama el
programa principal.
Utilidad: sirven para utilizarlas varias veces en cualquier parte del programa,
sin necesidad de tener que copiar las mismas instrucciones, con el
consiguiente ahorro de memoria.
Funcionamiento: cuando un programa ejecuta una instrucción CALL, guarda
en el stack el valor del registro PC+1 (PC = Program Counter) de manera que
al regresar de la subrutina continúa con la instrucción siguiente recuperándola
del stack, ejecutando la instrucción de retorno RETURN o RETLW.

Limitaciones: en el PIC16F84 tenemos disponibles 8 niveles de stack, por


lo que el número máximo de CALL reentrantes (instrucciones CALL que
contengan otra instrucción CALL) queda limitado a 8.
Ejemplo: PRINCIPAL: etiqueta que identifica una dirección de memoria.
RETARDO: etiqueta que identifica el comienzo de una subrutina.
BUCLE: etiqueta que identifica una dirección de memoria.

PRINCIPAL CALL RETARDO


BTFSC PORTB, RB0
GOTO PRINCIPAL
*
*
*
RETARDO CLRF CONTADOR
BUCLE DECFSZ CONTADOR, 1
GOTO BUCLE
RETURN

En este listado vemos que la subrutina RETARDO salta a un grupo de


instrucciones que forman un bucle y cuando éste termina regresa para seguir
con la instrucción siguiente al salto (BTFSC...).
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: CLRWDT (hex = 00 64)


Descripción: Pone el temporizador WDT a cero.
Operación: WDT = 0
Esta instrucción se utiliza cuando programamos el PIC con la opción Watch
Dog habilitada. Para evitar el reset del PIC, el programa debe contener
cíclicamente la instrucción CLRWDT para ponerlo a cero. Si no se pone a
cero a tiempo, el WDT interpretará que se ha bloqueado el programa y
ejecutará un reset para desbloquearlo.
Ejemplo: Bucle CLRWDT
*
*
*
GOTO Bucle

Registro STATUS: No modifica ningún bit de estado.

Microprocesadores Ing. Verónica Pérez 4


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
INSTRUCCIÓN: GOTO k (hex = 28 kk)
Descripción: Salto incondicional a k.
Operación: Salto  k
Esta instrucción ejecuta un salto del programa a la dirección k. El parámetro
“k” puede ser un valor numérico o una etiqueta.
Ejemplo: INSTRUCCIÓN 1
GOTO ABAJO
INSTRUCCIÓN 3
INSTRUCCIÓN 4
INSTRUCCIÓN 5
ABAJO INSTRUCCIÓN 6

Primero se ejecuta la instrucción 1, después GOTO y continúa con la


instrucción 6 saltándose las instrucciones 3, 4 y 5.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: IORLW k (hex = 38 kk)


Descripción: Operación lógica OR entre el acumulador W y el literal k
Operación: W = W OR k
Esta instrucción realiza un OR inclusivo entre el contenido del acumulador “W”
y el literal k. El resultado se guarda siempre en el acumulador (“k” es un valor,
no un registro).
Ejemplo: Si cargamos el acumulador con el binario 11110000B y k= 00001111B, nos
quedará el resultado de la operación en el acumulador “W”.
MOVLW 11110000B
IORLW 00001111B
El resultado de la operación queda en “W” = 11111111B.

Explicación de la operación OR:


Tenemos 4 posibles combinaciones entre dos bits
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
Vemos que solamente en el caso de que ambos bits sean 0, el resultado será
0. Esta instrucción compara dos bytes, bit a bit.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: MOVLW k (hex = 30 kk)


Descripción: Mover el literal k al acumulador.
Operación: W=k
Esta instrucción asigna al acumulador “W” el valor del literal k (entre 0 y 255).
Ejemplo: Si tenemos el acumulador a cero o con cualquier valor, y queremos que
contenga el que le asignemos nosotros directamente entonces usaremos esta
instrucción:
Microprocesadores Ing. Verónica Pérez 5
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
W = 0.
Valor a asignar = 100.
Instrucción: MOVLW 100
El acumulador valdrá 100 (W = 100).

Con distinto valor de partida del acumulador:


W = 225.
MOVLW 100
El acumulador valdrá 100 (W = 100).
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: RETFIE (hex = 00 09)


Descripción: Retorna de una interrupción.
Operación: FIN INTERRUPCION.
Esta instrucción devuelve el control al programa principal después de
ejecutarse una subrutina de gestión de interrupción.
Ejemplo: ORG 00H
BUCLE GOTO BUCLE ; bucle infinito.
ORG 04H; vector de interrupción.
RETFIE ; retorna de la interrupción

Este código de programa ejecuta un bucle infinito. Si habilitamos una de las


interrupciones del 16F84, en cuanto ésta se produzca pasará el control al
programa situado en la dirección 04H y la instrucción RETFIE regresa de la
interrupción.
Al ejecutarse una interrupción, el bit GIE del registro INTCON se pone a 0 y
así evita que otra interrupción se produzca mientras ya está con una en
marcha.
Con la instrucción RETFIE ponemos de nuevo el bit GIE a 1 para así atender
de nuevo a futuras interrupciones.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: RETLW (hex = 34 kk)


Descripción: Retorno de subrutina y carga literal k en el acumulador.
Operación: RETORNO con W = k.
Esta instrucción retorna de una subrutina al programa principal, cargando el
acumulador “W” con el literal “k”.
Es la última instrucción que forma una subrutina (al igual que RETURN).
¿Y para qué me sirve regresar de una subrutina con un determinado literal en
el acumulador? Nos será muy útil al programar con TABLAS.
Ejemplo: CALL SUBRUT1 ; llama a Subrut1.
MOVWF DATO 1 ; carga W en Dato1.
CALL SUBRUT2 ; llama a Subrut2.
MOVWF DATO2 ; carga W en Dato2.
*
*
SUBRUT1 RETLW 0A ; carga W = 0A y retorna.
SUBRUT2 RETLW 0B ; carga W = 0B y retorna.

Microprocesadores Ing. Verónica Pérez 6


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: RETURN (hex = 00 08)


Descripción: Retorno de subrutina.
Operación: RETORNO.
Esta instrucción retorna de una subrutina al programa principal en la
instrucción siguiente a la llamada de la subrutina, tomando el valor
almacenado en el stack para continuar.
Es la última instrucción que forma una subrutina (al igual que RETLW).

Ejemplo: CALL COMPARA ; llama a Compara.


INSTRUCCION1
INSTRUCCION2
*
*
COMPARA INSTRUCCIÓN R1
INSTRUCCIÓN R2
RETURN

Aquí llamamos a la subrutina COMPARA, se ejecutan las instrucciones R1 y


R2 y con el RETURN regresa a la instrucción siguiente al CALL y ejecuta las
instrucciones 1, 2 y sigue con el programa.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: SLEEP (hex = 00 63)


Descripción: En modo reposo..
Operación: EN ESPERA.
Esta instrucción detiene la ejecución del programa y deja el PIC en modo
suspendido.
No ejecuta ninguna instrucción hasta que sea nuevamente reinicializado
(reset).
Durante este modo, el contador del Watch Dog (WDT) sigue trabajando, y si
lo tenemos activado el PIC se reseteará por este medio.
El consumo de energía es mínimo.
Ejemplo:
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: SUBLW k (hex = 3C kk)


Descripción: Resta al literal k el valor del acumulador.
Operación: W=k-W
Esta instrucción resta al literal k el valor almacenado en el acumulador “W” y
el resultado se guarda en el acumulador.
Ejemplo: MOVLW 10 ; carga el acumulador W con el valor 10.
SUBLW 15 ; resta a 15 el valor del acumulador.
Al final el acumulador tendrá el valor W = 5.
Registro STATUS: Modifica los bits Z, DC y C.
 Z vale 1 si el resultado de la operación es 0.
Microprocesadores Ing. Verónica Pérez 7
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
 DC vale 1 si el resultado de la operación es un número superior a 15.
 C vale 1 si el resultado de la operación es positivo o el bit 7 del registro
que contiene el resultado vale 0. En caso contrario C vale 0 (resultado
negativo).

INSTRUCCIÓN: XORLW k (hex = 3A kk)


Descripción: Operación lógica OR exclusivo entre el acumulador y el literal k
Operación: W = W XOR k
Esta instrucción realiza un OR exclusivo entre el contenido del acumulador
“W” y el valor del literal k. El resultado se guarda siempre en el acumulador (k
es un literal, no un registro).
Ejemplo: Si cargamos el acumulador con el binario 11110000B y hacemos un XOR con
el binario 10101010B, nos quedará el resultado de la operación en el
acumulador “W”.
MOVLW 11110000B
XORLW 10101010B
El resultado de la operación queda en “W” = 01011010B.

Explicación de la operación XOR:


Tenemos 4 posibles combinaciones entre dos bits
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Vemos que si ambos bits son iguales el resultado será 0. Y si ambos son
diferentes, el resultado será 1. Esta instrucción compara dos bytes, bit a bit.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

2.1.2.ORIENTADAS A REGISTROS.

INSTRUCCIÓN: ADDWF f,d (hex = 07 ff)


Descripción: Suma el acumulador y el registro “f”.
Operación: d = W + f (d puede ser W ó f).
Esta instrucción suma el contenido del acumulador con el registro “f”, y el
resultado se guarda dependiendo del valor de “d”.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si tomamos como valores iniciales W = 5 y DATO = 10.
ADDWF DATO ; DATO = 15 y W = 5.
ADDWF DATO, 1; DATO = 15 y W = 5.
ADDWF DATO, 0; W = 15 y DATO = 10.
ADDWF DATO, W; W = 15 y DATO = 10.
Registro STATUS: Modifica los bits Z, DC y C.
 Z vale 1 si el resultado de la operación es 0.
 DC vale 1 si el resultado de la operación es un número superior a 15.
 C vale 1 si el resultado de la operación es positivo o el bit 7 del registro
Microprocesadores Ing. Verónica Pérez 8
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
que contiene el resultado vale 0. En caso contrario C vale 0 (resultado
negativo).

INSTRUCCIÓN: ANDWF f,d (hex = 05 ff)


Descripción: Operación lógica AND entre el acumulador y el registro f.
Operación: d = W AND f (d puede ser “W” o “f”).
Esta instrucción realiza una operación lógica AND entre el contenido del
acumulador “W” y el registro “f”. El resultado se guarda según sea el valor de
“d”.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si queremos extraer los 4 bits menos significativos de un registro, podremos
utilizar una máscara para obtenerlos.
Usamos el valor 00001111B para realizar la operación ADN y así obtenerlos
(para los 4 bits más significativos utilizaríamos el valor 11110000B).
Cargamos el valor del cual queremos extraer los 4 bits menos significativos en
“f” (f = 10101010B).
Cargamos el acumulador con la máscara (W = 00001111B).
ANDWF f,W
El resultado queda guardado en el acumulador (W = 00001010B).

Explicación de la operación AND:


Tenemos 4 posibles combinaciones entre dos bits
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
Vemos que solamente en el caso de que ambos bits sean 1, el resultado será
1. Esta instrucción compara dos bytes, bit a bit.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: CLRF f (hex = 01 8f)


Descripción: Pone a cero el registro “f”.
Operación: F = 0.
Esta instrucción pone a cero el valor contenido en el registro direccionado por
el parámetro “f”. Puede decirse que borra el registro “f”.
Ejemplo: Si queremos poner a cero el registro TMR0, cuya dirección es 01H,
tendríamos que utilizar
CLRF 01H
Si hemos incluido al inicio del código fuente el fichero PIC16F84.INC,
podemos utilizar el nombre simbólico de dicho registro:
CLRF TMR0
Registro STATUS: Modifica el bit Z y lo pone a 1 (ya que el resultado de la operación es 0).

INSTRUCCIÓN: CLRW (hex = 01 00)


Descripción: Pone el acumulador a cero.

Microprocesadores Ing. Verónica Pérez 9


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Operación: W=0
Esta instrucción pone a cero el valor contenido en el registro “W”
(acumulador)
Ejemplo: No es necesario…

Registro STATUS: Modifica el bit Z y lo pone a 1 (ya que el resultado de la operación es 0).

INSTRUCCIÓN: COMF f,d (hex = 09 ff)


Descripción: Complementa el registro “f”.
Operación: d = NOT f (d puede ser “W” ó “f”).
Esta instrucción efectúa el complemento del valor contenido en el registro
direccionado por el parámetro “f”.
La operación de complementar consiste en invertir los bits: poner los ceros a
unos y los unos a ceros.
El parámetro “d” determina el destino del valor obtenido.
Si d = “W”, el resultado se almacena en el acumulador.
Si d = “f”, el resultado se almacena en el propio registro “f”.
Ejemplo: Si tenemos en PORTA el valor 00001111B, al ejecutar:
COMF PORTA
El resultado será PORTA = 11110000B.
Si aplicamos para el mismo valor inicial, la instrucción:
COMF PORTA, W
El resultado será W = 11110000B y PORTA = 00001111B.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: DECF f,d (hex = 03 ff)


Descripción: Decrementa en 1 el registro “f”.
Operación: d = f – 1 (d puede ser “W” ó “f”).
Esta instrucción decrementa en uno el contenido del registro direccionado por
el parámetro “f”. El parámetro “d” determina el destino del valor obtenido.
Si d = “W”, el resultado se almacena en el acumulador.
Si d = “f”, el resultado se almacena en el propio registro “f”.
Ejemplo: Si tenemos un registro DIA = 7.
Aplicando la instrucción
DECF DIA, 0, tendremos W = 6 y DIA = 7.
Si aplicamos esta otra
DECF DIA, 1, tendremos DIA = 6.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: DECFSZ f,d (hex = 0B ff)


Descripción: Decrementa en 1 a “f”, y si “f” = 0 salta la siguiente instrucción.
Operación: d = f – 1, si d = 0 SALTA (d puede ser “W” ó “f”).
Esta instrucción decrementa el contenido del registro direccionado por el
parámetro “f”, y si el resultado es 0 se salta la instrucción siguiente. El
Microprocesadores Ing. Verónica Pérez 10
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
parámetro “d” determina el destino del valor obtenido.
Si d = “W”, el resultado se almacena en el acumulador.
Si d = “f”, el resultado se almacena en el propio registro “f”.
Ejemplo: DECFSZ VALOR, W
INSTRUCCION 1
INSTRUCCIÓN 2

Si el contenido del registro “VALOR” al decrementarlo en 1 es igual a 0, se


guarda el resultado en el acumulador y sigue con la INSTRUCCION2,
saltándose la INSTRUCCION1.
Si el resultado que guardamos en W no es 0, sigue con la INSTRUCCION1 y
después con la INSTRUCCION2 (no se salta la inmediata siguiente).
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: INCF f,d (hex = 0A ff)


Descripción: Incrementa en 1 el registro “f”.
Operación: d = f + 1 (d puede ser “W” ó “f”).
Esta instrucción incrementa en uno el contenido del registro direccionado por
el parámetro “f”. El parámetro “d” determina el destino del valor obtenido.
Si d = “W”, el resultado se almacena en el acumulador.
Si d = “f”, el resultado se almacena en el propio registro “f”.
Ejemplo: Si tenemos un registro DIA = 7.
Aplicando la instrucción
INCF DIA, 0, tendremos W = 8 y DIA = 7.
Si aplicamos esta otra
INCF DIA, 1, tendremos DIA = 8.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: INCFSZ f,d (hex = 0F ff)


Descripción: Incrementa en 1 a “f”, y si “f” = 0 salta la siguiente instrucción
Operación: d = f + 1, si d = 0 SALTA (d puede ser “W” ó “f”).
Esta instrucción incrementa en uno el contenido del registro direccionado por
el parámetro “f”, y si el resultado es 0 se salta la instrucción siguiente. El
parámetro “d” determina el destino del valor obtenido.
Si d = “W”, el resultado se almacena en el acumulador.
Si d = “f”, el resultado se almacena en el propio registro “f”.
Ejemplo: INCFSZ VALOR, W
INSTRUCCION 1
INSTRUCCIÓN 2

Si el contenido del registro “VALOR” al incrementarlo en 1 es igual a 0, se


guarda el resultado en el acumulador y sigue con la INSTRUCCION2,
saltándose la INSTRUCCION1.
Si el resultado que guardamos en W no es 0, sigue con la INSTRUCCION1 y
después con la INSTRUCCION2 (no se salta la inmediata siguiente).
Registro STATUS: No modifica ningún bit de estado.

Microprocesadores Ing. Verónica Pérez 11


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
INSTRUCCIÓN: IORWF f,d (hex = 04 ff)
Descripción: Operación lógica OR inclusivo entre el acumulador y un registro
Operación: d = W OR f (d puede ser “W” ó “f”).
Esta instrucción realiza una operación lógica OR inclusivo entre el
acumulador “W” y el registro direccionado por el parámetro “f”. El parámetro
“d” determina donde se almacenará el resultado de la operación.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si asignamos los valores W = 10101010B y f = 01010101B.
IORWF f ; W = 10101010B y f = 11111111B.
IORWF f, 1; W = 10101010B y f = 11111111B.
IORWF f, 0; f = 01010101B y W = 11111111B.
IORWF f, W; f = 01010101B y W = 11111111B.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: MOVF f,d, (hex = 08 ff)


Descripción: Mueve el contenido de “f” al acumulador o al propio registro “f”.
Operación: d = f (d puede ser “W” ó “f”).
Esta instrucción copia el contenido del registro direccionado por el parámetro
“f” en el acumulador “W” o en el mismo registro “f”. El parámetro “d” determina
el destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.

El motivo para copiar el contenido de un registro sobre si mismo, no es otro


que poder comprobar en el registro STATUS el estado del bit Z.
Ejemplo: Si tenemos el registro EDAD = 38. ;)
MOVF EDAD, 0 ; hace que W = 38.
MOVF EDAD, 1 ; hace que EDAD = 38.
MOVF EDAD, W ; hace que W = 38.
MOVF EDAD ; hace que EDAD = 38.
Registro STATUS: Modifica el bit Z.
 Z vale 1 si el resultado de la operación es 0.

INSTRUCCIÓN: MOVWF f (hex = 00 8f)


Descripción: Mueve el contenido de “W” al registro “f”.
Operación: f = W.
Esta instrucción copia el contenido del acumulador “W” en el registro
direccionado por el parámetro “f”.
Ejemplo: Si queremos escribir el valor 10H en el registro TMR0, que está situado en la
dirección 01H, tendremos que cargar primero el valor en el acumulador y
después copiarlo al registro.
MOVWF 10H ; cargar el valor 10H en el acumulador.
MOVWF 01H ; copia el acumulador en la dirección 01H.
Microprocesadores Ing. Verónica Pérez 12
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador

Con los registros utilizados por el PIC para funciones específicas, es habitual
no escribir directamente su dirección, sino el nombre simbólico definido en el
fichero PIC16F84.INC. En el ejemplo anterior nos quedaría así:
MOVWF 10H ; cargar el valor 10H en el acumulador.
MOVWF TMR0 ; copia el acumulador en el registro TMR0.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: NOP (hex = 00 00)


Descripción: No opera.
Operación: ------
Esta instrucción no realiza ninguna función específica, pero consume 4 ciclos
de reloj completos. Es útil para insertar un retardo igual a un ciclo de
máquina.
Ejemplo: Utilizando un cristal de cuarzo de 4 Mhz. en el oscilador, podremos obtener un
retardo igual a un microsegundo por cada instrucción NOP que insertemos en
el código del programa:
RETARDO NOP
NOP
NOP
RETURN
Cada vez que llamemos a la subrutina RETARDO, obtendremos 3
microsegundos de demora.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: RLF f,d (hex = 0D ff)


Descripción: Rota a la izquierda el registro “f”.
Operación: d = << 1 (d puede ser “W” ó “f”).
Esta instrucción rota a la izquierda todos los bits del registro direccionado en
el parámetro “f” pasando por el bit CARRY del registro STATUS (o si se
prefiere, desde los bits menos significativos a los más significativos).
Es como si multiplicáramos por dos el contenido del registro.
Veamos el registro “f” de forma gráfica:

El D7 pasa al CARRY del registro STATUS, el contenido del CARRY pasa al


D0, el D0 al D1, etc.
El parámetro “d” determina el destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si tenemos el registro VALOR = 00000001B y aplicamos la instrucción
RLF VALOR
el resultado será VALOR = 00000010B y el bit C = 0.
Si tenemos el registro VALOR = 10000000B y aplicamos la instrucción
RLF VALOR
Microprocesadores Ing. Verónica Pérez 13
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
El resultado será VALOR = 00000000B y el bit C = 1.
Registro STATUS: Modifica el bit C (CARRY).

INSTRUCCIÓN: RRF f,d (hex = 0C ff)


Descripción: Rota a la derecha el registro “f”.
Operación: d = f >> 1 (d puede ser “W” ó “f”).
Esta instrucción rota a la derecha todos los bits del registro direccionado en el
parámetro “f” pasando por el bit CARRY del registro STATUS (o si se
prefiere, desde los bits más significativos a los menos significativos).
Es como si dividiéramos por dos el contenido del registro.
Veamos el registro “f” de forma gráfica:

El bit C del registro STATUS pasa al D7, el D0 pasa al bit C, el D1 al D0, etc.
El parámetro “d” determina el destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si tenemos el registro VALOR = 00000001B y aplicamos la instrucción
RRF VALOR
el resultado será VALOR = 00000000B y el bit C = 1.
Si tenemos el registro VALOR = 10000000B y aplicamos la instrucción
RRF VALOR
El resultado será VALOR = 01000000B y el bit C = 0.
Registro STATUS: Modifica el bit C (CARRY).

INSTRUCCIÓN: SUBWF f,d (hex = 02 ff)


Descripción: Resta el acumulador del registro “f”.
Operación: d = f – W (d puede ser “W” ó “f”).
Esta instrucción resta el valor contenido en el acumulador “W” del valor
contenido en el registro direccionado por el parámetro “f”. El parámetro “d”
determina el destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Según sean los valores de W y el registro DATO, si aplicamos
SUBWF DATO, obtendremos diferentes resultados en el bit CARRY.
Si DATO = 3 y W = 2; el resultado será DATO = 1 y C = 1.
Si DATO = 2 y W = 2; el resultado será DATO = 0 y C = 1.
Si DATO = 1 y W = 2; el resultado será DATO = FFH y C = 0.
Vemos que C = 1 porque el resultado es positivo y C = 0 cuando el resultado
es negativo.
Registro STATUS: Modifica los bits Z, DC y C.
 Z vale 1 si el resultado de la operación es 0.
Microprocesadores Ing. Verónica Pérez 14
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
 DC vale 1 si el resultado de la operación es un número superior a 15.
C vale 1 si el resultado de la operación es positivo o el bit 7 del registro que
contiene el resultado vale 0. En caso contrario C vale 0 (resultado negativo).

INSTRUCCIÓN: SWAPF f,d (hex = 0E ff)


Descripción: Intercambia los 4 bits más significativos con los 4 menos (nibbles)
Operación: f = 0123 SWAP 4567 de “f”.
Esta instrucción intercambia el valor de los 4 bits más significativos (D7-D4)
contenidos en el registro direccionado por el parámetro “f”, con los 4 bits
menos significativos (D3-D0) del mismo. El parámetro “d” determina el
destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si tenemos VALOR = 00001111B y W = 00000000B, al aplicar
SWAPF VALOR ; VALOR = 11110000B y W = 00000000B.
SWAPF VALOR, W; VALOR = 00001111B y W = 11110000B.
Con la primera instrucción modificamos el valor del registro DATO, y en la
segunda instrucción modificamos el valor del acumulador sin que varíe el
registro DATO
.
Registro STATUS: No modifica ningún bit de estado.
INSTRUCCIÓN: XORWF f,d (hex = 06 ff)
Descripción: Operación lógica XOR entre el acumulador y “f”.
Operación: Dd = f XOR W (d puede ser “W” ó “f”).
Esta instrucción efectúa la operación lógica XOR (OR exclusivo) entre el valor
contenido en el acumulador “W” y el valor contenido en el registro
direccionado por el parámetro “f”. El parámetro “d” determina el destino.
Si d = 0, se guarda en “W”.
Si d = 1, se guarda en “f”.
Si no se pone nada, el valor por defecto es 1 y se guarda en “f”.
También se puede indicar directamente “W” ó “f”.
Ejemplo: Si tenemos el registro VALOR = 11110000B y W = 11111111B, al aplicar la
instrucción
XORWF VALOR ; hace VALOR = 00001111B y W no varía.
XORWF VALOR, W ; hace W = 00001111B y VALOR no varía.
Explicación de la operación XOR:
Tenemos 4 posibles combinaciones entre dos bits
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Vemos que si ambos bits son iguales el resultado será 0. Y si ambos son
diferentes, el resultado será 1. Esta instrucción compara dos bytes, bit a bit.
Esto nos sirve para comparar dos valores y comprobar si son iguales o no.
Supongamos que tenemos el registro NUMERO y queremos comprobar si es
igual a 26H.
Tendríamos que efectuar las siguientes instrucciones:

Microprocesadores Ing. Verónica Pérez 15


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
MOVLW 26H; carga el acumulador con el valor a comparar.
XORWF NUMERO, W ; compara el acumulador con NUMERO.
BTFSS STATUS, Z ; salta la instrucción siguiente si XOR = 0.
GOTO DISTINTO ; salta a DISTINTO si XOR no es 0.
GOTO IGUAL ; salta a IGUAL.
Registro STATUS: Modifica el bit Z.
Z vale 1 si el resultado de la operación es 0.

2.1.3. ORIENTADAS A BITS.

INSTRUCCIÓN: BCF f,b (hex = 1B ff)


Descripción: Pone a cero el bit “b” del registro “f”.
Operación: F(b) = 0
Esta instrucción pone a cero un bit que hayamos elegido de un registro
determinado.
Ejemplo: BCF PORTA, RA4 ; pone a 0 el bit RA4 del registro PORTA
BCF PORTA, 4 ; igual, si no conocemos en nombre del bit

Si en el PORTA tenemos como valor inicial 11111111B, después de aplicar el


ejemplo anterior, PORTA = 11101111B.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: BSF f,b (hex = 1B ff)


Descripción: Pone a uno el bit “b” del registro “f”.
Operación: F(b) = 1
Esta instrucción pone a uno un bit que hayamos elegido de un registro
determinado.
Ejemplo: BSF PORTA, RA0 ; pone a 1 el bit RA0 del registro PORTA
BSF PORTA, 0 ; igual, si no conocemos en nombre del bit

Si en el PORTA tenemos como valor inicial 00000000B, después de aplicar el


ejemplo anterior, PORTA = 00000001B.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: BTFSC f,b (hex = 1B ff)


Descripción: Comprueba un bit “b” del registro “f” y se salta la instrucción siguiente si vale
0.
Operación: F(b) = 0 ? SI, salta una instrucción
Esta instrucción comprueba el valor del bit “b” en el registro “f”, y si “b” = 0
entonces se salta la siguiente instrucción.
Si “b” = 1 no salta y sigue con su ejecución normal.
Ejemplo: BTFSC PORTA, 2
INSTRUCCIÓN 1
INSTRUCCIÓN 2

Si en PORTA tenemos como valor inicial 11111011B, el programa continúa


con la instrucción 2, saltándose la instrucción 1
Microprocesadores Ing. Verónica Pérez 16
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Si en PORTA tenemos el valor 00000100B, el programa sigue con la
instrucción 1 y después la instrucción 2.
Registro STATUS: No modifica ningún bit de estado.

INSTRUCCIÓN: BTFSS f,b (hex = 1B ff)


Descripción: Comprueba un bit “b” del registro “f” y se salta la instrucción siguiente si vale
1.
Operación: F(b) = 1 ? SI, salta una instrucción.
Esta instrucción comprueba el valor del bit “b” en el registro “f”, y si “b” = 1
entonces se salta la siguiente instrucción.
Si “b” = 0 no salta y sigue con su ejecución normal.
Ejemplo: BTFSS PORTB, 7
INSTRUCCIÓN 1
INSTRUCCIÓN 2

Si en PORTB tenemos como valor inicial 10000000B, el programa continúa


con la instrucción 2, saltándose la instrucción 1.
Si en PORTB tenemos el valor 01111111B, el programa sigue con la
instrucción 1 y después la instrucción 2.
Registro STATUS: No modifica ningún bit de estado.

MODOS DE DIRECCIONAMIENTO

Direccionamiento directo: la memoria de datos (RAM).

La memoria interna se direcciona en forma directa por medio de los 8 bits “f” contenidos en las
instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posición
desde la 00 a la FF.
En los microcontroladores que tengan más de un banco, antes de acceder a alguna variable que se
encuentre en la zona de los bancos de registros, el programador deberá asegurarse de haber
programado los bits de selección de banco en el registro FSR.

Direccionamiento indirecto: el registro FSR.

El registro FSR sirve como puntero para direccionamiento indirecto además de servir para seleccionar
el banco activo. La posición 00 del mapa de RAM es la llamada dirección indirecta.
Si en cualquier instrucción se opera con la dirección 00, en realidad se estará operando con la
dirección a donde apunte el contenido del FSR.
Por ejemplo si el FSR contiene el valor 1Ah, una instrucción que opere sobre la dirección 0, en
realidad lo hará sobre la dirección 1Ah. Puede decirse que la posición 1Ah de memoria fue
direccionada en forma indirecta a través del puntero FSR.

El direccionamiento indirecto es muy útil para procesar posiciones consecutivas de memoria (como
en el ejemplo) o para el direccionamiento de datos en subrutinas.

Direccionamiento inmediato:
El dato utilizado por la instrucción se codifica al mismo tiempo que la propia instrucción. En este caso,
al dato se le denomina “literal”.

Microprocesadores Ing. Verónica Pérez 17


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Direccionamiento relativo:
No existe este modo de direccionamiento en los microprocesadores PIC.

TECNICAS DE PROGRAMACION

Subrutinas y Llamadas:
La mayoría de los microcontroladores incluyen en su repertorio de instrucciones algunas que
permiten saltar a una rutina y, cuando se completa su ejecución, retornar al programa principal.
El empleo de subrutinas aporta muchas ventajas entre las que se destacan las siguientes:
1) Se pueden escribir como subrutinas secciones de código y ser empleadas en muchos programas
( por ejemplo, la subrutina de exploración de un teclado ).
2) Dan a los programas un carácter modular, es decir, se pueden codificar diferentes módulos para
utilizarlos en cualquier programa.
3) Se reduce notablemente el tiempo de programación y la detección de errores, utilizando
repetidamente una subrutina.
4) El código es más fácil de interpretar, dado que las instrucciones de las subrutinas no aparecen en
el programa principal, sólo figuran las llamadas (CALL).

Microprocesadores Ing. Verónica Pérez 18


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador

Microprocesadores Ing. Verónica Pérez 19


INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
Directivas del ensamblador
Las directivas no son instrucciones del microcontrolador, son indicaciones que se le dan al
ensamblador para controlar algunos aspectos del ensamblado del código. Como con los
mnemónicos de instrucciones, al ensamblador le da igual si las directivas están en
mayúsculas o en minúsculas

LIST
Es una directiva para listar una serie de opciones de ensamblado de diversa índole. Los
parámetros listados se separan por comas. Por ejemplo, siguiente directiva
List p = PIC16F84A, r = dec, b = 8, f = INHX8M
Tiene cuatro parametros, cuyo significado es:
 p: establece el Procesador destino (PICmicro). Esto será equivalente a la directiva
processor.
 r: establece el sistema de numeración a usar por defecto. Como se vio al inicio, el formato
de los números se suele especificar por un prefijo: 0x para hexadecimal, . para decimal,
etc. En caso de no especificar nada, el número será considerado en el formato señalado
por r. En el ejemplo, es obvio que se indica decimal. El valor por defecto es hex
(hexadecimal). Esto es equivalente a la directiva radix.
 b: establece la cantidad de espacios en blanco que serán insertados en lugar de cada
tabulación del archivo *.lst. Éste es un archivo secundario de los tantos que genera el
ensamblador. De cualquier forma, más adelante veremos para que puede servir.
 f: establece el Formato del archivo hexadecimal de salida. las opciones disponibles son
INHX8M, INHX8S e INHX32. La primera es el valor por defecto.
Es una costumbre poner list con al menos el parametro p = indicando el procesador.

INCLUDE
Es la directiva para incluir como parte del programa el archivo que se indica. La inclusión se
realiza como si se aplicara un “copiar - pegar” del contenido entero del archivo incluido en el
lugar donde aparece la directiva. Esta directiva debe aparecer en todos los programas de
ensamblador al menos para incluir el archivo de dispositivo del PIC usado. Estos archivos se
hallan en la carpeta de instalación del ensamblador MPASM, que a su vez se instala con
Microprocesadores Ing. Verónica Pérez 20
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
MPLAB IDE, norlmalmente C:\Microchip\MPASM Suite. Solo se pone la directiva y el
ensamblador sabrá dónde buscarlo.
include <P16F84A.inc> ; incluir archivo P16F84A.inc
Include también se usa para incorporar archivos de otros tipos, como librerías de códigos. Es
una convención usar los signos <> para referirse a los archivos estándar y los signos “ ” para
referirse a los archivos de usuario. Incluso pueden ignorarse dichos signos asi como poner
por delante el signo #.

EQU
Cuando se quiere acceder a los registros (SFR o GPR) de la RAM se les debe referenciar
por sus direcciones. Como eso sería una labor muy tediosa, el ensamblador permite
identificarlos con un alías o nombre escogido por el usuario mediante la directiva equ.
Aunque equ permite igualar (equal = igual) un identificador con cualquier constante númerica,
su principal aplicación es “darles nombres” a los registros de la RAM. De hecho, todos los
registros SFR del PIC ya están identificados así en su correspondiente archivo de dispositivo
(revísalos, si quieres). A nosotros equ nos servirá para trabajar con los registros GPR.

ORG
Su nombre deriva de origen. Es para indicarle al ensamblador a partir de que dirección
empezará a mapear el subsiguiente código ejecutable. Como el CPU empieza a ejecutar el
código desde la dirección 0x000, al menos la primera instrucción de código debería estar allí.
Sin embargo, poner org 0x00 en programas con código continuo se ha convertido en un
hábito a veces hasta innecesario porque el ensamblador, que no es tan tonto, sabe que por
defecto debe colocar el código a partir de la dirección 0x000.
org0x000

END
Es la directiva que pone fin a la lectura del código fuente por parte del ensamblador.
Cualquier código ubicado después de esta directiva ya no será tomado en cuenta, lo que
implica que solo debería haber una directiva end por programa, incluso si consta de varios
archivos. Son sofisticados los programas donde se puede usar varias veces.
Microprocesadores Ing. Verónica Pérez 21
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador

BANKSEL
El nombre de esta directiva es un acrónimo de BANK SELection y, como se prevé, sirve para
cambiar de bancos.
En los PIC con dos bancos, como el PIC16F84A, solo se trabaja con el bit RP0.
Dado el tedio que puede acarrear este trabajo, sobre todo si no se recuerda a qué banco
pertenece un registro, la directiva banksel puede ser de gran ayuda. Banksel se encargará de
colocar las instrucciones necesarias para acceder al registro que se le indica como
parámetro.
banksel TRISA; Seleccionar banco del registro TRISA (Banco 1)

#DEFINE
Se utiliza como #defineidentificadorcadena; Lo que hará el ensamblador es sustituir el
identificador por toda la cadena restante tal cual es en cada punto del programa donde se
encuentre identificador. Por eso se le conoce como directiva de sustitución de texto.
Identificador es una palabra con las mismas reglas impuestas a otros identificadores, como
las etiquetas o nombres de registros GPR. En cambio, cadena puede estar formado por
cualesquier otro elemento de código ensamblador.

DB
La directiva DB (Define Byte) reserva memoria para datos de tipo byte (8 bits), o para una
variable de este tipo, inicializando o no dicho byte y los posteriores. • El nombre de la variable
es opcional, y se asigna dicho nombre para el primer byte (recordar que el lenguaje máquina
no entiende de variables, si no de direcciones de memoria. Una variable es una etiqueta o
referencia para el compilador, el cual sustituye cada referencia a esta variable por la
dirección de memoria correspondiente)

$
Las etiquetas en el fondo representan las direcciones de las instrucciones a las que preceden
y sirven de referencia para las instrucciones de salto. Así mismo, la directiva $ marca la
Microprocesadores Ing. Verónica Pérez 22
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA
Antonio José de Sucre
GUÍA NRO 3: Set de Instrucciones y directivas de emsamblador
dirección de la instrucción actual. Normalmente es preferible colocar etiquetas y dejar el uso
de $ solo para los casos donde la propensión a cometer errores sea mínima, por ejemplo,
para las instrucciones de saltos cortos.
goto$+2; Saltar 2 instrucciones adelante
goto$-4; Saltar 4 instrucciones atrás
return

Microprocesadores Ing. Verónica Pérez 23

You might also like