estructura del lenguaje assembler

Upload: josbaney

Post on 19-Jul-2015

320 views

Category:

Documents


1 download

TRANSCRIPT

Estructura del lenguaje ensambladorUnidad 3. Programacin

El lenguaje ensamblador maneja una instrucciones y directivas necesarias para la programacin del microcontrolador.

1

Estructura de lenguaje Assembly Etiquetas Es una designacin de texto fcil de leer en una lnea de un programa, o una seccin de un programa donde el micro puede saltar a... - o el comienzo de un conjunto de lneas de un programa. La etiqueta empieza con una letra del alfabeto o con un subrayado "_". La longitud de la etiqueta puede ser de hasta 32 caracteres. Tambin es importante que la etiqueta se inicie en la primera columna.Start _end P123 Is it bigger?

Comentarios

Son una serie de palabras que escribe un programador para hacer el programa ms claro y legible. Se coloca despus de una instruccin, y debe comenzar con un punto y coma ";". Los comentarios no hacen parte del programa y no son reconocidos por el compilador.#define test . Ifdef test ; como la prueba fue definida ......; las instrucciones de estas lneas ejecutaran endif

2

Directivas Es similar a una instruccin, pero esta es independiente en el modelo de microcontrolador, y representa una caracterstica de la lengua propia ASM. En las Directivas se dan generalmente significados o propsitos a travs de variables o registros.Directiva usada frecuentemente: PROCESSOR 16F84 #include "p16f84.inc" _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

Directivas de controlIntercambios de una parte de texto por otra Sintaxis: # define []

#DEFINE

Descripcin: Cada vez que aparece en el programa, ser cambiado por el texto . Ejemplo: # define turned_on 1 # define turned_off 0 Incluir un archivo adicional en un programa Sintaxis: # include # include "file_name" Descripcin: esta directiva tiene el efecto como si todo el archivo se copi en un lugar donde la "incluyan". Si el nombre del archivo se encuentra en

#INCLUDE

los corchetes, se trata de un archivo de sistema y si est dentro de las comillas se trata de un archivo de usuario. La directiva "include" contribuye a una mejor distribucin del programa. Ejemplo: #include #include "subprog.asm" Da un valor numrico constante a la designacin

CONSTANT

Sintaxis: Constante = Descripcin: Cada vez que aparece en el programa, ser

3

sustituido por . Ejemplo: constant MAXIMUM=100 constant Lenght=30 Da un valor numrico variable a la designacin Sintaxis: Variable = Descripcin: Mediante el uso de esta directiva, las designaciones textuales cambian con un Valor particular. Difiere de la directiva CONSTANT en que despus de la aplicacin, el valor de la designacin de texto se puede cambiar. Ejemplo: variable level=20 variable time=13 Define el sintaxis de variables del ASM Sintaxis: set Descripcin: Para la variable se aade la expresin . La directiva SET es similar a la EQU, pero con el nombre de directiva SET, la variable puede ser redefinida seguida de una definicin. Ejemplo: level set 0 length set 12 level set 45 Define la constante del ASM Sintaxis: equ Descripcin: a el nombre de una constante se aade

VARIABLE

SET

EQU

un valor Ejemplo: five equ 5 six equ 6 seven equ 7 Define la direccin en la memoria del microcontrolador en la cual el programa est siendo grabado. Sintaxis: org

ORG

Descripcin: Esta es la directiva ms utilizada. Con la ayuda de esta directiva definimos que parte del programa ser iniciada en la memoria del programa. Ejemplo: Start org 000

4

movlw 0xFF movwf PORTB Termina el programa Sintaxis: end Descripcin: al final de cada programa es necesario escribir 'end' para que

END

el traductor de ASM sepa que no hay ms instrucciones. Ejemplo: movlw 0xFF movwf PORTB end

Directivas de configuracinAjuste de los bits de configuracin. Sintaxis: _config or _config, Descripcin: Oscilador, la aplicacin de temporizador de vigilancia (Watchdog) y circuito de reinicio interno se definen. Antes de utilizar esta directiva, el procesador debe ser definido usando la directiva PROCESSOR. Ejemplo: _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC Define el modelo del microcontrolador. Sintaxis: Processor

