Вы находитесь на странице: 1из 30

Microcontroladoresslogan Add your company

Lenguaje Ensamblador
Ing. Marcelo Bastida Tapia

LOGO

Lenguaje Mquina

Se formo con ceros y unos utilizando claves binarias almacenadas en la memoria de la computadora como grupos de instrucciones llamados programas

Instruccin

Comentario

1000101111000011 MOV AX,BX. Copia el contenido de BX en AX

Lenguaje Ensamblador

Permite escribir instrucciones en forma simblica utilizando nombres fciles de recordar que se dan a las operaciones y operandos de cada instruccin (nemnicos).
Instruccin
MOV BX,200

Comentario
Coloca 200 decimal en el registro BX

Lenguaje de Alto Nivel

Permiten redactar programas en una forma prxima al lenguaje de especificacin del problema del usuario y relativamente independiente de la computadora que se este usando.

Instruccin Suma=a+b;

Comentario
Suma los valores de las variables a y b y asigna el resultado a la variable Suma

Qu es el Lenguaje Ensamblador?
Es un lenguaje de programacin de bajo nivel especfico de un microprocesador o familia de microprocesadores. Diseado para coincidir con el conjunto de instrucciones de mquina de un microprocesador.

Lenguaje Ensamblador
Cada instruccin en lenguaje ensamblador (ASM) tiene una correspondencia uno a uno con una instruccin en lenguaje de mquina (ML). En el caso de los lenguajes de alto nivel (HLL), cada una de sus instrucciones equivale a mltiples instrucciones en lenguaje de mquina.

Por qu aprender Lenguaje Ensamblador?

Para conocer cmo el cdigo de un lenguaje de alto nivel se traduce en lenguaje de mquina. Esto nos permite conocer los detalles ocultos en el cdigo generado por un lenguaje de alto nivel. Para manejar directamente el hardware de la computadora Mediante el acceso a memoria, controlador de video, tarjeta de sonido, teclado, etc. Para acelerar aplicaciones con acceso directo al hardware Por ejemplo, escribiendo directamente a los puertos de E/S en lugar de hacer una llamada al sistema operativo Porque un buen cdigo en lenguaje ensamblador es ms rpido y pequeo. Por ejemplo, para reescribir en lenguaje ensamblador reas crticas de cdigo.

Aplicaciones del Lenguaje Ensamblador


Los programas de aplicacin raramente estn escritos completamente en lenguaje ensamblador. nicamente las partes crticas son escritas en ASM, por ejemplo: Una subrutina (llamada desde los programas en HLL) es escrita en ASM para acceso directo al hardware. Controladores de dispositivos (Device drivers llamados desde el sistema operativo) El ASM frecuentemente es usado para programas de sistemas embebidos almacenados en dispositivos PROM Cartuchos de juegos para computadora, Microcontroladores (automviles, plantas industriales...), equipo de telecomunicacin Aunque el ASM es muy rpido y compacto tiene como inconveniente el ser especfico de un microprocesador.

Ensamblador

Un ensamblador es un programa que convierte el cdigo en lenguaje ensamblador en cdigo de lenguaje de mquina.
mov al,5 (Lenguaje Ensamblador) 1011000000000101 (Lenguaje de Mquina)
el byte ms significativo es el opcode para mover al registro AL el byte menos significativo es el operando 5

La programacin directa en lenguaje de mquina, no ofrece ninguna ventaja sobre la programacin en ensamblador.

OPCODES
Cada instruccin de un PIC est formada por una palabra de 14 bits y a su vez est dividida en un tipo de cdigo denominado OPCODE, que especifica el tipo de instruccin, y uno o ms operandos que adems especifican la operacin de la instruccin. Todo ello forma un mnemnico o instruccin. Las instrucciones se componen del cdigo de la instruccin y de algunos operandos, que son los datos con los que la instruccin en s, deber hacer operaciones dentro del microcontrolador.

