Você está na página 1de 35

Partes: 1, 2

1. Etiquetas (label)
2.
3. Nombres
4. Expresiones lgicas y aritmticas
5. Directivas del ensamblador
6. Problemas con las Macros
Para hacer la tarea del programador ms grata, se usan algunas convenciones. Cada uno puede adoptar
las que ms le agraden y ayuden para ser ms productivo. En general, las convenciones son
cualquier accin que facilita la revisin y comprensin de un programa, especialmente el que uno mismo ha
escrito cuando tiene que revisarlo algunos meses despus.
Comentamos algunas convenciones que usaremos:
Los ficheros de cdigo fuente llevarn la extensin *.ASM
Los ficheros de listado llevarn la extensin *.LST
Los ficheros de cdigo objeto llevarn la extensin *.OB]
Los ficheros de errores llevarn la extensin *.ERR
Los ficheros ejecutables en formato Intel Hex llevarn la extensin *.HEX
Comentario descriptivo del programa (utilizar una cabecera estandarizada).
Definir el microcontrolador que se usar (con las directivas LIST e INCLUDE).
Introducir las opciones de compilacin (que sern vistas ms adelante) (opcional).
Establecer las constantes que se usarn (con la directiva EQU).
Reservar espacios de memoria (directiva RES) (si es necesario).
Configurar los puertos.
Desarrollar el programa con comentarios, en lo posible explicando cada lnea de cdigo..
Los mnemnicos escritos en minscula y las constantes y variables en mayscula hacen que el cdigo escrito
sea ms visible.
Colocar las rutinas en el mismo sitio, todas contiguas.
Dibujar diagramas de flujo o escribir seudocdigo.
Su estructura en un programa ejemplo muy simple:

Hemos visto la estructura general. Ahora veremos la posicin de los elementos del cdigo por 4 columnas:

