Sie sind auf Seite 1von 15

ANEXO 2

MPASM, el ensamblador de Microchip

MPASM, el ensamblador de Microchip


http://perso.wanadoo.es/pictob/mpasm.htm
Debido a la flexibilidad del IDE de Microchip, MPLAB, tenemos la posibilidad de
programar en lenguajes como "C" o "Basic". Pero lo cierto es que con el ensamblador
tenemos un cdigo puro y compacto. El ensamblador de Microchip que viene con MPLAB
es el MPASM.
El paquete MPASM (Microchip MPASM Toolsuite) de MPLAB IDE v6.60 esta formado
por:

MPASM Assembler (mpasmwin.exe)


MPLINK Object Linker (mplink.exe)
MPLIB Librtarian (mplib.exe)

MPASM nos permite escribir el cdigo y ensamblarlo para producir como salida un
fichero .HEX que luego grabaremos en el PIC o que nos servir para utilizarlo con el
simulador que incorpora MPLAB, en otros programas como PROTEUS o por ejemplo en
emuladores de PIC.
Con MPASM podemos producir un fichero .HEX a partir de un nico archivo .ASM con
cdigo simple/absoluto o bien podemos generar un archivo .HEX a partir de la unin de
distintos cdigos objeto y otros mdulos ensamblados y/o compilados. En este caso la
herramienta que dispone el MPLAB para "unir" esos mdulos se llama MPLINK.
Tambin podemos generar mdulos objeto para luego ser ensamblados con otros y as
producir un nico archivo .HEX. Otra posibilidad es crear libreras por medio de MPLIB.
Las libreras son una coleccin de cdigos objeto listos para ser utilizados y que se
almacenan todos juntos en un nico archivo con extensin .LIB.
Para mas informacin ver MPASM, MPLINK, MPLIB User's Guide o informacin
actualizada en Microchip.

Generacin de cdigo
Como antes hemos avanzado el ensamblador MPASM puede usarse de dos maneras:

Para generar cdigo absoluto que puede ser ejecutado directamente por un
microcontrolador.
Para generar cdigo relocalizable que puede unirse separadamente con otros
mdulos ensamblados o compilados.

Generando cdigo absoluto


La generacin de cdigo absoluto es el modo definido por defecto del ensamblador
MPASM. Este proceso se muestra a continuacin:

Cuando un archivo fuente se ensambla de esta manera, todas las variables y rutinas
utilizadas en el archivo fuente deben definirse dentro de este, o en archivos explcitamente
incluidos por el archivo fuente. Si el ensamblado se realiza sin errores, se generar un
archivo hexadecimal .HEX que contiene el cdigo mquina ejecutable para el dispositivo
designado. Este archivo puede utilizarse con un simulador para probar la ejecucin del
cdigo o cargarse en el microcontrolador mediante un programador.

Generando cdigo relocalizable


El ensamblador MPASM tambin puede generar mdulos objeto relocalizables que pueden
unirse (linkarse) con otros mdulos utilizando MPLINK para conformar cdigo ejecutable
final. Este mtodo es muy til para crear mdulos reutilizables.

Pueden agruparse mdulos relacionados y pueden guardarse juntos en una librera


mediante MPLIB.

Archivos de entrada/salida
stas son las extensiones de archivo predefinidas utilizadas por el ensamblador y su
funcin.
a. Archivos de entrada:
1.
2.

Cdigo fuente (.asm): Archivo fuente de entrada al ensamblador.


Archivo include (.inc): Archivo de inclusin o cabecera.

b. Archivos de salida:
1. Archivo de listado (.lst): Archivo del listado generado por el ensamblador.
2. Archivo de error (.err): Archivo de errores de ensamblado.
3. Archivo hexadecimal (.hex, .hxl, .hxh): Archivo hexadecimal con cdigo
ejecutable.
4. Archivo de referencias cruzadas (.xrf): Archivo para la referencia
cruzadas de los archivos ensamblados.
5. Archivo de smbolos y depuracin (.cod).
6. Archivo objeto (.o).

