P. 1
Programacion en ensamblador.pdf

Programacion en ensamblador.pdf

|Views: 35|Likes:
Publicado porEmilson Rodriguez

More info:

Published by: Emilson Rodriguez on Sep 29, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/30/2014

pdf

text

original

Programación en Ensamblador

©ATE-Universidad de Oviedo

1

Programación en Ensamblador

LENGUAJE ENSAMBLADOR • El único lenguaje que entienden los microcontroladores es el código máquina formado por ceros y unos del sistema binario. • El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en código máquina. • El lenguaje ensamblador trabaja con nemónicos, que son grupos de caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar. •La traducción de los nemónicos a código máquina entendible por el microcontrolador la lleva a cabo un programa ensamblador. • El programa escrito en lenguaje ensamblador se denomina código fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente código máquina, que suele tener la extensión *.hex.

©ATE-Universidad de Oviedo

2

1

hex Programa Ensamblador (MPASM) ©ATE-Universidad de Oviedo 3 Programación en Ensamblador El código fuente • Está compuesto por una sucesión de líneas de texto. Corresponde al nemónico de una instrucción.Programación en Ensamblador Código Fuente . uno o ningún operando. de una directiva o de una llamada a macro.asm Lenguaje ensamblador y Programa ensamblador 110100001…. Expresiones alfanuméricas escogidas por el usuario para identificar una determinada línea. Dentro de una línea. ¾ Campo de comentarios.1100 Lenguaje Ensamblador Código Máquina . ¾ Campo de etiquetas.) será ignorado por el programa ensamblador y considerado como comentario. Todas las etiquetas tienen asignado el valor de la posición de memoria en la que se encuentra el código al que acompañan. ¾ Campo de operandos y datos. Contiene los operandos que precisa el nemónico utilizado. ©ATE-Universidad de Oviedo 4 2 . Según el código. • Cada línea puede estructurarse en hasta cuatro campos o columnas separados por uno o más espacios o tabulaciones entre sí. todo lo que se encuentre a continuación de un punto y coma (. puede haber dos. ¾ Campo de código.

Programación en Ensamblador Campo de código Puede corresponder ese código a: ¾ Instrucciones: son aquellos nemónicos que son convertidos por el ensamblador en código máquina que puede ejecutar el núcleo del microcontrolador.Esperamos a que se pulse la tecla CALL INCREMENTO .si pulsada a cero y si libre a 1 .Por el Puerto B se saca en binario.RP0 .F . LIST P=16F877 .Ponemos a cero el PORTB para que aparezca ese . .ASM .Volvemos al banco 0 CLRF PORTB .para definir el PORTB como salida BCF STATUS.la tecla.subprograma de INCREMENTO . el numero de veces .Inclusión de fichero de etiquetas ORG 0 BSF STATUS.INC . ©ATE-Universidad de Oviedo 5 Programación en Ensamblador .Subprograma de INCREMENTO INCREMENTO INCF PORTB.que se pulsó la tecla que está conectada a la entrada RA4 .en cuyo caso RA4 pasa a 0 y vamos a GOTO ESPERA .Programa de Prueba para la placa PICDEM-2 plus .Paso al banco 1 de la memoria de datos CLRF TRISB .RP0 .valor cuando se defina como salida ESPERA BTFSS PORTA.Si se pulsó incrementamos PORTB SOLTAR BTFSS PORTA. En la gama media (PIC16xxx) cada nemónico se convierte en una palabra en la memoria de programa ¾ Directivas.no salimos hasta que se haya soltado GOTO SOLTAR .y volvemos al programa principal END Ejemplo de código fuente ©ATE-Universidad de Oviedo 6 3 . en ese caso RA4 pasaría a 1 RETURN .4 . pero no son parte del código. Pseudoinstrucciones que controlan el proceso de ensamblado del programa.4 .Fichero CUENTA. Son indicaciones al programa ensamblador de cómo tiene que generar el código máquina ¾ Macros: Secuencia de nemónicos que pueden insertarse en el código fuente del ensamblador de una manera abreviada mediante una simple llamada.Directiva para definir listado y microcontrolador INCLUDE P16F877.

Programación en Ensamblador Campo de Operandos y Datos • El ensamblador MPASM (distribuido por Microchip) soporta los sistemas de numeración decimal.<valor> 0x<valor> . hexadecimal..Organización de la Memoria interna: • Programa • Datos ©ATE-Universidad de Oviedo 8 4 . octal..Juego de Instrucciones 2. o’<valor>’ b’<valor>’ a’<carácter>’ “<cadena>” ‘<carácter>’ Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta. TIPO SINTAXIS Decimal Hexadecimal Octal Binario ASCII Cadena D’<valor>’ H’<valor>’ <valor>H O’<valor>’ B’<valor>’ A’<carácter>’ d’<valor>’ h’<valor>’ <valor>h . binario y ASCII. • Los nemónicos que tengan una constante como operando deberán incluirla respetando la sintaxis que se indica a continuación. Ejemplo: movlw 0F7h ©ATE-Universidad de Oviedo 7 Programación en Ensamblador Aprendiendo a Programar Pasos a dar para poder generar código fuente: 1.Directivas y Macros 3..

Formato 2.Literales y de control ©ATE-Universidad de Oviedo 10 5 . Funcionalidad 9 ©ATE-Universidad de Oviedo Programación en Ensamblador El juego de instrucciones: SEGÚN SU FORMATO 1... Por lo tanto el cálculo del tiempo de ejecución y de lo que ocupa un programa resulta simple Las instrucciones se pueden clasificar atendiendo a dos criterios: 1. 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.Programación en Ensamblador El juego de instrucciones • • • • • Es un juego reducido de 35 instrucciones muy simples. Procesador RISC La mayoría de las instrucciones se ejecuta en 4 ciclos de reloj.Orientadas al bit 3.Orientadas al byte 2..

fuente 0 c5 c4 c3 c2 c1 c0 Código Operación 6 bits d f6 f5 f4 f3 f2 f1 f0 Dirección operando fuente Destino resultado 1 bit ©ATE-Universidad de Oviedo 7 bits 11 Programación en Ensamblador 2. si es mayor se trunca d=0 ¿Qué hacen? W W Opera con Operando en dir fuente ¿Cómo se codifican? 13 8 7 6 ¿Dónde va a parar el resultado? d=1 Dir.Instrucciones orientadas al bit ¿Cómo se escriben en ensamblador? Operación fuente. bit Nemónico reservado 7 bits o algo que pueda sustituir a 7 bits. si es mayor se trunca ¿Qué hacen? Opera o explora el bit de la posición #bit del operando fuente ¿Cómo se codifican? 13 10 8 7 6 0 c3 c2 c1 c0 b2 b1 b0 f6 f5 f4 f3 f2 f1 f0 Código Operación 4 bits Bit a tratar 3 bits ©ATE-Universidad de Oviedo Dirección operando fuente 7 bits 12 6 . si es mayor se trunca 3 bits o algo que pueda sustituir a 3 bits. si es mayor se trunca 1 bit o algo que pueda sustituir a 1 bit.. destino Nemónico reservado 7 bits o algo que pueda sustituir a 7 bits.Programación en Ensamblador 1.Instrucciones orientadas al byte ¿Cómo se escriben en ensamblador? Operación fuente..

Instrucciones literales o de control ¿Cómo se escriben en ensamblador? Operación valor literal Nemónico 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 ¿Cómo se codifican? c5 c4 c3 c2 c1 c0 k7 k6 k5 k4 k3 k2 k1 k0 13 Código Operación 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 Programación en Ensamblador ¿Cómo 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 7 .Programación en Ensamblador 3..

Oscilador ©ATE-Universidad de Oviedo 16 8 . Oscilador ©ATE-Universidad de Oviedo 15 Programación en Ensamblador CICLO DE INSTRUCCION Pudiera haber un ciclo de instrucción de retardo si el resultado de ejecutar la instrucción anterior modifica el contenido del Contador de Programa (Ej: GOTO ó CALL). En los PIC16. un ciclo de instrucción dura 4 ciclos de reloj. • En la segunda etapa se ejecuta la instrucción. Esto lleva otro TCY. una instrucción se trae y otra se ejecuta cada TCY. Esto implica suspender el entubado (pipelining) de las instrucciones durante un ciclo para que la instrucción a donde se salta se traiga a la CPU. • En una primera etapa. la instrucción es traída a la CPU..Programación en Ensamblador CICLO DE INSTRUCCION • Un ciclo de instrucción es el tiempo que se tarda en ejecutar una instrucción (salvo las instrucciones de salto) en el microcontrolador. debido al solapamiento (pipelining ó entubado) de traer la instrucción actual y ejecución de la instrucción previa. • No obstante. Esto lleva un ciclo de instrucción TCY.

d f.b f.Z Z Z C – DC .d (W) + k → (W) (W) + (f) → (destino) (f) .b Pone a 0 el bit ‘b’ del registro ‘f’ Pone a 1 el bit ‘b’ del registro ‘f’ Ninguno Ninguno Instrucciones ARITMÉTICAS NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS addlw addwf decf incf sublw subwf k f.d f.d k f 00 → (f) 00 → (W) (f) → (destino) k → (W) (W) → (f) Z Z Z Ninguno Ninguno ©ATE-Universidad de Oviedo 17 Programación en Ensamblador Instrucciones de BIT NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS bcf bsf f.Z C – DC .d k f.1 → (destino) (f) + 1 → (destino) K .Z 18 9 .Z C – DC .(W) → (destino) ©ATE-Universidad de Oviedo C – DC .Programación en Ensamblador El juego de instrucciones: SEGÚN SU FUNCIONALIDAD Instrucciones de CARGA NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS clrf clrw movf movlw movwf f f.(W) → (W) (f) .

d k f.b f.d f.Programación en Ensamblador Instrucciones LÓGICAS NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS andlw andwf comf iorlw iorwf rlf rrf swap xorlw xorwf k f.d k Salta si el bit ‘b’ de ‘f’ es 0 Salta si el bit ‘b’ de ‘f’ es 1 (f) .b f.d k f.1 → (destino) y salta si es 0 (f) + 1 → (destino) y salta si es 0 Salta a la dirección ‘k’ Instrucciones de manejo de SUBRUTINAS Ninguno Ninguno Ninguno Ninguno Ninguno decfsz f.d f.d NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS call retfie retlw return k k Llamada a subrutina Retorno de una interrupción Retorno con un literal en (W) Retorno de una subrutina ©ATE-Universidad de Oviedo Ninguno Ninguno Ninguno Ninguno 20 10 .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 Programación en Ensamblador Instrucciones de SALTO NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS btfsc btfss incfsz goto f.d f.d f.

Fichero con el juego de instrucciones completo.pdf k x d Selección de destino: d = 0: almacena el resultado en W./PD Ninguno /TO ./PD ©ATE-Universidad de Oviedo 21 Programación en Ensamblador Campo f W b Descripción Posición de memoria de datos (Register file address) (0x00 to 0x7F) Registro de trabajo(acumulador) nº Bit dentro de una posición de memoria (0-7) Valor literal. Juego_instr. d = 1: almacena el resultado en una posición de la memoria de datos f. dest label TOS PC PCLATH GIE WDT TO PD [] () → <> ∈ italics Destino es el registro W o la posicición 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 habilitación de interrupción 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 .Programación en Ensamblador Instrucciones ESPECIALES NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS clrwdt nop sleep Borra Timer del Watchdog No operación Entra en modo de bajo consumo /TO . constante o etiqueta (puede de 8 o 11 bits) No importa el valor (0 ó 1) El ensamblador genera código con x=0.

• Hay más de 50 directivas reconocidas por MPASM. • Las más usadas : END Es la única directiva obligatoria..Directivas y Macros 3.Organización de la Memoria interna: • Programa • Datos ©ATE-Universidad de Oviedo 23 Programación en Ensamblador Directivas de MPASM • Controlan el proceso de ensamblado del programa. <etiqueta> EQU <expresión> El valor <expresión> es asignado a <etiqueta>. Estas directivas se suelen colocar al principio del programa y habitualmente se usan para definir constantes y direcciones de memoria.Juego de Instrucciones 2. [<etiqueta>] ORG <expresión> Las instrucciones del código fuente que siguen a esta directiva se ensamblan a partir de la posición indicada por <expresión>.Programación en Ensamblador Aprendiendo a Programar Pasos a dar para poder generar código fuente: 1.. Debe colocarse en la última línea del programa. pero no son parte del mismo (también se conocen como pseudoinstrucciones). ©ATE-Universidad de Oviedo 24 12 . Indica al ensamblador dónde debe detener el proceso..

Puede usarse esta directiva para incluir cualquier otro fichero (¡Ojo! El fichero de inclusión no puede terminar con una directiva END).. Este fichero se encuentra en el directorio principal del programa ensamblador. DT <expr1> [.pdf Guía de uso del MPASM. <expr2>.. . . se generará una instrucción retlw por cada carácter de la misma. MPLINK y MPLIB ©ATE-Universidad de Oviedo 26 13 . ©ATE-Universidad de Oviedo 25 Programación en Ensamblador TODAS LAS DIRECTIVAS Fichero adicionales: Directivas MPASM.inc” Incluye en el programa un fichero donde se definen las etiquetas con las que se nombra a los diferentes registros y sus bits. Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC LIST P=16F877 Indica el tipo de microcontrolador utilizado. <exprN>] Genera una instrucción retlw por cada expresión que incluya la directiva..Programación en Ensamblador __CONFIG <expresión> [& <expresión> & . Si la expresión es del tipo cadena. & <expresión>] Permite indicar la configuración elegida para la grabación del PIC.inc> o INCLUDE “p16F877. INCLUDE <p16F877..

Organización de la Memoria interna: • Programa • Datos ©ATE-Universidad de Oviedo 27 14 ...Programación en Ensamblador Aprendiendo a Programar Pasos a dar para poder generar código fuente: 1.Juego de Instrucciones 2..Directivas y Macros 3.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->