Está en la página 1de 14

Programacin en Ensamblador

ATE-Universidad de Oviedo

Programacin en Ensamblador

LENGUAJE ENSAMBLADOR El nico lenguaje que entienden los microcontroladores es el cdigo mquina formado por ceros y unos del sistema binario. El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en cdigo mquina. El lenguaje ensamblador trabaja con nemnicos, que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar. La traduccin de los nemnicos a cdigo mquina entendible por el microcontrolador la lleva a cabo un programa ensamblador. El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente cdigo mquina, que suele tener la extensin *.hex.

ATE-Universidad de Oviedo

Programacin en Ensamblador

Cdigo Fuente .asm

Lenguaje ensamblador y Programa ensamblador

110100001.1100 Lenguaje Ensamblador

Cdigo Mquina .hex

Programa Ensamblador (MPASM)


ATE-Universidad de Oviedo

Programacin en Ensamblador

El cdigo fuente Est compuesto por una sucesin de lneas de texto. Cada lnea puede estructurarse en hasta cuatro campos o columnas separados por uno o ms espacios o tabulaciones entre s. Campo de etiquetas. Expresiones alfanumricas escogidas por el usuario para identificar una determinada lnea. Todas las etiquetas tienen asignado el valor de la posicin de memoria en la que se encuentra el cdigo al que acompaan. Campo de cdigo. Corresponde al nemnico de una instruccin, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn operando. Campo de comentarios. Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario.
ATE-Universidad de Oviedo

Programacin en Ensamblador

Campo de cdigo Puede corresponder ese cdigo a: Instrucciones: son aquellos nemnicos que son convertidos por el ensamblador en cdigo mquina que puede ejecutar el ncleo del microcontrolador. En la gama media (PIC16xxx) cada nemnico se convierte en una palabra en la memoria de programa Directivas. Pseudoinstrucciones que controlan el proceso de ensamblado del programa, pero no son parte del cdigo. Son indicaciones al programa ensamblador de cmo tiene que generar el cdigo mquina Macros: Secuencia de nemnicos que pueden insertarse en el cdigo fuente del ensamblador de una manera abreviada mediante una simple llamada.

ATE-Universidad de Oviedo

Programacin en Ensamblador
;Fichero CUENTA.ASM ; ;Programa de Prueba para la placa PICDEM-2 plus ;Por el Puerto B se saca en binario, el numero de veces ;que se puls la tecla que est conectada a la entrada RA4 ;si pulsada a cero y si libre a 1 ; LIST P=16F877 ;Directiva para definir listado y microcontrolador INCLUDE P16F877.INC ;Inclusin de fichero de etiquetas ORG 0 BSF STATUS,RP0 ;Paso al banco 1 de la memoria de datos CLRF TRISB ;para definir el PORTB como salida BCF STATUS,RP0 ;Volvemos al banco 0 CLRF PORTB ;Ponemos a cero el PORTB para que aparezca ese ;valor cuando se defina como salida ESPERA BTFSS PORTA,4 ;Esperamos a que se pulse la tecla CALL INCREMENTO ;en cuyo caso RA4 pasa a 0 y vamos a GOTO ESPERA ;subprograma de INCREMENTO ;Subprograma de INCREMENTO INCREMENTO INCF PORTB,F ;Si se puls incrementamos PORTB SOLTAR BTFSS PORTA,4 ;no salimos hasta que se haya soltado GOTO SOLTAR ;la tecla, en ese caso RA4 pasara a 1 RETURN ;y volvemos al programa principal END

Ejemplo de cdigo fuente

ATE-Universidad de Oviedo

Programacin en Ensamblador Campo de Operandos y Datos

El ensamblador MPASM (distribuido por Microchip) soporta los sistemas de numeracin decimal, hexadecimal, octal, binario y ASCII. Los nemnicos que tengan una constante como operando debern incluirla respetando la sintaxis que se indica a continuacin.
TIPO SINTAXIS

Decimal Hexadecimal Octal Binario ASCII Cadena

D<valor> H<valor> <valor>H O<valor> B<valor> A<carcter>

d<valor> h<valor> <valor>h

.<valor> 0x<valor> . o<valor> b<valor>

a<carcter> <cadena>

<carcter>

Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h
ATE-Universidad de Oviedo

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente: 1.- Juego de Instrucciones 2.- Directivas y Macros 3.- Organizacin de la Memoria interna: Programa Datos

ATE-Universidad de Oviedo

Programacin en Ensamblador

El juego de instrucciones Es un juego reducido de 35 instrucciones muy simples. Procesador RISC La mayora de las instrucciones se ejecuta en 4 ciclos de reloj; los saltos y llamadas a subprogramas se ejecutan en 8 (no se aprovecha pipeline) Todas las instrucciones tienen la misma longitud en la gama media: 14 bits. Por lo tanto el clculo del tiempo de ejecucin y de lo que ocupa un programa resulta simple Las instrucciones se pueden clasificar atendiendo a dos criterios:

1. Formato 2. Funcionalidad
9

ATE-Universidad de Oviedo

Programacin en Ensamblador