Columna 1: Etiquetas. Las etiquetas se rigen por las siguientes normas:
Debe situarse en la primera columna.
Debe contener nicamente caracteres alfanumricos.
El mximo de caracteres es de 31.
Columna 2: Operacin. En esta columna se situarn las instrucciones. El campo del cdigo de operacin es
el nico que nunca puede estar vaco; ste siempre contiene una instruccin o una directiva del ensamblador.
Columna 3: Operandos El campo de operandos o de direccin puede contener una direccin o un dato, o
puede estar en blanco. Normanmente contendr registros o literales con los que se operar (f, l o k , b y w).
Columna 4: Comentario. El campo del comentario o de etiquetas es opcional. Aqu se situar cualquier
comentario personalizado que deseemos. Estos son tiles para saber qu hace un programa sin tener que
descifrar el cdigo entero. El compilador (ensamblador) ignorar todo texto ms all del carcter punto y coma
";".
Los comentarios generalmente se sitan en la cuarta columna para describir la accin de una lnea de
cdigo, pero pueden situarse en cualquier parte de programa para describir cualquier otro evento, siempre
que estn despus del carcter ";" (semicolon en ingls).
Normalmente las columnas son separadas por una tabulacin. El espacio mnimo entre dos columnas es de
un carcter, que puede ser un espacio en vez de una tabulacin.
Delimitadores (separacin entre campos)
Los campos van separados slo con espacios y/o tabulaciones. No agregue nunca otros caracteres (comas,
puntos, etc.)
No utilice espacios extra, particularmente despus de comas que separan operandos.( Ej: movlw 5, w )
No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.
Etiquetas (label)
as etiquetas se sitan a la izquierda de las instrucciones y sirven para agrupar fragmentos de cdigo. Estos
fragmentos pueden ser de dos tipos:
El primer tipo no es un fragmento tal cual, si no que es un punto del programa al que podremos saltar de
manera incondicional a travs de la instruccin adecuada.
El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba con la instruccin RETURN
o RETLW, que veremos ms adelante.
Deberemos tener en cuenta:
La etiqueta es el primer campo en una lnea en lenguaje ensamblador y puede no existir.
Si una etiqueta est presente, el ensamblador la define como el equivalente a la direccin del primer byte
correspondiente a esa instruccin.
Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instruccin. El ensamblador
reemplazar sta etiqueta por el valor de cuando fue creada. Se usan frecuentemente en las instrucciones de
salto.
No puede existir ms de una etiqueta en la primera columna o primer campo de instruccin.
No pueden usarse como nombres de etiquetas a palabras ya reservadas por el ensamblador ( ORG, EQU,
etc.) o nombres de instrucciones ( movlw, call, nop, etc.)
Ejemplo:
DATO EQU 05h
INICIO movlw DATO
goto INICIO
La instruccin goto INICIO causa que la direccin de la instruccin con la etiqueta INICIO (movlw) se
cargue en el PC (Contador de Programa). Por lo tanto sta instruccin ser luego ejecutada.
No se permite el uso de nmeros o caracteres no alfabticos como primera letra de la etiqueta. Como regla
prctica: usar siempre letras, y en mayscula, al menos la primera.
Ejemplos:
TABLA2X2 Perrmitido
+PESO NO permitido!
=>SALIDA NO permitido!
-SALTO NO permitido!
5ALFA NO permitido!
Dato1 Permitido
Dato2 Permitido
Loop_A Permitido
Operandos y direcciones
Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el campo de operando o
direccin.
Sistemas de numeracin
Los ensambladores aceptan nmeros Hexadecimales, octales, binarios o decimal. Esta es la forma de
representarlos:
Hexadecimal:
0A00h
$0A00
Binario:
%01001011
B'00100101'
01011010b
Octal:
@123
123Q
Decimal:
D'250'
.250
Ejemplo:
movlw .100
Significa: "mover el nmero literal 100 en decimal al registro de trabajo W"
Ya hemos indicado que MPLAB es el entorno de desarrollo de Microchip e incluye el ensamblador MPASM,
para obtener informacin sobre la convencin utilizada por este ver MPASM, el ensamblador de Microchip
Nombres
Los nombres pueden aparecer en el campo de operando; stos son tratados como el dato que representan
(Ver directiva EQU).
Cdigos de caracteres
Algunos ensambladores permiten el uso de caracteres en ASCII. Por ejemplo:
data "hola 1,2,3" ;cadena de caracteres
data 'N' ;carcter sencillo
CHAR equ 't'
movlw 'R'
Expresiones lgicas y aritmticas
Los ensambladores permiten conbinaciones de datos con operandos especiales, aritmticos o lgicos.
stos operandos se llaman expresiones.
Por ejemplo:
REG1 EQU 05h
VALOR EQU 20h
movlw VALOR+2
addwf REG1,1
addwf REG1+1,1
En estos caso el compilador utilizar el resultado de sumar (VALOR+2) o (REG+1) como operando.
Directivas del ensamblador
Las instrucciones que podemos utilizar con un dispositivo son las que proporciona el fabricante para
su producto y que forman parte del llamado "repertorio de instrucciones". Pero al utilizar un programa
ensamblador podemos introducir adems instrucciones o comando que proporciona el propio ensamblador.
Estos comandos generalmente se utilizan para simplificar la tarea de programar, y reciben el nombre de
directivas.
Por lo tanto las directivas no se traducen directamente a instrucciones del lenguaje mquina sino que
asignan al programa ciertas reas de memoria, definen smbolos, designan reas
de RAM para almacenamiento de datos temporales, colocan tablas o datos constantes en memoria y permiten
referencias a otros programas.
Las directivas se utilizan como comandos escritos en el cdigo fuente para realizar un control directo o
ahorrar tiempo a la hora de ensamblar. El resultado de incorporar directivas se puede ver en el fichero *.LST,
despus de ensamblar el programa.
Para usar stas directivas o pseudo-operandos, el programador las coloca en el campo del cdigo de
operacin, y, si lo requiere la directiva, una direccin o dato en el campo de direccin.
Hay que aclarar que las instrucciones de los PIC's son nicas y que no hay nada mas, por ejemplo en el
PIC16F84A son slo 35 (ver instrucciones del PIC16F84A). Esto debe tenerse claro porque cuando se
comienza con el ensamblador pueden confundirse un poco las propias instrucciones de los PIC's con las
directivas propias del ensamblador.
A continuacin se exponen las ms relevantes.
Directiva EQU
El nombre viene de la palabra "equal", (igual)". La directiva EQU permite al programador "igualar" nombres
personalizados a datos o direcciones. Los nombres utilizados se refieren generalmente a direcciones de
dispositivos, datos numricos, direcciones de comienzo, direcciones fijas, posiciones de bits, etc. Un nombre
es ms descriptivo que una simple direccin y la tarea de programar se har mucho ms sencilla. Tambin
podemos asignar un nombre a una instruccin que repitamos varias veces a lo largo de un algoritmo, de
manera que sea mucho ms sencilla la programacin. A estos nombre que asignamos mediante esta directiva
se les denomina constantes, ya que el registro al que apuntan no variar durante el programa
Ejemplos:
temp equ 12
DATO EQU 22
PORT_A EQU 5
START EQU 0
CARRY EQU 3
TIEMPO EQU 5
Bank_1 EQU BSF STATUS,RP0
Estas lneas tambin pueden estn incluidas en un archivo aparte al ASM (vase directiva INCLUDE).
No siempre es necesario que con esta directiva se igualen posiciones de memoria a las etiquetas, ya que
podemos poner nombres a datos. Podemos definir una equivalencia con el nombre de otra equivalencia ya
definida y rtealizar operaciones matemticas. Por ejemplo, podemos calcular la frecuencia del ciclo mquina a
partir de la frecuencia de reloj con la finalidad de emplearla para hacer otros clculos de la manera que se
describe a continuacin:
PORT_B EQU PORT_A+1
PORT_C EQU PORT_A+2
FIN EQU START+100
FIN2 EQU START+200
clockrate EQU .4000000 ;frecuencia del cristal
fclk EQU clockrate/4 ;frecuencia del reloj interno
El valor del operando debe estar ya definido anteriormente, sino el compilador entregar un error.
Adems de esto, podemos igualar a las etiquetas cualquier otro tipo de valores que usemos, como, por
ejemplo, el cero y el 1 en el bit de destino:
W EQU 0
F EQU 1
Con esto ltimo, cuando usemos una instruccinen donde debamos especificar donde se almacenar el
resultado, en w o en un registro, en lugar de escribir :
1: para que el resultado se almacene en f.
0: para que el resultado se almacene en w.
Pondremos:
F: para que el resultado se almacene en f.
W: para que el resultado se almacene en w.
Generalmente esto ltimo no ser necesario realizarlo, siempre que incluyamos el fichero "INC"
correspondiente al PIC con el que estemos trabajando (vase directiva INCLUDE).
Directiva ORG
Esta directiva dice al ensamblador a partir de que posicin de memoria de programa se situarn las
siguientes instrucciones. Rutinas de comienzo, subrutinas de interrupcin y otros programas deben comenzar
en locaciones de memoria fijados por la estructura del microcontrolador. Recordemos que el 16F84 slo tiene
1024 posiciones de memoria flash para cdigo.
La directiva ORG hace al compilador colocar el cdigo que le sigue en una nueva direccin de memoria (la
salida del compilador no solo coloca los cdigos de operacin sino tambin las direcciones de cada
instruccin del programa). Usualmente se la utiliza para: reset, programas de servicios de interrupcin,
programa principal, subrutinas.
Ejemplos:
1) Inicia el programa en la posicin cero:
ORG 0x00
2) Inicia el programa en la posicin 0000h y luego pasa a la 0005h para no utilizar la posicin del vector de
interrupcin (0004 h)
ORG 0x00 ; El programa comienza en la direccin 0 y
GOTO inicio ; salta a la direccin 5 para sobrepasar
ORG 0x05 ; el vector de interrupcin, situado en la posicin 4
Inicio xxx...
3) Inicia el programa en la posicin 0000h y luego pasa a la 0005h para no utilizar la posicin del vector de
interrupcin (0004 h). Si se produce una interrupcin se pasa a la posicin interr. Las subrutinas comienzan a
partir de la direccin 0300h.
ORG 00h ;vector de reset
goto inicializa
ORG 04h ;vector de interrupcin
goto interr
ORG 05h
inicializa movlw 08h ;aqu comienza el programa
..
ORG 300h ;subrutinas
Subrutina1
.
return
Subrutina2
.
return
Directiva #INCLUDE
Esta directiva indica que archivos debern tomarse en cuenta a la hora de compilar el cdigo. Normalmente
se usa para incluir el archivo de PIC que el ensamblador tiene entre sus archivos, con el cual el compilador
ser capaz de reconocer todos los registros especiales y sus bits. Su uso nos recordar al #include
del lenguaje C. Esta lnea debe colocarse al principio, y tiene la siguiente sintaxis:
#INCLUDE ; Lista de etiquetas de microchip
En ciertas ocasiones gran cantidad errores son debidos a que el nombre del archivo puesto entre comillas
no se escribe correctamente.
Si utilizamos MPLAB, un entorno de desarrollo que proporciona gratuitamente Microchip, dispondermos de
los archivos con extension .INC para cada uno de los PIC desarrollados hasta la aparicin de la versin
de MPLAB que utilicemos. En estos archivos se definen todos los registros as como otros elementos de
acuerdo al microcontrolador que estemos utilizando.
Tambin podemos crear nuestros propios archivos "INC" con funciones, definiciones y subrutinas que
utilicemos a menudo en nuestro cdigo para evitar tener que copiarlas cada vez.
El archivo P16F84A.INC que viene con MPLAB contiene definiciones de registros, bits y bits de
configuracin. Los archivos INC pueden verse con cualquier editor de texto pero no se recomienda
modificarlos, para no perder compatibilidad con programas desarrollados por otros.
Utilizar el INC del PIC que estamos utilizando en nuestro programa no es obligatorio, y podemos omitirlo,
pero a cambio tendremos que definir los nombres de los registros que usemos o bien llamarlos por su posicin
de memoria.
Esto puede a la larga ser problemtico de manera que se recomienda utilizar los
archivos INC correspondientes al PIC que utilicemos porque adems de facilitar la creacin del programa al
no tener que recordar las direcciones reales de los registros tambin se facilita el paso de un programa
diseado para un microcontrolador hacia otro distinto.
Si utilizamos las posiciones de memoria con la direccin real, podemos hacer incompatibles las
operaciones entre registros. Por ejemplo, CLRF 0x05, borra el registro ubicado en esa direccion, que no es ni
mas ni menos que el PORTA (Puerto A) en el PIC16F84A. Pues bien, si queremos actualizarnos a otro
microcontrolador pero resulta que en este el registro 0x05 tiene otra funcin nos ser mucho mas dificil
actualizar el programa. Ahora bien, si hubisemos utilizado CLRF PORTA, y el .INC correspondiente al nuevo
microcontrolador ya se ocupar el ensamblador de realizar las correspondencias.
Y por supuesto siempre ser mas fcil recordar PORTA que no 0x05.
Tambin permite incluir otros programas. Por ejemplo:
#INCLUDE "DISPLAY.ASM"
Esto le dice al compilador que incluya el cdigo que se encuentra en el archivo DISPLAYY.ASM como si
fuese parte del propio programa. Esto es muy util para reutilizar cdigos realizados con anterioridad.
Directiva LIST
Este comando sirve para que el compilador tenga en cuenta sobre qu procesador se est trabajando. Este
comando debe estar en todo proyecto, situado debajo del "include", con la siguiente sintaxis.
LIST P=PIC16F84A
Directiva END
Al igual que las dos anteriores, esta debe ir incluida una sola vez en todo el programa. En concreto, esta
debe situarse al final, para indicar al ensamblador que el programa ha finalizado. Esta siempre debe estar
presente, aunque el flujo de nuestro programa acabe en un bucle.
Directiva #DEFINE
#DEFINE es una directiva muy util. Define se usa para crear pequeas macros. Con estas macros
podremos poner nombres a pequeos fragmentos de cdigo que nos facilitarn la realizacin y comprensin
del algoritmo.
Por ejemplo, podremos poner nombres a bits.
#define CERO STATUS,2
As, en vez de tener que llamar al bit por un numero y un registro, podremos usar directamente la palabra
CERO.
#define CINCO 5
Cada vez que se utilice la palabra CINCO ser reemplazada en el momento de la compilacin por el
nmero 5.
Otro ejemplo muy prctico es el de poner nombre a un fragmento de cdigo usado frecuentemente. Este
fragmento de cdigo, puede ser por ejemplo, el que conmuta entre los dos bancos.
BSF OPTION,RP0
BCF OPTION,RP0
Como cambiamos varias veces de banco a lo largo de un algoritmo, puede resultar ms prctico ponerle un
nombre.
#define BANCO1 BSF OPTION,RP0
#define BANCO0 BCF OPTION,RP0
De este modo bastar con poner BANCO1 o BANCO0 para conmutar entre los dos bancos de memoria de
manera que cada vez que se utilice la palabra BANCO1, en realidad se estar utilizando la instruccin BSF
STATUS,RPO
En el siguiente ejemplo:
#define salida PORTA,3
No tendremos necesidad de recordar cual era la patilla de salida, sino que solo lo mencionaremos
como salida. Cada vez que aparezca la palabra salida en el cdigo, sta ser interpretada como PORTA,1
que es una instruccin vlida. Podemos ponerlo a cero con la instruccin.
BCF salida
En vez de tener que poner.
BCF PORTA,3
Una cosa a tener en cuenta es que con la directiva INCLUDE, podemos prescindir del carcter almohadilla
(#), pero en el caso de la directiva DEFINE, no.
Esta directiva es muy util porque hace el cdigo ms fcil de leer y entender.
Directiva TITLE
Esta directiva no sirve de mucho, pero ser til para aquellos que quieran que el compilador tenga en
cuenta el ttulo que le ha puesto a su cdigo. Tiene la siguiente sintaxis:
TITTLE "Nombre del cdigo"
Este nombre aparecer en los archivos .lst (listados) que cree el compilador.
Directivas IF...ELSE...ENDIF
Algunos ensambladores permiten incluir o excluir partes del programa dependiendo de condiciones que
existan en el tiempo de compilacin.
La forma tpica es:
IF CONDICION
.
ELSE
.
ENDIF
Ejemplo:
SINK EQU 1 ; (cambiar por 0 en caso necesario)
IF SINK=1
BCF PORTA,0
ELSE
BSF PORTA,0
ENDIF
En este caso el valor de SINK har que el compilador utilice distintas instrucciones de cdigo.
Si la condicin es verdadera en el tiempo de compilacin, las instrucciones que estn entre IF y ELSE se
incluirn en el programa. Si la condicin es falsa se incluirn en el programa las instrucciones entre ELSE y
ENDIF.
Los usos tpicos son:
Para incluir o excluir variables extras
Para incluir cdigo de diagnstico en condiciones de testeo (DEBUG).
Para permitir datos de distintos tamaos.
Desgraciadamente, el ensamblado condicional, tiende a complicar la lectura del programa, por lo tanto, slo
debemos utilizarlo si es necesario.
Directiva MACRO
Esta directiva resulta muy potente y a diferencia de la directiva #define se pueden crear macros ms
extensas, lo que nos evitar tener que ejecutar reiteradamente fragmentos de cdigo idnticos. Cuando una
macro es invocada, esta es copiada por el ensamblador en el lugar de la invocacin dentro del cdigo fuente.
La macro se declara con la directiva MACRO, y termina con la directiva ENDM.
Creacin de una macro denominada activar:
activar macro
CLRF PORTA
BSF PORTB,2
endm
Hemos creado una macro llamada activar de manera que en nuestro cdigo cada vez que pongamos la
palabra activar, el ensamblador la reemplazar por CLRF PORTA... etc. hasta el final de la macro que
termina con la directiva ENDM (fin macro).
Las macros permiten asignar un nombre a una secuencia de instrucciones de manera que son tiles
cuando ocurren secuencias de instrucciones repetitivas. Luego se utiliza el nombre de la macro en el
programa como si se usara la secuencia de instrucciones anterior.
Las macros no son lo mismo que las subrutinas. El cdigo de las subrutinas aparece una sola vez en un
programa y la ejecucin del programa salta a la subrutina. En cambio, el ensamblador reemplaza cada
aparicin del nombre de la macro con la secuencia especificada de instrucciones. Por consiguiente la
ejecucin del programa no salta a la macro como una subrutina.
Ejemplo:
Archivo "MULX10.ASM"
MULX10 MACRO ;comienzo de la macro
MOVF tiempo,W ;guarda el tiempo en W
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
ADDWF tiempo ;le suma una vez ms
ADDWF tiempo ;le suma una vez ms
ENDM ;fin de la macro
Archivo "EJEMPLO1.ASM":
#INCLUDE "MULX8.ASM"
tiempo EQU 0Ch
resultado EQU 0Dh
MOVLW 20
MOVWF tiempo
MULX10
MOVWF resultado
END
Si ensamblamos "EJEMPLO1.ASM" notaremos que el listado final (EJEMPLO.LST) queda de la siguiente
forma:
tiempo EQU 0Ch
resultado EQU 0Dh
MOVLW 20
MOVWF tiempo
MOVF tiempo,W ;guarda el tiempo en W
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
ADDWF tiempo ;le suma una vez ms
ADDWF tiempo ;le suma una vez ms
MOVWF resultado
END
Problemas con las MACROS
Con las macros se puede trabajar rpidamente, pero pueden resultaer poco eficientes. Veamos un error
muy comn al utilizar macros, en este caso se utiliza una macro denominada MOVFF:
MULX10 MACRO ;comienzo de la macro
MOVF AUX1,W ;Mueve contenido de un registro a otro
MOVWF AUX2 ;a travs del acumulador
ENDM ;fin de la macro
Porcin de cdigo:
MOVLW .1 ;TEMP=1
MOVWF TEMP
DECF TEMP,F ;Z se va a 1
BTFSS STATUS,Z ;salta si o si
MOVFF AUX1,AUX2 ;Macro
MOVWF PORTA
; ...
En la lnea de la macro est el error porque los saltos (BTFSS) no pueden saltar macros. Las macros estn
compuestas por ms de una instruccin, y el salto se producir dentro de la misma.
El cdigo anterior con la macro incrustada sera:
MOVLW .1 ;TEMP=1
MOVWF TEMP
DECF TEMP,F ;Z se va a 1
BTFSS STATUS,Z ;salta si o si
MOVF AUX1,W ;lneas de anterior macro
MOVWF AUX2 ;
MOVWF PORTA
; ...
Otro tema importante, que se ilustra en este ejemplo, es que las macros pueden modificar registros (en este
caso W) de forma que el programador podra no tener en cuenta.
En el ejemplo anterior, PORTA se debera cargar con 1, que aparentemente era el valor de W, pero la
macro lo ha modificado, lo que resulta en otro error.
Ejemplos de macros
; ************************************************************
; macros.asm ;
; "MACROS para 16F84" ;
; ************************************************************
callz macro subbrutina
btfsc STATUS,Z
call subrutina
endm
callnz macro subrutina
btfss STATUS,Z
call subrutina
endm
movff macro f2,f1 ;(atencin, se destruye W)
movf f1,w
movwf f2
endm
movlf macro file,literal ;(atencin, se destruye W)
movlw literal
movwf file
endm
;Atencin, para usar estas macros ya debe estar activo el banco 1
CONF_PORTA macro dato
movlw dato
movwf TRISA
endm
CONF_PORTB macro dato
movlw dato
movwf TRISB
endm
;configurar Option Register:
CONF_OPTION macro dato
movlw dato
movwf OPTION_REG
endm
;configurar el registro de interrupciones:
CONF_INTCON macro dato
movlw dato
movwf INTCON
endm
SET_BANK_0 macro
BCF STATUS,RP0
endm
SET_BANK_1 macro
BSF STATUS,RP0
endm
;enable y disable all the mascarable interrupts (16F84):
EI macro
bsf INTCON,GIE
endm
DI macro
bcf INTCON,GIE
endm
#define iEnable EI
#define iDisable DI
;arrancar el timer:
RESET_TIMER macro
bcf INTCON,T0IF
endm
; inicializar timer antes de hacer RESET_TIMER para que arranque.
INIT_TIMER macro dato
movlw dato
movwf TMR0
endm
jmp macro salto
goto salto
endm
ret macro
return
endm
;Complemento a 1 de W:
comw macro
xorlw 0xff
endm
;Instrucciones de salto tipo Z80
jz macro _salto ;salta si zero
btfsc STATUS,Z
goto _salto
endm
jnz macro _salto ;salta si no zero
btfss STATUS,Z
goto _salto
endm
jc macro _salto ;salta si carry
btfsc STATUS,C
goto _salto
endm
jnc macro _salto ;salta si no carry
btfss STATUS,C
goto _salto
endm
; ************************************************************
; FIN
; ************************************************************
Ante cualquier duda consulta dirigirse a la pgina del colegio donde dicto el curso gratis
de Microcontroladores PIC: www.emfp5donbosco.com.ar



http://www.monografias.com/trabajos76/estructura-programa-ensamblador/estructura-programa-
ensamblador2.shtml


Estructura de un programa en lenguaje ensamblador.
Publicado por S3l3n1ty / domingo, noviembre 29, 2009 /

Pues llegados a este punto debemos prestar mucha atencin pues aqu ya vamos llegando a la parte prctica,
ya que las lecciones anteriores son importantes para conocer el funcionamiento de Assembler y para saber
como se comunica con las mquinas,
pero los conceptos que se detallan a continuacin son imprescindibles para aprender a manejar los
programas que se usan en la ingeniera inversa y aprender a desensamblar los programas, para ello
deberemos asimilar bien los siguientes puntos y las funciones principales de Assembler. No os preocupeis,
porque al final del curso har un resumen con lo ms importante para que nadie se me despiste.

Palabras reservadas

Ciertas palabras en lenguaje ensamblador estn reservadas para sus propsitos propios, y son usadas solo
bajo condiciones especiales. Por categoras, las palabras reservadas incluyen:

Instrucciones, como MOV y ADD, que son operaciones que la computadora puede ejecutar.
Directivas como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador.
Operadores, como FAR y SIZE, que se utilizan en expresiones.
Smbolos predefinidos, como @Data y @Model, que regresan informacin a su programa.
El uso de una palabra reservada para un propsito equivocado provoca que el ensamblador genere un
mensaje de error.
Ver palabras reservadas.

Identificadores Un identificador es un nombre que se aplica a elementos en el programa. Los dos tipos de
identificadores son: nombre, que se refiere a la direccin de un elemento de dato. y etiqueta, que se refiere a
la direccin de una instruccin. Las mismas reglas se aplican tanto para los nombres como para las etiquetas.
Un identificador puede usar los siguientes caracteres:

1.- Letras del alfabeto: Desde la A hasta la Z
2.- Dgitos: Desde el 0 al 9 (no puede ser el primer carcter)
3.- Caracteres especiales Signo de interrogacin ( ? )
Subrayado ( _ )
Signo de pesos ( $ )
Arroba ( @ )
Punto ( . ) (no puede ser el primer carcter)

El primer carcter de un identificador debe ser una letra o un carcter especial, excepto el punto. Ya que el
ensamblador utiliza algunos smbolos especiales en palabras que inician con el smbolo @, debe evitar usarlo
en sus definiciones.
El ensamblador trata las letras maysculas y minsculas como iguales. La longitud mxima de un identificador
es de 31 caracteres (247 desde el MASM 6.0). Ejemplos de nombres validos son COUNT, PAGE25 y $E10.
Se recomienda que los nombres sean descriptivos y con significado. Los nombres de registros, como AX, DI y
AL, estn reservados para hacer referencia a esos mismos registros. En consecuencia, en una instruccin tal
como:
ADD AX, BX
el ensamblador sabe de forma automtica que AX y BX se refieren a los registros. Sin embargo, en una
instruccin como:
MOV REGSAVE, AX

El ensamblador puede reconocer el nombre REGSAVE solo si se define en algn lugar del programa.

Instrucciones

Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados
son:
1. Instrucciones, tal como MOV y ADD, que el ensamblador traduce a cdigo objeto.
2. Directivas, que indican al ensamblador que realiza una accin especifica, como definir un elemento de
dato.
A continuacin esta el formato general de un enunciado, en donde los corchetes indican una entrada
opcional:

[identificador] operacin [operando(s)] [;comentarios]

Un identificador (si existe), una operacin y un operando (si existe) estn separados por al menos un espacio
en blanco o un carcter tabulador. Existe un mximo de 132 caracteres en una lnea (512 desde el MASM
6.0), aunque la mayora de los programadores prefiere permanecer en los 80 caracteres ya que es el numero
mximo que cabe en la pantalla. A continuacin se presentan dos ejemplos de enunciados:

IDENTIFICADOR OPERACION OPERANDO COMENTARIO
Directiva: COUNT DB 1 ;Nom, Op, Operando
Instruccin: MOV AX, 0 ;Operacin, 2 Operand


Identificador, operacin y operando pueden empezar en cualquier columna. Sin embargo, si de manera
consistente se inicia en la misma columna para estas tres entradas se hace un programa mas legible.

IdentificadorComo ya se explico, el termino nombre se aplica al nombre de un elemento o directiva definida,
mientras que el termino etiqueta se aplica al nombre de una instruccin.


OperacinLa operacin, que debe ser codificada, es con mayor frecuencia usada para la definicin de reas
de datos y codificacin de instrucciones. Para un elemento de datos, una operacin como DB o DW define un
campo, rea de trabajo o constante.

OperandoEl operando (si existe) proporciona informacin para la operacin que acta sobre el. Para un
elemento de datos, el operando identifica su valor inicial. Por ejemplo, en la definicin siguiente de un
elemento de datos llamado COUNTER, la operacin DB significa "definir byte", y el operando inicializa su
contenido con un valor cero:




Para una instruccin, un operando indica en donde realizar la accin. Un operando de una instruccin puede
tener una, dos o tal vez ninguna entrada. Aqu estn tres ejemplos:





Directivas para listar page y title La directiva PAGE y TITLE ayudan a controlar el formato de un listado de un
programa en ensamblador. Este es su nico fin, y no tienen efecto sobre la ejecucin subsecuente del
programa.
PAGE. Al inicio de un programa, la directiva PAGE designa el numero mximo de lneas para listar en una
pagina y el numero mximo de caracteres en una lnea. Su formato general es:

PAGE [longitud][, ancho]

El ejemplo siguiente proporciona 60 lneas por pagina y 132 caracteres por lnea:

PAGE 60, 132

El numero de lneas por pagina puede variar desde 10 hasta 255, mientras que el numero de caracteres por
lnea desde 60 hasta 132. La omisin de PAGE causa que el ensamblador tome PAGE 50, 80.


Title. Se puede emplear la directiva TITLE para hacer que un titulo para un programa se imprima en la lnea 2
de cada pagina en el listado del programa. Puede codificar TITLE de una vez, al inicio del programa. Su
formato general es:

TITLE Texto.

Para el operando texto, una tcnica recomendada es utilizar el nombre del programa como se registra en el
disco. Por ejemplo:

TITLE Prog1 Mi primer programa en ensamblador

Directiva segment Un programa ensamblado en formato .EXE consiste en uno o mas segmentos. Un
segmento de pila define el almacn de la pila, un segmento de datos define los elementos de datos y un
segmento de cdigo proporciona un cdigo ejecutable. Las directivas para definir un segmento, SEGMENT y
ENDS tienen el formato siguiente:



El enunciado SEGMENT define el inicio de un segmento. El nombre del segmento debe estar presente, ser
nico y cumplir las convenciones para nombres del lenguaje. EL enunciado ENDS indica el final del segmento
y contiene el mismo nombre del enunciado SEGMENT. El tamao mximo de un segmento es de 64K. El
operando de un enunciado SEGMENT puede tener tres tipos de opciones: alineacin, combinar y clase,
codificadas en este formato:

nombre SEGMENT alineacin combinar ' clase '

Tipo alineacin La entrada alineacin indica el limite en el que inicia el segmento. Para el requerimiento tpico,
PARA, alinea el segmento con el limite de un prrafo, de manera que la direccin inicial es divisible entre 16, o
10H. En ausencia de un operando hace que el ensamblador por omisin tome PARA.

Tipo combinar. La entrada combinar indica si se combina el segmento con otros segmentos cuando son
enlazados despus de ensamblar. Los tipos de combinar son STACK, COMMON, PUBLIC y la expresin AT.
Por ejemplo, el segmento de la pila por lo comn es definido como:

nombre SEGMENT PARA STACK

Puede utilizar PUBLIC y COMMON en donde tenga el propsito de combinar de forma separada programas
ensamblados cuando los enlaza. En otros casos, donde un programa no es combinado con otros, puede omitir
la opcin o codificar NONE.

Tipo clase La entrada clase, encerrada entre apstrofos, es utilizada para agrupar segmentos cuando se
enlazan. Se utiliza la clase 'code' para el segmento de cdigos, 'data' por segmento de datos y 'stack' para el
segmento de la pila. El ejemplo siguiente define un segmento de pila con tipos alineacin, combinar y clase:

nombre SEGMENT PARA STACK 'Stack'

Directiva assume Un programa utiliza el registro SS para direccionar la pila, al registro DS para direccionar el
segmento de datos y el registro CS para direccionar el segmento de cdigo. Para este fin, usted tiene que
indicar al ensamblador el propsito de cada segmento en el programa. La directiva para este propsito es
ASSEME, codificada en el segmento de cdigo como sigue:

OPERACION OPERANDO
ASSUME SS:nompila, DS:nomsegdatos, CS: nomsegcodigo,. . .

Los operandos pueden aparecer en cualquier orden. Al igual que otras directivas, ASSUME es solo un
mensaje que ayuda al ensamblador a convertir cdigo simblico a cdigo maquina; aun puede tener que
codificar instrucciones que fsicamente cargan direcciones en registros de segmentos en el momento de la
ejecucin.


1 PAGE 60,132
2 TITLE P04ASM1 ESTRUCTURA DE UN PROGRAMA .EXE
3;-------------------------------------------------------------------------------
4 STACKSG SEGMENT PARA STACK 'Stack'
5 ...
6 STACKSG ENDS
7;-------------------------------------------------------------------------------
8 DATASG SEGMENT PARA 'Data'
9 ...
10 DATASG ENDS
11;-------------------------------------------------------------------------------
12 CODESG SEGMENT PARA 'Code'
13 BEGIN PROC FAR
14 ASSUME SS:STACKSG, DS:DATASG,CS:CODESG
15 MOV AX, DATASG ;Obtiene la direccin del segmento de datos
16 MOV DS, AX ;Almacena direccin en DS
17 ...
18 MOV AX, 4C00H ;Peticion
19 INT 21H ;Salida al DOS
20 BEGIN ENDP
21 CODESG ENDS
22 END BEGIN


Directivas simplificadas de segmentos

Los ensambladores de Microsoft y de Borland proporcionan algunas formas abreviadas para definir
segmentos. Para usar estas abreviaturas, inicialice el modelo de memoria antes de definir algn segmento. El
formato general (incluyendo el punto inicial) es:

.MODEL modelo de memoria
El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o LARGE. Los requisitos para cada
modelo son:






Puede utilizar cualquiera de estos modelos para un programa autnomo (esto es, un programa que no este
enlazado con algn otro). El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales
tienen sus datos, cdigo y pila en un segmento. El modelo SMALL exige que el cdigo quepa en un segmento
de 64K y los datos en otro segmento de 64K. La directiva .MODELL genera automticamente el enunciado
ASSUME necesario.
Los formatos generales (incluyendo el punto inicial) para las directivas que define los segmentos de la pila, de
datos y de cdigo son:

.STACK [tamao]
.DATA
.CODE [nombre]

Cada una de estas directivas hace que el ensamblador genere el enunciado SEGMENT necesario y su
correspondiente ENDS. Los nombres por omisin de los segmentos (que usted no tiene que definir) son
STACK, DATA y TEXT (para el segmento de cdigo).
La figura 4.3 proporciona un ejemplo haciendo uso de las directivas simplificadas de segmento.

page 60,132
TITLE P04ASM2 (EXE) Operaciones de mover y sumar
;-------------------------------------------------------------------------
.MODEL SMALL
.STACK 64 ;Se define la pila
.DATA ;Se definen los datos
FLDA DW 250
FLDB DW 125
FLDC DW ?
;-------------------------------------------------------------------------
.CODE ;Se define el segmento de cdigo
BEGIN PROC FAR
MOV AX, @data ;Se asigna la direccin de DATASG (Prog. anterior)
MOV AX, FLDA ;Mover 0250 a AX
ADD AX, FLDB ;Sumar 0125 a AX
MOV FLDC, AX ;Almacenar suma en FLDC
MOV AX, 4C00H ;Salida a DOS
INT 21H
BEGIN ENDP ;Fin de procedimiento
END BEGIN ;Fin de programa


Mnemnico
Un mnemnico o nemnico es algo que pertenece o tiene que ver con la memoria
1
. Suele
aplicar a todos los campos de la escritura.
ndice
[ocultar]
1 Utilidad en informtica
o 1.1 Pseudocdigos
o 1.2 Trabajo sobre cdigo mquina
o 1.3 Ejemplos
2 Vase tambin
3 Referencias
4 Enlaces externos
Utilidad en informtica[editar]
En informtica, un mnemnico es una palabra que sustituye a un cdigo de
operacin (lenguaje de mquina), con lo cual resulta ms fcil la programacin, es de aqu de
donde se aplica el concepto de lenguaje ensamblador.
Un ejemplo comn de mnemnico es la instruccin MOV, que le indica al microprocesador que
debe asignar datos de un lugar a otro. El microprocesador no entiende palabras, sino nmeros
binarios, por lo que es necesaria la traduccin del trmino mnemnico a cdigo objeto.
En muchas ocasiones se puede tomar a nivel de usuario como las teclas de acceso rpido
que vemos en las ventanas, por ejemplo en un navegador encontramos el men tpico que
dice Archivo, Editar, Ver, entre otras opciones, el mnemnico sera el valor de la letra que esta
subrayada, as si presionamos la tecla alt y luego por ejemplo la A, se nos abrir el men de
archivo, es por esta razn que se puede decir que la A en el men resulta la tecla mnemnica
de Archivo, o la tecla de acceso rpido a la opcin Archivo.
El lenguaje Mnemnico tambin es utilizado en la programacin de numerosos Tipos de
Procesadores lgicos programables (PLC), haciendo ms rpida e eficiente la construccin de
programas de alta complejidad.
Pseudocdigos[editar]
En ingeniera de software, los nemnicos pueden ser utilizados para la creacin
de pseudocdigos, ya que son fciles de recordar y para pasarlos a un cdigo simblico
interpretable por un compilador, a una numeracin o a cdigo mquina, requerir la utilizacin
de un simple algoritmo.
Trabajo sobre cdigo mquina[editar]
Se pueden escribir algoritmos que conviertan el cdigo mquina en una numeracin, tal como
lo es un editor hexadecimal y esa numeracin puede ser asistida por una lista de nemnicos
que facilite el trabajo a los programadores sobre dicha numeracin.
Ejemplos[editar]
Representacin de nemnicos de lenguaje mquina para procesadores i386:
Cdigo binario Cdigo hexadecimal Cdigo ASCII Nemnico Accin

50 P ADD Suma al acumulador
00101101 B1 SUB Resta al acumulador
010000xx 40 @ INC Incrementa al registro
010010xx 12 DEC Decrementa al registro
00110010 32 Jxx Salto al registro o xx
Vase tambin[editar]
http://es.wikipedia.org/wiki/Mnem%C3%B3nico
ENSAMBLADOR
MC. Juan Gilberto Mateos Surez


1. INTRODUCCIN

Los ensambladores son programas que procesan los enunciados del programa
origen en lenguaje ensamblador y los traducen en archivos en lenguaje mquina
que son ejecutados por un microprocesador o un microcontrolador.
Los ensambladores permiten que los programas origen se escriban y se editen en
una computadora para generar un cdigo ejecutable en otra computadora. El
archivo en lenguaje objeto ejecutable resultante se carga y se ejecuta en el
sistema destino.

2. LENGUAJE ENSAMBLADOR

El lenguaje simblico que se utiliza para codificar los programas origen que se
procesan por el ensamblador es llamado lenguaje ensamblador.
Este lenguaje es una coleccin de smbolos mnemnicos que representan:
operaciones (mnemnicos de instrucciones para la mquina o de directrices para
el ensamblador), nombres simblicos, operadores y smbolos especiales.
El lenguaje ensamblador proporciona cdigos de operacin de los mnemnicos
para todas las instrucciones de la mquina contenidas en la lista de instrucciones.
Adems, el lenguaje ensamblador contiene mnemnicos directrices, los cuales
especifican acciones auxiliares que se llevan a cabo por el ensamblador.
Estas directrices no siempre son traducidas a lenguaje maquina.
Un programador escribe el programa origen en lenguaje ensamblador utilizando
cualquier editor de textos o procesador de palabras que sea capaz de producir una
salida de texto en ASCII.
Una vez que el cdigo origen ha sido escrito, el archivo origen es ensamblado
mediante su procesamiento a travs de algn ensamblador.

3. PROCESAMIENTO DE ENSAMBLADO

Este ensamblador es de dos pasadas.
Durante la primer pasada, el programa origen se lee para desarrollar la tabla de
smbolos.
Durante la segunda pasada el archivo objeto se crea (ensamblado) con referencia
a la tabla desarrollada en la primer pasada.
Durante la segunda pasada se crea el listado del programa origen.
Cada enunciado origen se procesa completamente antes de que el enunciado
siguiente se lea.
A medida que el enunciado se procesa el ensamblador examina los campos de
etiqueta, de cdigo de operacin y de operandos.
La tabla de cdigos de operacin se revisa para encontrar un cdigo operacional
similar.
Durante el procesamiento de un mnemnico correspondiente a un cdigo de
operacin normal, el cdigo mquina normal se inserta en el archivo objetivo.
La accin buscada por una directriz del ensamblador ocurre durante el
procesamiento de dicha directriz.
Cualquier error que detecta el ensamblador se muestra justamente antes de la
lnea que contiene dicho error.
An y cuando no se desee producir un listado origen, los errores se despliegan
para indicar que el procesamiento de ensamblado no se llev a cabo de manera
normal.

PROGRAMAS EN LENGUAJE ENSAMBLADOR

1. INTRODUCCIN

Los programas escritos en lenguaje ensamblador consisten de una secuencia de
enunciados origen.
Cada enunciado origen se compone de una secuencia de caracteres ASCII que
terminan con un retorno (ENTER).
El apndice A contiene un listado de los caracteres disponibles.

2. FORMATO DE LOS ENUNCIADOS ORIGEN

Cada enunciado origen puede contener hasta cuatro campos: una etiqueta o " *
" para una lnea de comentario, una operacin (ya sea el mnemnico de una
instruccin o una directriz para el ensamblador), un operando y un comentario.