Operandos
f Registro de direcciones de registros (file register address) (0x00-0x7F) w Registro de trabajo (Working Register) b Direccin de un bit dentro de un registro de 8 bits (0-7) l k Literal d Bit de destino x Los bits que estn representados por este tipo de dato no tienen ninguna funcin y su valor lo define el compilador.

f (file register)
Este carcter se usa para definir registros de cualquier tipo. Cualquier instruccin que contenga este campo, contendr la direccin de un registro, no su contenido. Un registro puede variar entre las direcciones 00h y 7Fh. Ejemplo: BSF f,b -La instruccin indica que el bit b de un registro va a colocarse en 1 lgico BSF STATUS,5 ;Coloca en 1 lgico el bit 5 del registro ;status

w (working register)
W (w) da nombre al acumulador de los PICs. Este no es un registro situado en un banco de memoria, si no que es independiente. A diferencia que el anterior, cuando nos referimos a l, nos referimos al contenido, no al continente, puesto que el continente es nico, w, y ya viene dado por la instruccin. Su uso es muy sencillo, pues se usa principalmente para pasar informacin de un registro a otro, o para contener la informacin entre dos o ms instrucciones. Es como un portapapeles, para hacernos una idea.

Elementos del programa en ensamblador


b (bit addres dentro de un registro) Esta letra define la direccin de un bit dentro de un byte. En ciertas ocasiones en vez de modificar o acceder a bytes tendremos que modificar o acceder a bits. De esta manera podemos especificar a una instruccin que posicin ocupa el bit sobre el cual recaer la accin que esta ejecute. Ejemplo: BSF f,b -La instruccin indica que el bit b de un registro va a colocarse en 1 lgico BSF STATUS,5 ;Coloca en 1 lgico el bit 5 del registro ;status

l o k (literal)

Este valor ser almacenado en la propia instruccin en tiempo de ensamblado, esto significa que son los valores que se introducen en las instrucciones para que trabaje con ellos . El valor que se puede introducir dentro de un literal est comprendido entre 0 y 255, ya que es el mximo que puede representar un byte. No se debe olvidar que este valor debe ser introducido en hexadecimal. Siendo as, el valor que puede almacenar est comprendido entre 0 y FF.

d (destiny bit)
Donde se encuentre esta letra, se debe especificar donde se alamacenar el resultado de una instruccin, en w o en un registro. Puesto que esto no es un lenguaje de alto nivel, no se puede almacenar el resultado de una operacin sobre una tercera variable o registro, as que este deber ser almacenado en el registro origen (sobrescribindose), o en el acumulador. Esto se define a travs de dos valores: o 1: El resultado se almacenar en f o 0: El resultado se almacenar en W

label o etiquetas
Las etiquetas se sitan a la izquierda de las instrucciones y sirven para agrupar fragmentos de cdigo. Estos fragmentos pueden ser de dos tipos:
o El primer tipo no es un fragmento tal cual, si no que es un punto del programa al que se puede saltar de manera incondicional a travs de la instruccin adecuada call diezms ;salta a la subrutina llamada diezms o El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba con la instruccin RETURN o RETLW. diezms bcf
movlw movwf btfss goto return

intcon,t0if ;limpia el registro de sobreflujo


0xd9 tmr0 intcon,t0if ;revisa si el registro es 1 y si no continua ciclo2 ;regresa

ciclo2

Directrices del ensamblador


Las instrucciones ms importantes que se pueden manejar son las que proporciona el fabricante de un microprocesador para su producto. Pero existen otras genricas para gran cantidad de microcontroladores, que no son para el manejo del PIC, si no del ensamblador. Estos comandos generalmente se usan para simplificar la tarea de programar, y reciben el nombre de directrices.