a. Archivos de entrada
1. Cdigo fuente (.asm)
El ensamblador es un lenguaje de programacin para desarrollar cdigo fuente en una
aplicacin con PIC. El archivo de cdigo fuente puede crearse y editarse con cualquier
editor de texto ASCII. Para ms informacin ver El lenguaje ensamblador del PIC16F84A
El cdigo fuente debe seguir las siguientes pautas bsicas:
Cada lnea del archivo fuente puede contener cuatro tipos de informacin:
4

Etiquetas
Operacin, Mnemnicos (instrucciones), Directivas y Macros
Operandos
Comentarios

El orden y posicin de stos es importantes. Para facilitar la depuracin, se recomienda que


la etiqueta se coloque en la primera columna y que los mnemnicos se coloquen una o dos
columnas ms all. Los operandos siguen al cdigo mnemotcnico. Los comentarios
pueden seguir a los operandos, mnemnicos o etiquetas, y pueden comenzar en cualquier
columna. La anchura de columna mxima es de 255 caracteres.
Un espacio en blanco debe separar la etiqueta del cdigo mnemotcnico, y tambin un
espacio en blanco debe separar el cdigo mnemotcnico y los operandos. Los operandos
mltiples deben separarse por comas.
Se considera como un espacio en blanco uno o ms espacios o tabulaciones. El espacio en
blanco se utiliza para separar las partes de una lnea del cdigo fuente. El espacio en
blanco debe utilizarse para hacer el cdigo ms fcil de leer. Cualquier nmero de espacios
en blanco o tabulaciones son exactamente igual que uno.

Etiquetas
Una etiqueta se usa para representar una lnea o grupo de cdigo, o un valor constante. Se
necesitan para las instrucciones de salto.
Las etiquetas deben empezar en la columna 1. Pueden terminar en "dos puntos" (:),
espacio, tabulacin o fin de lnea. Las etiquetas deben comenzar por un carcter alfabtico
o por un guin bajo (_) y puede contener caracteres alfanumricos, guin bajo (_) y el
signo de interrogacin (?).
Las etiquetas no deben:

Comenzar por dos guiones bajos, ejem., __config.