2.1 Campo de Etiquetas

El campo de etiquetas aparece como el primer campo dentro de un enunciado
origen. El campo de etiquetas puede adoptar cualquiera de las siguientes formas:
1. Un asterisco ( * ) como el primer carcter en el campo de etiquetas indica
que el resto del enunciado origen es un comentario. Los comentarios son
ignorados por el ensamblador e impresos en el listado origen solamente
como informacin de programacin.
2. Un espacio de carcter en blanco (TAB o espacio) como primer carcter
indica que el campo de etiquetas se encuentra vaco. La lnea no tiene
una etiqueta y no es un comentario.
3. Un smbolo como primer carcter indica que la lnea tiene etiqueta. Estos
smbolos son las letras maysculas y minsculas ( a - z ), los dgitos ( 0 - 9 )
y caracteres especiales como punto ( . ), signo de pesos ( $ ) y subrayado (
_ ). Estos smbolos consisten de uno a quince caracteres, el primero de los
cuales debe ser alfabtico o un carcter especial punto o subrayado.
Todos los caracteres son significantes y las maysculas y minsculas son
distintas.
Un smbolo puede aparecer solamente una vez en el campo de etiquetas.
Si un smbolo aparece ms de una vez en el campo de etiquetas, toda referencia a
dicho smbolo ser marcada como error.
Con la excepcin de algunas directrices a la etiqueta se le asigna el valor del
contador de programa ( PC ) del primer byte de la instruccin o dato que se est
ensamblando.
El valor asignado a la etiqueta es absoluto.
De manera opcional, las etiquetas pueden ser terminadas con el smbolo de dos
puntos ( : ).
Si dicho smbolo es utilizado, no formar parte de la etiqueta, simplemente
servir como separacin entre la etiqueta y el resto del enunciado origen.
De esta forma, los siguientes fragmentos son equivalentes:
salta: deca salta deca bne salta bne salta
Una etiqueta puede aparecer por si sola en una lnea. El ensamblador interpreta
esto como "establece el valor de la etiqueta igual al valor actual del contador de
programa ( PC )".