El juego de instrucciones: SEGN SU FORMATO 1.- Orientadas al byte 2.- Orientadas al bit

3.- Literales y de control

ATE-Universidad de Oviedo

10

Programacin en Ensamblador

1.- Instrucciones orientadas al byte Cmo se escriben en ensamblador? Operacin fuente, destino
Nemnico reservado

7 bits o algo que pueda sustituir a 7 bits, si es mayor se trunca 1 bit o algo que pueda sustituir a 1 bit, si es mayor se trunca d=0

Qu hacen?

W Opera con Operando en dir fuente Cmo se codifican?


13 8 7 6

Dnde va a parar el resultado?

d=1

Dir. fuente
0

c5 c4 c3 c2 c1 c0
Cdigo Operacin 6 bits

f6 f5 f4 f3 f2 f1 f0
Direccin operando fuente

Destino resultado 1 bit


ATE-Universidad de Oviedo

7 bits 11

Programacin en Ensamblador

2.- Instrucciones orientadas al bit Cmo se escriben en ensamblador? Operacin fuente, bit
Nemnico reservado

7 bits o algo que pueda sustituir a 7 bits, si es mayor se trunca 3 bits o algo que pueda sustituir a 3 bits, si es mayor se trunca

Qu hacen? Opera o explora el bit de la posicin #bit del operando fuente Cmo se codifican?
13 10 8 7 6 0

c3 c2 c1 c0 b2 b1 b0 f6 f5 f4 f3 f2 f1 f0
Cdigo Operacin 4 bits Bit a tratar 3 bits
ATE-Universidad de Oviedo

Direccin operando fuente 7 bits 12

Programacin en Ensamblador

3.- Instrucciones literales o de control Cmo se escriben en ensamblador? Operacin valor literal
Nemnico reservado 8 bits o algo que pueda sustituir a 8 bits, si es mayor se trunca en instrucciones del tipo GOTO CALL el valor es de 11 bits

Qu hacen? Operan con el valor literal directamente Cmo se codifican? c5 c4 c3 c2 c1 c0 k7 k6 k5 k4 k3 k2 k1 k0


13 Cdigo Operacin 6b 8 7 Valor con el que se opera 8 bits 0

En el caso GOTO y CALL

c2 c1 c0 k10 k9 k8 k7 k6 k5 k4 k3 k2 k1 k0
13

ATE-Universidad de Oviedo

Programacin en Ensamblador

Cmo leer la tabla?

TABLA-RESUMEN DE INSTRUCCIONES

Orientadas al byte: son 18

Orientadas al bit: son 4

Literales y de control: son 13


14

ATE-Universidad de Oviedo

Programacin en Ensamblador

CICLO DE INSTRUCCION Un ciclo de instruccin es el tiempo que se tarda en ejecutar una instruccin (salvo las instrucciones de salto) en el microcontrolador. En los PIC16, un ciclo de instruccin dura 4 ciclos de reloj. En una primera etapa, la instruccin es trada a la CPU. Esto lleva un ciclo de instruccin TCY. En la segunda etapa se ejecuta la instruccin. Esto lleva otro TCY.. No obstante, debido al solapamiento (pipelining entubado) de traer la instruccin actual y ejecucin de la instruccin previa, una instruccin se trae y otra se ejecuta cada TCY.

Oscilador

ATE-Universidad de Oviedo

15

Programacin en Ensamblador

CICLO DE INSTRUCCION

Pudiera haber un ciclo de instruccin de retardo si el resultado de ejecutar la instruccin anterior modifica el contenido del Contador de Programa (Ej: GOTO CALL). Esto implica suspender el entubado (pipelining) de las instrucciones durante un ciclo para que la instruccin a donde se salta se traiga a la CPU.

Oscilador

ATE-Universidad de Oviedo

16

Programacin en Ensamblador

El juego de instrucciones: SEGN SU FUNCIONALIDAD Instrucciones de CARGA


NEMNICO DESCRIPCIN FLAGS AFECTADOS

clrf clrw movf movlw movwf

f f,d k f

00 (f) 00 (W) (f) (destino) k (W) (W) (f)

Z Z Z Ninguno Ninguno

ATE-Universidad de Oviedo

17

Programacin en Ensamblador

Instrucciones de BIT
NEMNICO DESCRIPCIN FLAGS AFECTADOS

bcf bsf

f,b f,b

Pone a 0 el bit b del registro f Pone a 1 el bit b del registro f

Ninguno Ninguno

Instrucciones ARITMTICAS
NEMNICO DESCRIPCIN FLAGS AFECTADOS

addlw addwf decf incf sublw subwf

k f,d f,d f,d k f,d

(W) + k (W) (W) + (f) (destino) (f) - 1 (destino) (f) + 1 (destino) K - (W) (W) (f) - (W) (destino)
ATE-Universidad de Oviedo

C DC - Z C DC - Z Z Z C DC - Z C DC - Z
18

Programacin en Ensamblador

Instrucciones LGICAS
NEMNICO DESCRIPCIN FLAGS AFECTADOS

