Sei sulla pagina 1di 2

Introduccin

Siempre ha sido tema de debate la eleccion del ensamblador o un compilador de al


to nivel como lenguaje de programacion. Cada herramienta tiene sus ventajas e in
convenientes. Siempre habra aplicaciones donde no sea necesaria la eficiencia de
l ensamblador o la flexibilidad de un compilador, asi como aplicaciones que s dem
anden de ambas facilidades. Sea como sea, un buen disenador debe estar preparado
para emplear el ensamblador como eventual recurso.
Una razon de gran peso que quiero anadir por la que tarde o temprano se debe apr
ender el ensamblador es que la mayor parte (casi toda) la informacion proporcion
ada por Microchip en los datasheets, notas de aplicacin o manuales de referencia
sobre sus PICmicros se incluyen codigos en ensamblador.
Estructrura del programa en ensamblador
Vamos a analizar el primer programa, el que hace parapadear un LED.
;****************************************************************************
; FileName: BlinkLed.asm
; Processor: PIC16F84A
;****************************************************************************
list p = PIC16F84A
; Seleccionar procesador
#include <P16F84A.inc> ; incluir archivo P16F84A.inc
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
cont1
cont2

equ
equ

0x0C
0x0D

; Ubicar cont1 en direccin 0x0C


; Ubicar cont2 en direccin 0x0D

org

0x00

bsf
bcf
bcf

STATUS, RP0
TRISB, 0
STATUS, RP0

bsf
call
bcf
call
goto

PORTB, 0
pausa
PORTB, 0
pausa
MLoop

;
;
;
;
;
;
;
;
;
;
;

Start

MLoop

Cdigo ejecutable empieza aqu


Iniciar
RP0 = 1. Cambiar al Banco 1
Configurar pin RB0 como salida
RP0 = 0. Cambiar al Banco 0
Bucle principal
Prender el led
Llamar pausa
Apagar el led
Llamar pausa
Saltar a MLoop

;****************************************************************************
; Subrutina pausa. Genera 325 milisegundos aprox.
pausa
movlw d'100'
; Mover 100 a W
movwf cont1
; Mover W a cont1 (cargar cont1)
movlw d'255'
; Mover 255 a W
movwf cont2
; Mover W a cont2 (cargar cont2)
loop1
decfsz cont1, f
; decrementar cont1, saltear si da 0
goto
loop2
; saltar a loop2
decfsz cont2, f
; decrementar cont2, saltear si da 0
loop2 goto
loop1
; saltar a loop1
return
; retornar de subrutina
end
; Fin del cdigo
Visto el cdigo de izquierda a derecha podemos notar que sobresalen cuatro columna
s. (Los colores ayudan mucho, aunque no determinan nada.)
La primera columna es la que contiene las etiquetas y tambin algunas directivas.
Las etiquetas sirven para marcar las direcciones de las instrucciones a las que

preceden. Pueden ser tiles para algunas instrucciones y en otros casos estn de ado
rno. Por ejemplo, la etiqueta Start vale por la direccin de bsf STATUS, RP0. El n
ombre de las etiquetas es un identificador. Pueden opcionalmente ir seguidas de
dos puntos (:).
En este programa tenemos las etiquetas Start, MLoop, pausa, loop1 y loop2.
En la segunda columna estn los mnemnicos de las instrucciones, como bsf, movlw, et
c. (en el ejemplo aparecen de color marrn), macros o directivas del ensamblador.
Las directivas (cuyos nombres aparecen de color azul) no son instrucciones del P
IC ni constituyen cdigo ejecutable. Son ordenes que el ensamblador tendr en cuenta
en el momento de ensamblar el cdigo fuente. Tienen diversas funciones y ayudan b
astante, como lo veremos en adelante.
Ahora, lo que puede resultar desalentador es la cantidad de directivas que exist
en. De la enorme lista disponible solo un grupo de ellas son realmente elemental
es e iremos conocindolas de a poco. La lista inicial indispensable est formada por
list, include, __config, banksel, equ, org, end, define, cblock, endc, dt.
La tercera columna est constituida bsicamente por los operandos de instrucciones,
como STATUS, RP0; TRISB; pausa; etc.
En la cuarta columna sobresalen los comentarios. Un comentario es todo lo que si
gue en el rengln a un punto y coma (;) y ser ignorado por el ensamblador (en el li
stado es todo lo que se ve de color verde). Digamos que son texto de adorno que
solo sirve para documentar el programa. De hecho, los comentarios pueden ponerse
en cualquier parte del listado.
sa es una forma algo burda de estructurar un programa, pero ayuda muchsimo. Ahora
pasaremos a revisarlo de arriba abajo.
Los identificadores son los nombres que podemos usar para identificar ciertos el
ementos del cdigo fuente, como registros GPR, etiquetas, macros, etc. Los nombres
se forman a criterio del usuario, usando los carecteres alfanumricos disponibles
y los signos _ y ?, respetando las siguientes reglas:
No debe haber dos indentificadores iguales.
No deben empezar con nmeros. Ejemplo, 1n4148.
No deben comenzar con dos rayas bajas seguidas. Ejemplo, __var.
No deben incluir espacios. Ejemplo, contador 1.
No deben ser palabras reservadas, como directivas o mnemnicos. Ejemplo, include,
processor, retlw, etc.
A diferencia de los mnemnicos, por defecto el ensamblador distingue entre caracte
res maysculas y minsculas.

Potrebbero piacerti anche