2.2 Campo de Operaciones

El campo de operaciones aparece despus del campo de etiquetas y debe de
estar precedido por al menos un espacio en blanco.
El campo de operaciones debe de contener el mnemnico de un cdigo de
operacin legal o una directriz del ensamblador.
En este campo, los caracteres en maysculas son convertidos en minsculas antes
de ser revisados como un mnemnico legal.
Debido a esto " nop ", " NOP " y " NoP " son reconocidos como el mismo
mnemnico.
Los smbolos que aparecen en este campo pueden ser de uno de dos tipos.


I. Cdigo de Operacin.

Estos smbolos corresponden directamente a instrucciones de mquina.
El cdigo de operacin incluye a cualquier nombre e registro asociado con la
instruccin.
Estos nombres de registros no deben de estar separados del cdigo de operacin
por ningn espacio en blanco.
De esta forma, " clra " significa " limpia (poner en ceros) el acumulador ( A ) ",
pero " lr a " significa " limpia la localidad de memoria identificada por la etiqueta
a ".



II. Directriz.

Estos son cdigos de operacin especiales conocidos por el ensamblador, los
cuales ms bien controlan el proceso de ensamblado en vez de ser traducidos a
instrucciones mquina.



2.3 Campo de Operandos

La interpretacin del campo de operandos depende del contenido del campo de
operaciones.
El campo de operandos, si se requiere, debe de seguir al campo de operaciones y
debe de estar precedido por al menos un espacio en blanco.
El campo de operandos puede contener un smbolo, una expresin o una
combinacin de smbolos y expresiones separados por comas.
El campo de operandos de una instruccin mquina es utilizada para especificar
el modo de direccionamiento de la instruccin, as como el operando de la
instruccin.
La siguiente tabla resume los diferentes formatos del campo de operandos para la
familia HC11.