andlw andwf comf iorlw iorwf rlf rrf swap xorlw xorwf

k f,d f,d k f,d f,d f,d f,d k f,d

(W) AND k (W) (W) AND (f) (destino) (/f) (destino) (W) OR k (W) (W) OR (f) (destino) Rota (f) a izquierda (destino) Rota (f) a derecha (destino) Intercambia nibbles (f) (destino) (W) XOR k (W) (W) XOR (f) (destino)

Z Z Z Z Z C C Ninguno Z Z

ATE-Universidad de Oviedo

19

Programacin en Ensamblador

Instrucciones de SALTO
NEMNICO DESCRIPCIN FLAGS AFECTADOS

btfsc btfss incfsz goto

f,b f,b f,d k

Salta si el bit b de f es 0 Salta si el bit b de f es 1 (f) - 1 (destino) y salta si es 0 (f) + 1 (destino) y salta si es 0 Salta a la direccin k Instrucciones de manejo de SUBRUTINAS

Ninguno Ninguno Ninguno Ninguno Ninguno

decfsz f,d

NEMNICO

DESCRIPCIN

FLAGS AFECTADOS

call retfie retlw return

k k

Llamada a subrutina Retorno de una interrupcin Retorno con un literal en (W) Retorno de una subrutina
ATE-Universidad de Oviedo

Ninguno Ninguno Ninguno Ninguno


20

10

Programacin en Ensamblador

Instrucciones ESPECIALES
NEMNICO DESCRIPCIN FLAGS AFECTADOS

clrwdt nop sleep

Borra Timer del Watchdog No operacin Entra en modo de bajo consumo

/TO - /PD Ninguno /TO - /PD

ATE-Universidad de Oviedo

21

Programacin en Ensamblador

Campo f W b

Descripcin Posicin de memoria de datos (Register file address) (0x00 to 0x7F) Registro de trabajo(acumulador) n Bit dentro de una posicin de memoria (0-7) Valor literal, constante o etiqueta (puede de 8 o 11 bits) No importa el valor (0 1) El ensamblador genera cdigo con x=0.

Fichero con el juego de instrucciones completo. Juego_instr.pdf

k x

Seleccin de destino: d = 0: almacena el resultado en W, d = 1: almacena el resultado en una posicin de la memoria de datos f.

dest label TOS PC PCLATH GIE WDT TO PD [] () <> italics

Destino es el registro W o la posicicin de memoria de datos especificada nombre de etiqueta Cima de la pila Contador de programa Latch de la parte alta del contador de programa Bit de habilitacin de interrupcin global Temporizador Watchdog Time-out bit Power-down bit Optional Contenido Asignado a Register bit field En el conjunto de termino definido por el usuario ( courier)

Las claves del juego de instrucciones

ATE-Universidad de Oviedo

22

11

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente: 1.- Juego de Instrucciones 2.- Directivas y Macros 3.- Organizacin de la Memoria interna: Programa Datos

ATE-Universidad de Oviedo

23

Programacin en Ensamblador

Directivas de MPASM Controlan el proceso de ensamblado del programa, pero no son parte del mismo (tambin se conocen como pseudoinstrucciones). Hay ms de 50 directivas reconocidas por MPASM. Las ms usadas : END Es la nica directiva obligatoria. Indica al ensamblador dnde debe detener el proceso. Debe colocarse en la ltima lnea del programa. <etiqueta> EQU <expresin> El valor <expresin> es asignado a <etiqueta>. Estas directivas se suelen colocar al principio del programa y habitualmente se usan para definir constantes y direcciones de memoria. [<etiqueta>] ORG <expresin> Las instrucciones del cdigo fuente que siguen a esta directiva se ensamblan a partir de la posicin indicada por <expresin>.
ATE-Universidad de Oviedo

24

12

Programacin en Ensamblador

__CONFIG <expresin> [& <expresin> & ... & <expresin>] Permite indicar la configuracin elegida para la grabacin del PIC. Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC LIST P=16F877 Indica el tipo de microcontrolador utilizado. INCLUDE <p16F877.inc> o INCLUDE p16F877.inc Incluye en el programa un fichero donde se definen las etiquetas con las que se nombra a los diferentes registros y sus bits. Este fichero se encuentra en el directorio principal del programa ensamblador. Puede usarse esta directiva para incluir cualquier otro fichero (Ojo! El fichero de inclusin no puede terminar con una directiva END). DT <expr1> [, <expr2>, ... , <exprN>] Genera una instruccin retlw por cada expresin que incluya la directiva. Si la expresin es del tipo cadena, se generar una instruccin retlw por cada carcter de la misma.
ATE-Universidad de Oviedo

25

Programacin en Ensamblador

TODAS LAS DIRECTIVAS

Fichero adicionales: Directivas MPASM.pdf

Gua de uso del MPASM, MPLINK y MPLIB

ATE-Universidad de Oviedo

26

13

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente: 1.- Juego de Instrucciones 2.- Directivas y Macros 3.- Organizacin de la Memoria interna: Programa Datos

ATE-Universidad de Oviedo

27

14

También podría gustarte