_CONFIG

PROCESSOR

Descripcin: la instruccin establece el tipo de microcontrolador en la programacin. Ejemplo: processor 16F84

5

Directivas de datosDefine un bloque para las constantes nombradas. Sintaxis: Cblock [] [:],[:] endc Descripcin: da valor a las constantes nombradas. Cada trmino siguiente recibe un valor mayor por 1 que su persecutor. Si el parmetro tambin es dado, entonces el valor dado en el parmetro es aadido a las siguientes constantes. Valor del parmetro es el valor inicial. Si no es dado, es considerado cero. Ejemplo: Cblock 0x02 first, second, third ;first=0x02, second=0x03, third=0x04 Endc cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc Finaliza el bloque de definicin constante. Sintaxis: endc Descripcin: la directiva es usada al final de la definicin de un bloque de constantes para que el traductor de ASM pueda saber que no hay ms constantes. Ejemplo: cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc Define un byte de datos. Sintaxis: []db [, ,.....,] Descripcin: reserva un byte en la memoria del programa. Cuando hay ms de un trmino los cuales necesitan asignrseles un byte para cada uno, se asignaran uno tras otro. Ejemplo: db 't', 00f, 'e', 's', 012

CBLOCK

ENDC

DB

DE

Definir el byte para la memoria EEPROM

6

Sintaxis: [] de [, ,....., ] Descripcin: esta directiva es usada para definir el byte de la memoria EEPROM. Aunque se puede utilizar para cualquier locacin en cualquier memoria. Ejemplo:org H'2100'de "Version 1.0" , 0 Definir la tabla de dato. Sintaxis: [] dt [, ,........., ]

DT

Descripcin: Esta directiva genera series de instruccin RETLW, una instruccin por cada trmino. Ejemplo: dt "Message", 0dt first, second, third

Operadores matemticos Smbolo $ ( ) ! high low * / % + > >= DescripcinEstado actual del contador del programa Corchete izquierdo Corchete derecho Complemento lgico Complemento Negacin (segundo complemento) Devuelve el byte ms alto Devuelve el byte ms inferior Multiplicador Divisor Divisor por mdulo Sumando Restando Moviendo a la izquierda Moviendo a la derecha Mayor que o igual goto $ + 3 1 + (d * 4) (Length + 1) * 256 if ! (a b) flags = -flags -1 * Length movlw high CTR_Table movlw low CTR_Table a=b*c a=b/c entry_len = tot_len % 15 tot_len =entry_len * 3 + 1 entry_len = (tot 1) / 8 val = flags > 1 if entry_idx > =num_entries

Ejemplo

7

> < num_entries if entry_idx < num_entries if entry_idx < = num_entries if entry_idx = = num_entries if entry_idx ! = num_entries flags = flags & ERROR_BIT flags = flags ERROR_BIT flags = flags | ERROR_BIT if (len ==512) && (b ==c) if (len ==512) || (b ==c) entry_index = 0 entry_index +=1 entry_index -=1 entry_index *= entry_length entry_index /= entry_length entry_index %=1 flags > = 3 flags & = ERROR_FLAG flags | = ERROR_FLAG flags = ERROR_FLAG 1++ 1-

| && || = += -= *= /= %= = &= |=

=

++ -

8

Instrucciones

Estn ya definidas por el uso de un microcontrolador especfico, por lo que slo nos queda seguir las instrucciones para su uso en lenguaje ASM. La forma en que escribimos una instruccin tambin se denomina "sintaxis".movlw H`01FF` goto Start

Comunicacin escrita correctamente

Para comprender las instrucciones se utilizan algunos trminos y abreviaturas que deben ser conocidos para leer adecuadamente las instrucciones.

Trminos utilizados Nemotecnicos: Es la abreviatura de la instruccin. Es la manera como es conocida en el programa. Operandos: Es la abreviatura de la instruccin. Es la manera como es conocida en el programa. Descripcin: Describe la accin de la operacin. Ciclos: Hace referencia al tiempo que tarda la instruccin en ejecutarse. Flags: Hace referencia a los bits especiales que indican el resultado de una operacin ejecutada con la instruccin.