2.3.1 Sintaxis de Operandos para M68HC11

Para la familia de dispositivos mC´s de la familia M68HC11 se utilizan los
siguientes formatos de operandos:

Formatos de Operandos Modo de Direccionamiento
sin operando Acumulador e Inherente
< expresin Directo, Extendido o Relativo
# < expresin Inmediato
< expresin , X Indexado con el registro X
< expresin , Y Indexado con el registro Y
< expresin < expresin Set o Clear Bit
< expresin < expresin < expresin Prueba Bit y Bifurca

En este caso, los operandos de las instrucciones de manipulacin de bits estn
separados por espacios ya que el HC11 permite las instrucciones de
manipulacin de bits en direcciones indexadas.
Debido a esto, X o Y pueden ser agregados a la primer expresin en los
ltimos dos formatos arriba mostrados para formar el clculo de la direccin
indexada efectiva.



2.3.2 Expresiones

Una expresin es una combinacin de smbolos constantes, operadores
algebraicos y parntesis. La expresin especifica un valor, el cual ser utilizado
como operando.
Las expresiones pueden consistir de smbolos, constantes o del caracter *
(denotando el valor actual del contador de programa PC) unidos entre s por
alguno de los operadores: +, -, *, /, %, &, I, ^.



2.3.3 Operadores

