Академический Документы
Профессиональный Документы
Культура Документы
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
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
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.
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.
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.
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
ciclo2
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.
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
;vectores de interrupcion o de arranque org 0 ;Origen goto inicio ;inicio de programa org 5
end