Programacion en Ensamblador

download Programacion en Ensamblador

of 14

Transcript of Programacion en Ensamblador

  • 1ATE-Universidad de Oviedo

    Programacin en Ensamblador

    1

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    2

    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.

  • 2ATE-Universidad de Oviedo

    Programacin en Ensamblador

    3

    Cdigo Fuente.asm

    110100001.1100

    Cdigo Mquina.hex

    ProgramaEnsamblador

    (MPASM)

    Lenguaje ensambladory

    Programa ensamblador

    LenguajeEnsamblador

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    4

    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.

  • 3ATE-Universidad de Oviedo

    Programacin en Ensamblador

    5

    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 programaensamblador de cmo tiene que generar el cdigo mquina

    Macros: Secuencia de nemnicos que pueden insertarse en el cdigofuente del ensamblador de una manera abreviada mediante una simple llamada.

    Campo de cdigo

    Puede corresponder ese cdigo a:

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    6

    ;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 microcontroladorINCLUDE P16F877.INC ;Inclusin de fichero de etiquetasORG 0BSF STATUS,RP0 ;Paso al banco 1 de la memoria de datosCLRF TRISB ;para definir el PORTB como salidaBCF STATUS,RP0 ;Volvemos al banco 0CLRF PORTB ;Ponemos a cero el PORTB para que aparezca ese

    ;valor cuando se defina como salidaESPERA BTFSS PORTA,4 ;Esperamos a que se pulse la tecla

    CALL INCREMENTO ;en cuyo caso RA4 pasa a 0 y vamos aGOTO ESPERA ;subprograma de INCREMENTO

    ;Subprograma de INCREMENTOINCREMENTO

    INCF PORTB,F ;Si se puls incrementamos PORTBSOLTAR

    BTFSS PORTA,4 ;no salimos hasta que se haya soltadoGOTO SOLTAR ;la tecla, en ese caso RA4 pasara a 1RETURN ;y volvemos al programa principalEND

    Ejemplo de cdigo fuente

  • 4ATE-Universidad de Oviedo

    Programacin en Ensamblador

    7

    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.

    Decimal .dD

    Hexadecimal0xhH

    h .HOctal oOBinario bBASCII aACadena

    TIPO SINTAXIS

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

    Campo de Operandos y Datos

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    8

    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

  • 5ATE-Universidad de Oviedo

    Programacin en Ensamblador

    9

    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

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    10

    El juego de instrucciones: SEGN SU FORMATO

    1.- Orientadasal byte

    2.- Orientadasal bit

    3.- Literales yde control

  • 6ATE-Universidad de Oviedo

    Programacin en Ensamblador

    11

    Operacin fuente, destino

    W Opera con Operando en dir fuente

    1.- Instrucciones orientadas al byte

    c3c4c5 c0c1c2

    13 8 7 6 0

    Cdigo Operacin

    6 bits

    Direccin operando fuente

    7 bitsDestinoresultado 1 bit

    W

    Dir. fuented = 1

    d = 0

    d f6 f5 f4 f3 f2 f1 f0

    Cmo se escriben en ensamblador?

    Qu hacen?

    Cmo se codifican?

    Nemnico reservado

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

    1 bit o algo que puedasustituir a 1 bit, si es mayor se trunca

    Dnde va a parar el resultado?

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    12

    Operacin fuente, bit

    Opera o explora el bit de la posicin #bit del operando fuente

    2.- Instrucciones orientadas al bit

    c1c2c3 b1b2c0

    13 8 7 6 0

    Cdigo Operacin

    4 bits

    Direccin operando fuente

    7 bits

    Bit a tratar

    3 bits

    b0 f6 f5 f4 f3 f2 f1 f0

    Cmo se escriben en ensamblador?

    Qu hacen?

    Cmo se codifican?

    Nemnico reservado

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

    3 bits o algo que puedasustituir a 3 bits, si es mayor se trunca

    10

  • 7ATE-Universidad de Oviedo

    Programacin en Ensamblador

    13

    Operacin valor literal

    Operan con el valor literal directamente

    3.- Instrucciones literales o de control

    c3c4c5 c0c1c2

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

    k7 k6 k5 k4 k3 k2 k1 k0

    Cmo se escriben en ensamblador?

    Qu hacen?

    Cmo se codifican?

    Nemnico reservado

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

    en instrucciones del tipoGOTO CALL el valor es de 11 bits

    c0c1c2 k8k9k10 k7 k6 k5 k4 k3 k2 k1 k0En el caso

    GOTOy CALL

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    14

    TABLA-RESUMEN DE INSTRUCCIONES

    Orientadasal byte: son 18

    Orientadasal bit: son 4

    Literalesy de

    control: son 13

    Cmo leer la tabla?

  • 8ATE-Universidad de Oviedo

    Programacin en Ensamblador

    15

    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

    Programacin en Ensamblador

    16

    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.

    CICLO DE INSTRUCCION

    Oscilador

  • 9ATE-Universidad de Oviedo

    Programacin en Ensamblador

    17

    El juego de instrucciones: SEGN SU FUNCIONALIDAD

    Instrucciones de CARGANEMNICO DESCRIPCIN FLAGS AFECTADOS

    clrf f 00 (f) Zclrw 00 (W) Zmovf f,d (f) (destino) Zmovlw k k (W) Ningunomovwf f (W) (f) Ninguno

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    18

    Instrucciones de BITNEMNICO DESCRIPCIN FLAGS AFECTADOS

    bcf f,b Pone a 0 el bit b del registro f Ningunobsf f,b Pone a 1 el bit b del registro f Ninguno

    Instrucciones ARITMTICASNEMNICO DESCRIPCIN FLAGS AFECTADOS

    addlw k (W) + k (W) C DC - Zaddwf f,d (W) + (f) (destino) C DC - Zdecf f,d (f) - 1 (destino) Zincf f,d (f) + 1 (destino) Zsublw k K - (W) (W) C DC - Zsubwf f,d (f) - (W) (destino) C DC - Z

  • 10

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    19

    Instrucciones LGICASNEMNICO DESCRIPCIN FLAGS AFECTADOS

    andlw k (W) AND k (W) Zandwf f,d (W) AND (f) (destino) Zcomf f,d (/f) (destino) Ziorlw k (W) OR k (W) Ziorwf f,d (W) OR (f) (destino) Zrlf f,d Rota (f) a izquierda (destino) Crrf f,d Rota (f) a derecha (destino) Cswap f,d Intercambia nibbles (f) (destino) Ningunoxorlw k (W) XOR k (W) Zxorwf f,d (W) XOR (f) (destino) Z

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    20

    Instrucciones de SALTONEMNICO DESCRIPCIN FLAGS AFECTADOS

    btfsc f,b Salta si el bit b de f es 0 Ningunobtfss f,b Salta si el bit b de f es 1 Ningunodecfsz f,d (f) - 1 (destino) y salta si es 0 Ningunoincfsz f,d (f) + 1 (destino) y salta si es 0 Ningunogoto k Salta a la direccin k Ninguno

    Instrucciones de manejo de SUBRUTINASNEMNICO DESCRIPCIN FLAGS AFECTADOS

    call k Llamada a subrutina Ningunoretfie Retorno de una interrupcin Ningunoretlw k Retorno con un literal en (W) Ningunoreturn Retorno de una subrutina Ninguno

  • 11

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    21

    Instrucciones ESPECIALESNEMNICO DESCRIPCIN FLAGS AFECTADOS

    clrwdt Borra Timer del Watchdog /TO - /PDnop No operacin Ningunosleep Entra en modo de bajo consumo /TO - /PD

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    22

    Fichero con el juego de

    instrucciones completo.

    Juego_instr.pdf

    Campo Descripcin

    f Posicin de memoria de datos (Register file address)(0x00 to 0x7F)

    W Registro de trabajo(acumulador)

    b n Bit dentro de una posicin de memoria (0-7)

    k Valor literal, constante o etiqueta (puede de 8 o 11 bits)

    x No importa el valor (0 1)

    El ensamblador genera cdigo con x=0.

    d 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 Destino es el registro W o la posicicin de memoria de datos especificada

    label nombre de etiqueta

    TOS Cima de la pila

    PC Contador de programa

    PCLATH Latch de la parte alta del contador de programa

    GIE Bit de habilitacin de interrupcin global

    WDT Temporizador Watchdog

    TO Time-out bit

    PD Power-down bit

    [ ] Optional

    ( ) Contenido

    Asignado a< > Register bit field

    En el conjunto deitalics termino definido por el usuario ( courier)

    Las claves del juegode instrucciones

  • 12

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    23

    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

    24

    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 :

    ENDEs la nica directiva obligatoria. Indica al ensamblador dnde debedetener el proceso. Debe colocarse en la ltima lnea del programa.

    EQU El valor es asignado a . Estas directivas sesuelen colocar al principio del programa y habitualmente se usanpara definir constantes y direcciones de memoria.

    [] ORG Las instrucciones del cdigo fuente que siguen a esta directiva seensamblan a partir de la posicin indicada por .

  • 13

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    25

    __CONFIG [& & ... & ]Permite indicar la configuracin elegida para la grabacin del PIC.Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC

    LIST P=16F877Indica el tipo de microcontrolador utilizado.

    INCLUDE o INCLUDE p16F877.incIncluye en el programa un fichero donde se definen las etiquetascon las que se nombra a los diferentes registros y sus bits. Estefichero se encuentra en el directorio principal del programaensamblador. Puede usarse esta directiva para incluir cualquierotro fichero (Ojo! El fichero de inclusin no puede terminar conuna directiva END).

    DT [, , ... , ]Genera una instruccin retlw por cada expresin que incluya ladirectiva. Si la expresin es del tipo cadena, se generar unainstruccin retlw por cada carcter de la misma.

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    26

    Fichero adicionales:

    Directivas MPASM.pdf

    Gua de uso del MPASM, MPLINK y MPLIB

    TODAS LAS DIRECTIVAS

  • 14

    ATE-Universidad de Oviedo

    Programacin en Ensamblador

    27

    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