Los operadores son iguales a los utilizados en el lenguaje de programacin C:
+ suma
- resta
* multiplicacin
/ divisin
% residuo despus de divisin
& and
I or
^ or exclusiva
Las expresiones son evaluadas de izquierda a derecha y las expresiones con
parntesis no estn previstas. La aritmtica es realizada con precisin de
enteros en complemento a dos con signo.



2.3.4 Smbolos

Cada smbolo se encuentra asociado con un valor entero de 16 bits, el cual es
utilizado en lugar del smbolo durante la evaluacin de la expresin.
El asterisco (*) utilizado en una expresin como smbolo representa el valor
actual del contador de localidades (el primer byte de una instruccin de varios
bytes ).



2.3.5 Constantes

Las constantes representan cantidades de informacin que no varan en su valor
durante la ejecucin del programa.
Las constantes pueden ser presentadas al ensamblador en uno de cinco posibles
formatos: decimal, hexadecimal, binario, octal o ASCII.
El programador le indica al ensamblador el formato del nmero con los
siguientes prefijos:

$ Hexadecimal
% Binario
@ Octal
ASCII
Las constantes sin prefijo son interpretadas como decimal.
El ensamblador convierte todas las constantes a cdigo mquina binario y son
desplegadas en el listado del ensamblado como valores hexadecimales.