9

Abreviaturas utilizadas Z: Es un bit espacial el cual indica que una operacin dio como resultado un cero (0). DC: Es un bit espacial el cual indica que ocurri un acarreo decimal como resultado de una operacin. C: Es un bit espacial el cual indica que como resultado de una operacin ocurri un acarreo. W: Se refiere al registro de trabajo. El registro de trabajo es un registro especial del microcontrolador encargado del transporte de datos entre registros. d: Es la abreviaturas de destino y se refiere al registro donde ser arrojado una operacin. f: Se refiere a un registro de propsito general tambin llamado de usuario.

Las instrucciones pueden clasificarse segn las acciones en: Instrucciones que manejan registros. Instrucciones que manejan bits Instrucciones de control y de operandos inmediatos

Instrucciones que Manejan Registros Nemnicos ADDWF ANDWF Operandosf,d f,d

DescripcinSuma W y f AND W con f

Ciclo1 1

FlagsC, DC, Z Z

10

CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF

f --f,d f,d f,d f,d f,d f,d f,d f --f,d f,d f,d f,d f,d

Borra f Borra W Complementa f Decrementa f Decrementa f, si es 0 salta Incrementa f Incrementa f, si es 0 salta OR entre W y f Mueve f Mueve W a f No opera Rota f a la izqda. a travs del carry Rota f a la dcha. a travs del carry Resta a f el reg. W Intercambia f XOR de W con f

1 1 1 1 1 (2) 1 1 1 1 1 1 1 1 1 1 1

Z Z Z Z Ninguno Z Ninguno Z Z Ninguno Ninguno C C C, DC, Z Ninguno Z

Instrucciones Que Manipulan Bits Nemnicos BCF BSF BTFSC Operandosf,b f,b f,b

DescripcinBorra bit de f Pone a 1 el bit de f Comprueba un bit de f y salta si es 0

Ciclo1 1 1 (2)

FlagsNinguno Ninguno Ninguno

11

Comprueba un bit de f

BTFSS

f,b

y salta si es 1

1 (2)

Ninguno

Instrucciones de Control y de Operandos Inmediatos Nemnicos Operandos Descripcin Ciclo Flags

ANDLW CALL CLRWDT GOTO IORLW MOVLW OPTION RETLW SLEEP TRIS XORLW

k k k k k k k k --f k

AND inmediato con W Llamada a subrutina Borra Watchdog Salto incondicional OR inmediato con W Mueve a W un valor inmediato Carga el registro OPTION Retorno y carga de W Pasa a estado de reposo Carga el registro OR exclusiva a W

1 2 1 2 1 1 1 2 1 1 1

Z Ninguno TO, PD Ninguno Z Ninguno Ninguno Ninguno TO, PD Ninguno Z

12

Instrucciones de condicinPrograma de salto condicional Sintaxis: If Descripcin: Si la condicin se cumple en , parte del programa que sigue sera ejecutado. Y si no se cumple, entonces la siguiente parte ELSE o ENDIF de la directiva sera ejecutado. Ejemplo: If level=100 goto FILL else goto DISCHARGE endif Es la alternativa de `IF` programa en bloque con trminos de condicin. Sintaxis: else Descripcin: Se utiliza con la Directiva IF como una alternativa si el trmino condicional no se cumple. Ejemplo: If time< 50 goto SPEED UP else goto SLOW DOWN endif Finaliza la seccin condicional del programa. Sintaxis: endif Descripcin: esta directiva se escribe para informar al traductor de ASM que es el final del bloque de condiciones.

IF

ELSE

ENDIF

Ejemplo: If level=100 goto LOADS else goto UNLOADS

13

endif Ejecucin de la seccin del programa siempre y cuando se cumpla la condicin. Sintaxis: whileEndw Descripcin: las lneas de programa entre While y ENDW se ejecutan mientras se cumpla la condicin. Si una condicin dej de ser vlida, el programa continuara ejecutando las instrucciones hasta la lnea ENDW. El nmero mximo de instrucciones entre While y ENDW puede ser de 100. Ejemplo: While i