Comenzar por un guin bajo y un nmero, ejem., _2NDLOOP.
Ser palabras reservadas del ensamblador (ver Section 3.3 Reserved Words and
Section Names de MPASM, MPLINK, MPLIB User's Guide).

Las etiquetas pueden tener como mucho 32 caracteres. Por defecto se distinguen
maysculas y minsculas, pero esto puede anularse con la opcin en lnea de comandos
(/c). Si se utiliza "dos puntos" (:) al definir una etiqueta, se le trata como un operador de la
etiqueta y no como parte de la propia etiqueta.
Mnemnicos, directivas y macros
Los mnemnicos le dicen al ensamblador qu instrucciones de cdigo mquina (cdigos de
operacin) deben utilizarse. Por ejemplo, suma (add), ir a (goto) o movimientos (movwf).
A diferencia de las etiquetas que creamos nosotros mismos, los mnemnicos los
proporciona el lenguaje ensamblador que se utilice. Los mnemnicos no son en ningn
caso sensibles a maysculas/minsculas.
Las directivas son rdenes del ensamblador que aparecen en el cdigo fuente pero que
normalmente no son traducidas directamente a cdigos de operacin. Se utilizan para
controlar al ensamblador: sus entradas, salidas y asignacin de datos. Las directivas no son
en ningn caso sensibles a maysculas/minsculas.
Las macros son conjuntos de instrucciones y directivas definidas por el usuario que se
insertarn en el cdigo fuente al realizar el ensamblado siempre que la macro se invoque
(ver directiva macro).
Los mnemnicos de las instrucciones del ensamblador, las directivas y las llamadas a
macros deben colocarse de la segunda columna en adelante. Si hay una etiqueta en la
misma lnea, las instrucciones deben separarse de esa etiqueta por "dos puntos", o por uno
o ms espacios o tabulaciones.
Operandos
Los operandos dan informacin a la instruccin sobre los datos que deben utilizarse y
donde se encuentran. Los operandos deben separarse de los mnemnicos por uno o ms
espacios, o tabulaciones. Los operandos mltiples deben separarse por comas.

Comentarios
Los comentarios son texto que explica el funcionamiento de una lnea o lneas de cdigo.
El ensamblador MPASM trata lo que est despus de un punto y coma como un
comentario. Todos los caracteres que siguen al punto y coma se ignoran hasta el final de la
lnea. Las constantes de la cadena que contienen un punto y coma se permiten y no se
confunden con comentarios.

2. Archivo include (.inc)


Un archivo "include" o cabecera (header) es cualquier archivo que contenga cdigo
ensamblador vlido. Normalmente, el archivo contiene equivalencias sobre registros
especficos del dispositivo a utilizar y asignaciones de bits. Este archivo puede ser
incluido en el cdigo para que pueda ser reutilizado por muchos programas.
Como ejemplo, para aadir el archivo de cabecera para el dispositivo PIC18F877 en el
cdigo ensamblador de nuestro programa, pondremos:
#include p18f877.inc

Los archivos de cabecera se encuentran en el directorio de instalacin de MPASM o de


MPLAB.

b. Archivos de salida
1. Archivo de listado (.lst)
El archivo de listado que genera MPASM proporciona la correspondencia entre cdigo
fuente y cdigo objeto, como puede verse en este fragmento de archivo .LST:
LOC OBJECT CODE
VALUE
001C
001D

3A03
1903

LINE SOURCE TEXT

00065
00066

XORLW
BTFSC

0x03
STATUS,2

00065

XORLW

0x03

Analicemos la lnea:
001C

3A03

La primera columna, 001Ch, 28d, es la direccin de la memoria de programa donde se


encuentra el dato 3A03h, 11101000000011b, de la segunda columna. Estas dos columnas
conforman el cdigo objeto. La tercera columna indica el nmero de lnea de texto del
cdigo fuente, XORLW es el mnemnico de la instruccin y 0x03, 3h, el operando. El dato
que se grabar en la memoria de programa, 3A03h, 11101000000011b tiene 14 bits, la
longitud de la memoria de programa, el mnemnico XORLW equivale a "111010
kkkkkkkk", donde k es el valor literal sobre el que actuar XORLW, justamente 03h, esto
es 00000011b, y nos queda:
111010b (XORLW) +

0x03(00000011b) = 11101000000011b, que es 3A03h.

El archivo de listado tambin proporciona una lista de smbolos y sus valores, informacin
sobre el uso de la memoria y el nmero de errores, advertencias y mensajes generados.
Aparece una informacin del tipo:
Program Memory Words Used:
Program Memory Words Free:

782
242

Que nos indica la cantidad de memoria de programa utilizada y libre, en palabras de 14


bits.
Este archivo puede verse en MPLAB IDE siguiendo estos pasos:
MPASM y MPLINK (y en consecuencia MPLAB) pueden generar archivos de listado. Los
archivos de listado generados se encuentran en el mismo directorio que el resto de archivos
que se generan (.HEX, .ERR, etc), normalmente donde se encuentre el .ASM. Puede
abrirse con cualquier editor de texto ASCII.

2. Archivo de error (.err)


El ensamblador MPASM, por defecto, genera un archivo del error. Este archivo puede ser
til cuando estamos poniendo a punto el cdigo de nuestro programa. MPLAB mostrar la
informacin del error en la ventana Output. El formato de los mensajes en el archivo de
error es:
type[number] lnea de descripcin de archivo

Por ejemplo:
Error[113] C:\PROG.ASM 7 : Symbol not previously defined (start)

El archivo del error puede contener cualquier nmero de errores, advertencias y mensajes
del ensamblador MPASM. Para mas informacin, ver Chapter 8. Errors, Warnings,
Messages, and Limitations en MPASM, MPLINK, MPLIB User's Guide

3. Archivo hexadecimal (.hex, .hxl, .hxh)


El archivo hexadecimal es, por as decirlo, el archivo que contiene el ejecutable para el
microcontrolador. La informacin que contiene se transferir a PIC cuando se programe.
La informacin que contiene est en formato ASCII, no en binario como podra pensarse,
de manera que se representan los valores hexadecimales con caracteres alfanumricos,
3FFA, 0023, etc.
MPASM y MPLINK son capaces de generar archivos de texto ASCII en hexadecimal en
diferentes formatos. Esto es til para transferir el programa a distintos tipos
programadores.
Nombre de formato

Tipo de
formato

Intel Hex Format

INHX8M

Extensin
Uso
de rchivo
.hex

programadores para dispositivos de 8 bits

Intel Hex 32 Format

INHX32

.hex

Intel Split Hex Format

INHX8S

.hxl, .hxh

programadores para dispositivos de 16 bits


otros programadores

Formato INTEL hexadecimal de 8 bits


Nos centraremos en este formato por ser el ms comn.
Este formato produce un archivo hexadecimal de 8 bits con la combinacin byte bajo / byte
alto. De esta manera cada direccin puede contener slo 8 bits en este formato por lo que
todas las direcciones se doblan.
Cada registro de datos (cada lnea) comienza con un prefijo de 9 caracteres y acaba con 2
caracteres de checksum.
Cada registro de datos tiene el formato siguiente:
:BBAAAATTHHHH... .HHHCC

donde:

BB: dos dgitos en hexadecimal que representan el nmero de bytes de datos que
aparecen en la lnea.
AAAA: cuatro dgitos en hexadecimal que representan la direccin de arranque de
los datos del registro.
TT: dos dgitos que siempre sern '00' salvo al final del archivo de datos que sern
'01'.
HH: dos dgitos en hexadecimal, con la informacin en la forma byte bajo / byte
alto.
CC: checksum de dos dgitos en hexadecimal son el complemento a dos de la suma
de todos bytes precedentes en el registro.

Ejemplo:
Parte de e001.lst:
0000
0001
0002

3007
3E08
0090

movlw
addlw
movwf

0x07
0x08
0x10

;Carga primer sumando en W


;Suma W con segundo sumando
;Almacena el resultado

e001.hex completo:
:020000040000FA
:060000000730083E9000ED
:00000001FF
Observemos la 2 lnea:
:060000000730083E9000ED
:06000000
06 6 bytes: 07, 30, 08, 3E, 90, 00.
0000 direccin 0
00 al no ser el registro final

730083E9000ED
07 30 es 3007
08 3E es 3E08
90 00 es 0090
ED es el checksum

Ejecutar MPASM
MPASM permite operar a travs de una ventana con el botn Built All de MPLAB (ver
MPLAB-IDE v6.60) o a travs de lnea de comandos, siendo el resultado final el mismo,
mediante el programa mpasmwin de Microchip.
La lnea de comando se compone de de distintos campos, del tipo:
MPASMWIN [/<opcin>[,/<opcin>....]] [<nombre_archivo>]

<nombre_archivo> indica a MPASM el archivo a ensamblar, y las opciones pueden


indicar el tipo de prosesador, si queremos que nos muestre todos los mensajes o solo los de
error, el formato de salida del archivo .HEX etc. Estos campos se
incluyen automticamente cuando trabajamos con Built All.
A continuacin se muestra como se ejecuta MPASM segn aparece en la ventana Output
de MPLAB cuando pulsamos Built All:
mpasmwin.exe /q /p16F84A "jluzpic.asm" /l"jluzpic.lst" /e"jluzpic.err"

Tambin podemos ejecutar el archivo mpasmwin.exe directamente, aparecer:

10

Sistemas de numeracin
La convencin utilizada por MPASM es la siguiente:
Hexadecimal: es la numeracin por defecto. Para mayor claridad para el programador se
utiliza una letra H al final del nmero. Por ejemplo: 0100H, 0A0H, 5H, 66h.
Importante: Como sta es la numeracin por defecto hay que tener mucho cuidado al
colocar nmeros en decimal. Por ejemplo la instruccin MOVLW 64 no utilizar el
nmero 64 decimal sino el 100 decimal (64 hex = 100 dec)
Binario: Para escribir nmeros en binario utilizar B'xxxxxxxx' (utilizar comillas simples).
Por ejemplo: B'10011001' , b'01110000'.
Decimal: podemos utilizar la forma D'120' (tambin con comillas simples) o la forma corta
anteponiendo un punto al nmero decimal. Esta es la forma utilizada en todos los
programas realizados por Microchip. Por ejemplo: D'112' d'10' .200 .100
Tener en cuenta siempre el tamao de datos con el que se est trabajando. En la mayora de
los casos, se utilizar un nmero para almacenarlo en el acumulador y ste es de 8 bits. Por
lo tanto el nmero utilizado no debe exceder de 255 decimal o FF hexadecimal.

Tipo
Decimal

Hexadecimal

Sintaxis Ejemplo

Comentario

D''

D'100'

D puede ser minscula

.100

H''

H'64'

0x

0x64

H puede ser minscula

64

Por defecto
O puede ser minscula

Octal

O''

O'144'

Binario

B''

B'01100100' B puede ser minscula

A''

A'C'

''

'C'

ASCII

A puede ser minscula

Directivas de MPASM
Las directivas son "indicaciones" para el ensamblador que le dicen cmo hacer algunas
cosas, y sirven para ayudarnos en la tarea de programar. MPASM ofrece bastantes
directivas, las cuales se escriben dentro del cdigo fuente. Por eso no hay que confundir las
directivas con las instrucciones del PIC.
Los tipos de directivas son:
11

Directivas de control.
Directivas de datos.
Directivas de listado.
Directivas de macros.
Directivas de ficheros objeto.

Las directivas de control, permiten un ensamblado condicional.


Las directivas de datos, son todas aquellas que permiten la manipulacin simblica y el
posicionamiento en memoria.
Las directivas de listado permiten todo el control sobre el formato, paginacin y listado
del programa.
Las directivas de macros, permiten todas las gestiones de las macros.
Las directivas de fichero objeto, solo se utilizan para la creacin de ficheros objeto o
reubicables/reusables para luego enlazar con el MPLINK.
Las directivas se vieron en el tema ensamblador.htm explicando algunas. A continuacin
se muestra un resumen de las directivas ms importantes, ordenadas por tipo. Todas las
directivas pueden verse en el tema Directivas de MPASM

Resumen directivas del ensamblador MPASM


Directivas para carga o reserva en la Memoria de Programa

DATA

Inicializa una o ms palabras de la memoria de programa con datos o


cadenas de caracteres
DATA 0x012, 0x1345
DATA "Prueba 1,2,3"

DA

Almacena en paquetes de 14 bits dos caracteres ASCII representados con 7


bits
DA "abcdef"

DB

Reserva e inicializa bytes en la memoria de programa


DB 'T', 0xF0, 'S'

DW

Reserva e inicializa palabras en la memoria de programa


DW 0x39, 0x45B

DT

Genera una serie de instrucciones RETLW, una por cada expresin que
acompaa a la directiva
DT 1, 2, 3, 5, 7

DE

Reserva y carga posiciones de la memoria de programa con bytes, en


principio estaba pensada para rellenar la EEPROM de datos (empieza en la
0x2100), pero se puede emplear para cualquier posicin de memoria de
programa
ORG 0x2100
DE "Programa version 1.0"

12

FILL

Rellena un nmero de posiciones de memoria de programa con un mismo


contenido (dato o instruccin si va entre parntesis)
FILL 0x190F, 5

RES

Reserva un determinado nmero de posiciones de la memoria de programa


(avanza el puntero de cuenta de posicin en la memoria de programa)
RES 64

__CONFIG

Carga la palabra de configuracin del microcontrolador, previamente se


debe haber declarado el microcontrolador
__CONFIG 0x3F43

__IDLOCS

Se emplea para cargar las 4 posiciones de identificacin del


microcontrolador. Se debe haber declarado previamente el
microcontrolador
__IDLOCS 1234
Directivas de Control

CBLOCK
ENDC

Se emplean para declarar inicio y final de un bloque de constantes. Se


asignan valores correlativos
CBLOCK 0x20
A, B, C, D ;A = 0x20, B=0x21, C=0x22, D=0x23
ENDC

CONSTANT
EQU

Las dos se emplean para asignar expresiones a smbolos esos smbolos no


pueden luego cambiar de valor (son constantes). Sintaxis distinta, pero
igual efecto
CONSTANT longitud=0x10
longitud EQU 0x10

VARIABLE
SET

Las dos se emplean para asignar expresiones a smbolos esos smbolos


pueden cambiar de valor (son variables). Sintaxis distinta, pero igual efecto
VARIABLE BUFFER=0x20
BUFFER SET 0x20

#DEFINE

Se emplea para definir una etiqueta para una cadena de caracteres siempre
que aparezca la etiqueta, se sustituye directamente por la cadena
#DEFINE bit_0 STATUS,RP0

#UNDEFINE

Anula una asignacin previa realizada con #DEFINE


#UNDEFINE bit_0

ORG

Sita el cdigo que se vaya generando despus a partir de la posicin


especificada
ORG 0x100

END

Final de cdigo fuente


END

INCLUDE

RADIX

Se incluye el fichero especificado, se inserta en la posicin y ser


ensamblado
INCLUDE "c:\mplab\P16F84A.INC"
INCLUDE <P16F84A.INC>
Se especifica el RADIX que se est usando
RADIX dec ;pueden ser hex oct

13

Define el tipo de microcontrolador


PROCESSOR 16F877A

PROCESSOR

Para controlar la generacin del fichero de listado (.LST):


TITLE
SUBTITLE

Ttulo en la cabecera de las pginas


Subttulo (segunda lnea) en cabecera

SPACE

Inserta lneas en blanco

PAGE

Inserta salto de pgina

LIST

Habilita listado y opciones del mismo

NOLIST

Deshabilita generacin en fichero .LST

MESSG

Saca mensajes en el fichero .LST

ERROR

Tambin para sacar mensajes en .LST

ERRORLEVEL

Especifica tipos de mensajes que aparecern en fichero.LST


ERRORLEVEL 0 ;Errores, warnings y mensajes
ERRORLEVEL 1 ;Warnings y errores
ERRORLEVEL 2 ;Errores
Directivas de Ensamblado condicional

IF
ELSE
ENDIF

IFDEF

Grupo de directivas para ensamblar instrucciones si es cierta o no una


expresin
IF versin==1
MOVLW 0x0A ;Esto se ensambla si expresin es cierta o distinta
de 0
MOVWF PORTB
ENDIF
IF expresin
;Si la expresin es cierta se ensambla este grupo
Grupo 1 de Directivas e Instrucciones
ELSE
;y si es falsa, este otro
Grupo 2 de Directivas e Instrucciones
ENDIF
Puede sustituir a la IF. Se ensambla si est definida la etiqueta
#DEFINE DE_B_a_A 1
IFDEF DE_B_a_A
MOVF PORTB,w
MOVWF PORTA
ELSE
MOVF PORTA,W
MOVWF PORTB
ENDIF

IFNDEF

Puede sustituir a las dos directivas anteriores IF e IFDEF. Se ensambla si


no est definida la etiqueta

WHILE

Grupo de instrucciones y directivas que se ensamblan mientras la expresin

14

ENDW

sea cierta
VARIABLE i
i=0
WHILE i < CONTADOR
RETLW i
i+=1
ENDW
Macros
Una macro es un conjunto de instrucciones que pueden ser insertadas en el
cdigo fuente mediante una simple llamada a macro.
Una macro debe ser definida primero antes de poder ser llamada en
elcdigo fuente siguiente.
Una macro puede llamar a otra macro o a s misma de manera recursiva
Definicin de una macro:
Etiqueta MACRO argumento1, arguento2, argumento3, ...
Conjunto de Instrucciones
EXITM (salida intermedia opcional)
Ms instrucciones
ENDM

MACRO
EXITM
ENDM

Utilizacin de una macro:


Definiciones:
Banco_0 MACRO
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
Banco_1 MACRO
bsf STATUS,RP0
bcf STATUS,RP1
ENDM
Utilizacin:
movlw 0xF0
Banco_1
movwf TRISB
Banco_0

15

Das könnte Ihnen auch gefallen