2.4 Campo de Comentarios

El ltimo campo de un enunciado origen del ensamblador es el campo de
comentarios.
Este campo es opcional y solamente es impreso en el listado origen con
propsitos de documentacin.
El campo de comentarios es separado del campo de los operandos (o del campo
de operaciones sino se requiere operando) por al menos un espacio en blanco.
El campo de comentarios puede contener cualquier carcter imprimible ASCII.



3. SALIDA DEL ENSAMBLADOR

La salida del ensamblador incluye un listado opcional del programa origen y un
archivo objeto, el cual se encuentra en el formato de Archivo S de Motorola.
El ensamblador normalmente suprime la impresin del listado origen, pero esta
condicin y otras pueden ser alteradas a travs de diferentes opciones
proporcionadas en la lnea de comando que invoca al ensamblador.
Cada lnea del listado contiene un nmero de lnea de referencia, la direccin y
los bytes ensamblados y el enunciado origen.
Opcionalmente, el listado del ensamblado puede contener una tabla de smbolos
y otra de la aparicin de estas en el programa.
Estas tablas siempre son impresas al final del listado de ensamblado.

FUNCIONAMIENTO DEL ENSAMBLADOR

1. INTRODUCCIN
Los programas ensambladores de Motorola, del dominio pblico se nombran
"as*.exe", donde * se refiere al tipo de familia.
Por lo tanto para correr el ensamblador de la familia M68HC11 se utiliza el
comando "as11.exe".



2. INVOCACIN DEL ENSAMBLADOR