Directriz EQU
El nombre de esta instruccin viene de la palabra equal, o lo que es lo mismo: igual. Sirve para asignar la posicin de cualquier registro a un nombre personalizado que se le haya dado. Si el nombre es ms descriptivo que una simple direccin, la tarea de programar se har mucho ms sencilla. Tambin se puede asignar un nombre a una instruccin que se repite varias veces a lo largo del algoritmo, de manera que sea mucho ms sencillo el tener que programarlo. A estos nombres se les denomina constantes, ya que el registro al que apuntan no variar durante el programa
Ej: temp equ 12 DATO EQU 22 Bank_1 EQU BSF STATUS,RP0

Directriz ORG
Esta directriz indica al ensamblador a partir de que posicin de memoria se situarn las siguientes instrucciones. Recuerda que el 16F84 slo tiene 1024 posiciones de memoria flash para cdigo.

Ej:
Inicia el programa en la posicin cero ORG 0x00 ; El programa comienza en la direccin 0 y GOTO inicio ; salta a la direccin 5 para sobrepasar ; el vector de interrupcin, situado en la posicin 4 ORG 0x05 Inicio xxx..

Directriz INCLUDE
Esta instruccin ndica qu archivos debern tomarse en cuenta a la hora de compilar el cdigo. Normalmente se usa para incluir el archivo del PIC que el ensamblador tiene entre sus archivos, con el cual el compilador ser capaz de reconocer todos los registros especiales y sus bits. Esta lnea debe colocarse al principio, y tiene la siguiente sintaxis: include "P16F877A.INC"

Directriz 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=16F877A

Directriz 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.

... retlw 0x00 retlw 0x20 end

;fin del programa

Directriz #DEFINE
Define se usa para crear pequeas macros. Con estas macros es posible poner nombres a pequeos fragmentos de cdigo que facilitarn la realizacin y comprensin del algoritmo. Por ejemplo, poner nombres a bits. # define CERO STATUS,2 Otro ejemplo muy prctico es el de poner nombre a un fragmento de cdigo usado frecuentemente. #define BANCO1 BSF OPTION,RP0 #define BANCO0 BCF OPTION,RP0

Directriz TITLE

Esta directriz 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.

Directriz MACRO
A diferencia de la instruccin define, esta directriz permite crear macros ms extensas que #define, que evitarn 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 directriz MACRO, y termina con la directriz ENDM.

Ej:
jz MACRO btfsc goto ENDM movf xorwf jz JumpLabel ; Salta aqu STATUS, Z; Pregunta si el JumpLabel ; Flag est a uno

; ahora se invoca
AnyReg, w Constante ThisLabel ; Lnea de cdigo ; Compara la variable con Constante ; Salta a la macro

Estructura del programa en ensamblador


Esta estructura contiene los siguientes elementos o partes que deben ser codificadas:
Comentario descriptivo del programa (opcional, pero recomendable) Definir el microcontrolador que se usar (con las directrices LIST e INCLUDE). Introducir las opciones de compilacin (que sern vistas ms adelante)(opcional) Establecer las constantes que se usarn (con la directriz EQU). Reservar espacios de memoria (directriz RES) (si es necesario) Configurar los puertos Desarrollar el programa Poner comentarios

Estructura del programa en ensamblador


;Texto descriptivo del programa list p=16Fxxx include "P16Fxxx.INC" __config 0xYYYY ;Definicion de variables variable_1 equ variable_2 equ .... variable_n equ ;PIC con el que se va a trabajar ;Archivos con direcciones con su respectiva etiqueta ;Palabra de configuracin

0xYY 0xYY 0xYY

;vectores de interrupcion o de arranque org 0 ;Origen goto inicio ;inicio de programa org 5

Estructura del programa en ensamblador


;Programa principal inicio ;Configuracin del PIC ;Ciclo principal etiqueta ;etiqueta del ciclo principal goto etiqueta ;cierra ciclo principal ;rea de Subrutinas ;Texto descriptivo de la subrutina 1 etiqueta ;etiqueta de la subrutina return ;regresa de subrutina 1

end

;fin del programa

Вам также может понравиться