Para correr el ensamblador del HC11 introdzcase la siguiente lnea de
comando:
as11 archivo1 (archivo2 . . . ) ( - opcin1 opcin2 . . . )
Donde archivo1, archivo2, etc, son los nombres de los archivos origen que se
desean ensamblar. Los archivos origen pueden tener extensiones en su nombre,
pero el ensamblador no verifica si existe alguna extensin en particular (sin
embargo, no se utilice la extensin .s19, ya que sta es la extensin del archivo
objeto producido por el ensamblador. Al crearse dicho archivo objeto se perdera
el archivo origen, ya que sera sobre escrito en el disco).
Las opciones son uno o ms de las siguientes:
l Habilita el listado de salida
no Deshabilita el listado de salida (default)
cre Habilita la generacin de la tabla de referencia
s Habilita la generacin de la tabla de smbolos
c Habilita el conteo de ciclos
noc Deshabilita el conteo de ciclos
Utilice un espacio en blanco antes del signo menos (-) que precede a la opcin,
esto con el objetivo de separar la opcin del ltimo nombre de archivo.
Estas opciones tambin pueden ser indicadas al ensamblador mediante el uso de
la directriz OPT en el archivo origen.
El archivo objeto creado es escrito en el disco y se le da el nombre " nombre
archivo.s19 ", donde nombre archivo es el primer archivo origen indicado en
la lnea de comando.
Cualquier error y el listado opcional (si se especific) son desplegados en la
pantalla.
El listado y/o los mensajes de error pueden ser salvados en un archivo para su
posterior examinacin o impresin, esto se logra mediante un comando de
redireccionamiento de E/S en la lnea de comando.
En la PC, la redireccin de E/S se indica con el smbolo mayor que ( ), seguido
de un nombre de archivo nuevo o existente.



3. MENSAJES DE ERROR

Los mensajes de diagnstico de error son colocados en el archivo de listado
justo antes de la lnea que contenga el error. El formato de la lnea de error es:
Lnea_nmero: Descripcin del error o
Lnea_nmero: Peligro - - - Descripcin del error
Los errores en la primer pasada ocasionan la cancelacin de la segunda pasada.
Un mensaje de error del tipo peligro no ocasiona la cancelacin de la segunda
pasada, pero indica un posible problema.
Los mensajes de error estn diseados para ser explicados por s mismos.

DIRECTRICES DEL ENSAMBLADOR

1. INTRODUCCIN
Las directrices del ensamblador son instrucciones para el ensamblador mismo
en vez de ser instrucciones a ser traducidas directamente en el cdigo objeto.
A continuacin se muestran las directrices reconocidas por los ensambladores
como vlidas, se explican con ms detalle las ms usuales.
La notacin utilizada para describirlas es la siguiente:

( ) Denotan un elemento opcional
XYZ Los nombres de las directrices se dan en letras maysculas
< Los nombres de los elementos se dan en letras minsculas y
estn contenidas
dentro de los signos menor que y mayor que.
Todos los elementos fuera de estos smbolos debern de ser especificados tal
como se indica.



BSZ ( BLOCK STORAGE OF ZEROS )

( < etiqueta ) BSZ < expresin ( < comentario )
La directriz BSZ ( y ZMB ) ocasionan que el ensamblador asigne un bloque de
bytes y a cada byte se le asigna el valor inicial de cero.



EQU ( EQUATE SYMBOL TO A VALUE )

< etiqueta EQU < expresin ( < comentario )
La directriz EQU asigna el valor (otro que no sea el valor del contador de
programa) de la expresin en el campo de operandos a la etiqueta. La etiqueta
no puede ser redefinida en ninguna otra parte del programa. La expresin no
puede contener referencias posteriores o smbolos no definidos. Las igualdades
(EQU) con referencias posteriores son sealados como errores de fase ( Phasing
Errors ).



FCB ( FORM CONSTANT BYTE )

( < etiqueta ) FCB < exp ( , < exp , . . . , < exp ) ( < comentario )
Esta directriz ocasiona que el valor del operando sea almacenado en un solo
byte del programa objeto.



FCC ( FORM CONSTANT CHARACTER STRING )

( < etiqueta ) FCC < delimitador < cadena < delimitador ( < coment )
Esta directriz se utiliza para almacenar una cadena de caracteres ASCII en bytes
consecutivos de memoria.



FDB ( FORM DOUBLE BYTE CONSTANT )

Misma sintaxis que FCB
El valor del operando es almacenado en dos bytes consecutivos del programa
objeto.



FILL ( FILL MEMORY )

( < etiqueta ) FILL < expresin , < expresin
Ocasiona que el ensamblador inicialice un rea de memoria con un valor
constante. La primera expresin indica el valor constante y la segunda es el
nmero de bytes a ser inicializados.



OPT ( ASSEMBLER OUTPUT OPTIONS )

OPT < opcin ( , < opcin , . . . , < opcin ) ( < comentario )
La directriz OPT es utilizada para controlar el formato de la salida producida por
el ensamblador. Las opciones especificadas por medio de esta directriz tienen
jerarqua sobre aquellas invocadas en la lnea de comando del ensamblador.
Todas las opciones debern introducirse en letras minsculas.



ORG ( SET PROGRAM COUNTER TO ORIGIN )

ORG < expresin ( < comentario )
Esta directriz cambia el valor del contador de programa al valor especificado por
la expresin. Todos los enunciados siguientes son ensamblados en localidades
de memoria posteriores, empezando en el nuevo valor del PC. Si esta directriz
no aparece, el PC es inicializado a un valor de cero.



PAGE ( TOP OF PAGE )

PAGE
Ocasiona que el ensamblador avance el papel al principio de la siguiente hoja. Si
el listado no se est produciendo, esta directriz no tendr efecto.



RMB ( RESERVE MEMORY BYTES )

( < etiqueta ) RMB < etiqueta ( < comentario )
Ocasiona que el valor del PC sea avanzado en la cantidad especificada por la
expresin.



ZMB ( ZERO MEMORY BYTES )

Igual a BSZ.

APNDICE A

FORMATO DEL LISTADO DEL ENSAMBLADOR

El listado del ensamblador tiene el siguiente formato:
LNEA# DIR BYTES CDIGO OBJETO [ # CICLOS ] LNEA ORIGEN
LNEA# es un nmero decimal de 4 dgitos impreso como una referencia para la
tabla de aparicin de smbolos.
DIR es el valor hexadecimal de la direccin del primer byte del cdigo objeto
para esta direccin.
BYTES CDIGO OBJETO es el cdigo objeto resultante del ensamblado de la
lnea origen dado en hexadecimal.
#CCLOS solamente aparecer en el listado si la opcin c est habilitada.
Aparece dentro de corchetes para ayudar a distinguir este valor del resto de la
lnea origen. La LNEA ORIGEN es reimpresa exactamente igual que en el
programa fuente, incluyendo las etiquetas.
La tabla de smbolos ser impresa cuando la opcin s sea habilitada. La tabla
de smbolos tiene el siguiente formato:



SMBOLO DIRECCIN

El SMBOLO es tomado directamente del campo de etiquetas del programa
fuente u origen. DIRECCIN es la direccin hexadecimal de la localidad a la cual
se hace referencia con el smbolo.
La tabla de aparicin de smbolos ser impresa cuando la opcin cre sea
seleccionada. La tabla de aparicin de smbolos tiene el siguiente formato:



SMBOLO DIRECCIN * LOC1 LOC2 LOC3 . . .

SMBOLO y DIRECCIN son lo mismo antes mencionado. La primera localidad en
la lista est marcada con un asterisco * para indicar la lnea donde el smbolo
fue definido. Las LOCs subsecuentes son el nmero decimal de lnea del listado
del ensamblador donde aparecen las etiquetas.

Você também pode gostar