🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

2022_23_T5_ProgramaciónEnLenguajeEnsamblador.pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

Tema 5: Programación en Lenguaje Ensamblador Estructura del tema • Introducción • Ensamblador MPSAM • Estructura de las sentencias / líneas de programa • Directivas del ensamblador • Etiqueta, código, operandos, comentarios • Programación en ensamblador • Estructuras de datos • Estructuras de con...

Tema 5: Programación en Lenguaje Ensamblador Estructura del tema • Introducción • Ensamblador MPSAM • Estructura de las sentencias / líneas de programa • Directivas del ensamblador • Etiqueta, código, operandos, comentarios • Programación en ensamblador • Estructuras de datos • Estructuras de control • Subrutinas • Ejercicios T5. Programación en ensamblador Pág 1 de 52 Estructura del tema • Introducción • Ensamblador MPSAM • Estructura de las sentencias / líneas de programa • Directivas del ensamblador • Etiqueta, código, operandos, comentarios • Programación en ensamblador • Estructuras de datos • Estructuras de control • Subrutinas • Ejercicios T5. Programación en ensamblador Pág 2 de 52 Introducción Compilador de lenguaje ensamblador • Traducir programa fuente (lenguaje ensamblador) en programa objeto (código máquina) • Los caracteres ASCII del código fuente se identifican y cambian a código máquina. • El programa objeto se transfiere a la ROM del PIC a programar • Existen varios criterios de clasificación para PROGRAMAS ENSAMBLADORES: • Auto ensamblador: la CPU que ensambla es la misma que va a ejecutar el código. • Ensamblador cruzado: la CPU que ensambla es distinta que la que se programa. • Ensamblador condicional: un código fuente se puede ensamblar de distintas formas. • Macroensambladores: permiten usar MACROS • MPLAB 8.92  Ensamblador CRUZADO, CONDICIONAL y MACROs • El código fuente se almacena en ficheros ASCII con extensión .ASM • El código objeto final tiene la extensión .HEX T5. Programación en ensamblador Pág 3 de 52 Introducción Proceso de ensamblado: Codificación Absoluta y Relativa Codificación ABSOLUTA El código fuente contiene toda la información del direccionado (programa y datos) Codificación RELATIVA Código fuente en varios archivos Modular: direcciones relativas Varios .OBJ  LINKADOR  .HEX T5. Programación en ensamblador Pág 4 de 52 Estructura del tema  Introducción • Ensamblador MPSAM • Estructura de las sentencias / líneas de programa • Directivas del ensamblador • Etiqueta, código, operandos, comentarios • Programación en ensamblador • Estructuras de datos • Estructuras de control • Subrutinas • Ejercicios T5. Programación en ensamblador Pág 5 de 52 Ensamblador MPSAM Trabajo con la programación en ensamblador • Entorno de programación  MPLAB • Mapa de la memoria de programa  desplazamientos y páginas • Mapa de la memoria de datos  desplazamientos, bancos y registros SFR • Resumen del juego de instrucciones Especificaciones a cumplir ORGANIGRAMA Código FUENTE COMPILADO BreakPoints, Paso a Paso, Watch Carga del código fuente T5. Programación en ensamblador HERRAMIENTAS DE DEPURACIÓN SÍ ¿Sin errores? NO Pág 6 de 52 Ensamblador MPSAM Estructura de programa: código para la suma de 2 bytes T5. Programación en ensamblador Pág 7 de 52 Ensamblador MPSAM Directivas del Ensamblador • Son CÓDIGOS MNEMÓNICOS (pseudoinstrucciones) que actúan sobre el programa ensamblador dirigiendo sus acciones en el proceso de ensamblado del programa. No se traducen al código máquina. SIEMPRE CON UN ESPACIO DE DISTANCIA • Hay más de 50 directivas reconocidas por MPASM. T5. Programación en ensamblador Pág 8 de 52 Ensamblador MPSAM Directivas del Ensamblador LIST [opción1][,opción2][,…] - Activa la generación del archivo de listado (.lst). - informar del tipo de microcontrolador utilizado y del sistema de numeración: LIST p = 16F877A, r = HEX ; Se utiliza el PIC16f877A y ;el sistema HEXADECIMAL - Si no se especifica la opción r, se presupone que el sistema de numeración es el hexadecimal (OCT, DEC, HEX) T5. Programación en ensamblador Pág 9 de 52 Ensamblador MPSAM Directivas del Ensamblador _CONFIG <expresión> [& <expresión> & … & <expresión>] - Permite indicar la configuración elegida para la grabación del PIC. - Ejemplo: _CONFIG _CP_OFF & _WDT_OFF & _XT_OSC #include fichero_1 #include “fichero 1” #include <fichero 1> - Sirve para incluir, en el programa, ficheros fuente adicionales. Inserta el texto completo del fichero especificado, en la posición que ocupa la directiva dentro del programa fuente. - El fichero de inclusión no puede terminar con una directiva END. - Se usa para insertar en el programa fuente el fichero, proporcionado por MICROCHIP, donde se definen las etiquetas con las que se nombran a los diferentes registros y sus bits del microcontrolador que se utiliza. Este fichero se encuentra en el directorio principal del programa ensamblador. - Ejemplos: #include p16f873.inc #include p16f877.inc #include p16f877A.inc T5. Programación en ensamblador Pág 10 de 52 Ensamblador MPSAM Directivas del Ensamblador T5. Programación en ensamblador Pág 11 de 52 Ensamblador MPSAM Directivas del Ensamblador T5. Programación en ensamblador Pág 12 de 52 Ensamblador MPSAM Directivas del Ensamblador [etiqueta] UDATA [Dirección_RAM] - Declaran secciones de datos y su dirección en la memoria de datos. - UDATA comienza una sección de datos (variables) no iniciados en el mismo banco - Para RESERVAR datos no iniciados se usa la directiva RES [etiqueta] RES cantidad_memoria - Reserva posiciones de memoria RAM (memoria de datos) - Ejemplo: UDATA 0x20 ;Comenzamos a reservar posiciones a partir de la 20 perimetro RES 2 ;Reservamos 2 bytes para esta variable longitud RES 1 ;1 byte altura RES 1 ;1 byte T5. Programación en ensamblador Pág 13 de 52 Ensamblador MPSAM Directivas del Ensamblador PAGESEL etiqueta - Produce el código para seleccionar la página de la memoria de programa donde está la etiqueta especificada. - Intercala en el programa las instrucciones necesarias para modificar el registro PCLATH. - Sirve para asegurarnos de que cuando vamos a hacer una llamada a una subrutina o un salto, estamos seleccionando la página de memoria adecuada. BANKSEL etiqueta BANKISEL etiqueta - La directiva BANKSEL produce el código necesario para seleccionar el banco de registros donde se encuentra la etiqueta especificada si se utiliza direccionamiento directo. - Intercala en el programa las instrucciones necesarias para modificar convenientemente los bits RP1 y RP0 del registro de STATUS. - La directiva BANKISEL produce el código necesario para seleccionar el banco de registros donde se encuentra la etiqueta especificada si se utiliza direccionamiento indirecto. - Intercala en el programa las instrucciones necesarias para modificar convenientemente el bit IRP del registro de STATUS T5. Programación en ensamblador Pág 14 de 52 Ensamblador MPSAM Directivas del Ensamblador T5. Programación en ensamblador Pág 15 de 52 Ensamblador MPSAM Directivas del Ensamblador T5. Programación en ensamblador Pág 16 de 52 Ensamblador MPSAM Directivas del Ensamblador T5. Programación en ensamblador Pág 17 de 52 Ensamblador MPSAM Estructura de las sentencias • Estructura de las SENTENCIAS o líneas de programa: [ETIQUETA[:]] [CÓDIGO [OPERANDOS separados por ,]] [;COMENTARIO] Campo de etiquetas. Expresiones alfanuméricas para identificar una determinada línea del programa. 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 código. Corresponde al nemónico de una instrucción, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el nemónico utilizado. Según el código, puede haber dos, uno o ningún operando. Campo de comentarios. Dentro de una línea, todo lo que se encuentre a continuación de un punto y coma (;) será ignorado por el programa ensamblador y considerado como comentario. Sirven para ir explicando el funcionamiento del programa. T5. Programación en ensamblador Pág 18 de 52 Ensamblador MPSAM Estructura de las sentencias ETIQUETA • Nombre simbólico que representa una dirección de memoria (absoluta o relativa a contador de programa) o un valor numérico. • Debe comenzar en la 1ª columna • El primer carácter debe ser una letra o la barra inferior ‘_’ seguida de una letra. No puede contener los caracteres + - / & ! | ^ < > ( ). • El tamaño máximo es de 32 caracteres. • Hay distinción entre mayúsculas y minúsculas. Las siguientes etiquetas son diferentes: LAZO_2 lazo_2 Lazo_2 T5. Programación en ensamblador Pág 19 de 52 Ensamblador MPSAM Estructura de las sentencias CÓDIGO • Instrucciones (NEMÓNICOS)  Directivas: - Pseudoinstrucciones que controlan el ensamblado del programa, pero no son código. - Indicaciones al programa ensamblador de cómo generar el código máquina. Macros: - Secuencia de nemónicos que pueden insertarse en el código fuente • Separado del margen izquierdo por al menos un espacio. • No hay distinción entre mayúsculas y minúsculas. MOVLW es igual a movlw T5. Programación en ensamblador Pág 20 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. a) OPERANDOS: Constantes numéricas o ASCII • El ensamblador MPASM soporta decimal, hexadecimal, octal, binario y ASCII. • Los nemónicos con un literal siguen esta sintaxis: T5. Programación en ensamblador Pág 21 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. b) OPERANDOS: símbolos o etiquetas • Direcciones de instrucciones: se conoce como ETIQUETA • Datos constantes • Registros de funciones especiales (SFR) o de propósito general (GPR) • Bits de los registros de la memoria de datos T5. Programación en ensamblador Pág 22 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. c) OPERANDOS: expresiones • Combinaciones de constantes y símbolos con operadores aritméticos y lógicos • Se evalúan durante el ensamblado, NO durante la ejecución. T5. Programación en ensamblador Pág 23 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. c.1) Operadores ARITMÉTICOS T5. Programación en ensamblador Pág 24 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. c.2) Operadores LÓGICOS y de RELACIÓN T5. Programación en ensamblador Pág 25 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: • Pueden ser: Constantes (numéricas o ASCII), Símbolos o etiquetas y Expresiones. c.3) Operadores LÓGICOS T5. Programación en ensamblador Pág 26 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: c.4) Operadores ASIGNACIÓN T5. Programación en ensamblador Pág 27 de 52 Ensamblador MPSAM Estructura de las sentencias OPERANDOS: c.4) Operadores de DIRECCIÓN • En los PIC de la gama media la dirección es de 13 bits: - El operador high devuelve los bits 12 a 8 de la dirección. - El operador upper no tiene sentido. T5. Programación en ensamblador Pág 28 de 52 Estructura del tema  Introducción  Ensamblador MPSAM  Estructura de las sentencias / líneas de programa  Directivas del ensamblador  Etiqueta, código, operandos, comentarios • Programación en ensamblador • Estructuras de datos • Estructuras de control • Subrutinas • Ejercicios T5. Programación en ensamblador Pág 29 de 52 Ensamblador MPSAM Estructuras de Datos Básicas CONSTANTES • Se definen mediante la directiva EQU XVAL EQU 7  MOVLW XVAL  MOVLW 7 • No crea un dato adicional: la etiqueta se reemplaza por su valor durante el ensamblado VARIABLES sin inicializar • Se definen mediante la directiva RES UDATA var1 res 1 var2 res 1 VARIABLES inicializadas • Deben situarse en la sección IDATA e inicializarse con la directiva DB ó DW. IDATA longitud db .10 altura db 2 T5. Programación en ensamblador VECTORES Y MATRICES • La definición es igual que para las variables UDATA VECTOR8 res 8 MATRIZ3X3 res 3 res 3 res 3 Pág 30 de 52 Ensamblador MPSAM Estructuras de Control IF-THEN (IF condición THEN bloque) • Ejecuta una acción de manera condicional: si se cumple una condición, entonces ejecutamos una acción. De no ser así, no hacemos nada. • Ejemplo: Si A es impar, entonces súmale 1 BTFSC A,0 ;Condición: es impar? ;(es impar si acaba en 1) INCF A ;Esta instrucción se salta si ;en la anterior, el contenido ; de A es par .... T5. Programación en ensamblador Pág 31 de 52 Ensamblador MPSAM Estructuras de Control IF / ELSE • Permite elegir entre dos opciones, en función de una comprobación. Si la condición es verdadera se realiza una acción (o serie de acciones), y si es falsa, se realiza otra Ejemplo: si A > 9, súmale 0x5B y si no, súmale 0x30. ;A → W ;Bit C de STATUS no cambia ;9 – W ;Si k ≥ W ⇒ bit C=1 ;Si k < W ⇒ bit C=0 MOVF A,0 SUBLW 9 MOVF BTFSS GOTO GOTO A,0 STATUS,C ;¿Bit C de STATUS =1? MAYOR MENOR ADDLW GOTO 5Bh FIN ADDLW 30h MOVWF END A MAYOR: MENOR: FIN: T5. Programación en ensamblador Pág 32 de 52 Ensamblador MPSAM Estructuras de Control CASE Esta estructura de control nos permite chequear una variable, y en función de su valor, seleccionar un bloque de operaciones Ejemplo, cuando la variable a comprobar tiene valores numéricos consecutivos (0,1,2,3,4.....15) MOVF Var,0 ADDWF PCL,1 GOTO BLOQUE1 GOTO BLOQUE2 ... GOTO BLOQUEN FIN GOTO $ ;BUCLE INFINITO BLOQUE1 BLOQUE DE INSTRUCCIONES 1 GOTO FIN BLOQUE2 BLOQUE DE INSTRUCCIONES 2 GOTO FIN ....... BLOQUEN BLOQUE DE INSTRUCCIONES N GOTO FIN T5. Programación en ensamblador Pág 33 de 52 Ensamblador MPSAM Estructuras de Control WHILE Esta estructura permite repetir una misma acción mientras se cumpla una condición • La implementación real del while en ensamblador dependerá de la condición. • un bucle infinito while(1) se implementa como un salto a la posición actual while(1)  GOTO $ • Una condición evalúe un bit está se implementa con las instrucciones BTFSS o BTFSC (Bit test file, skip if set/clear). Para esperar que un bit baje a 0 haríamos esto: LOOP BTFSC FILE,BIT GOTO T5. Programación en ensamblador LOOP Pág 34 de 52 Ensamblador MPSAM Estructuras de Control FOR Esta estructura permite repetir una misma acción mientras se cumpla una condición • Se basan en cuentas y se suelen implementar implementan con DECFSZ, INCFSZ (decrementa/incrementa, salta si es cero). LOOP FIN T5. Programación en ensamblador MOVF contador_inicial,W SUBWF contador_final,F BTFSC STATUS,Z GOTO FIN DCFSZ contador_final,F GOTO LOOP END Pág 35 de 52 Ensamblador MPSAM Subrutinas • Análogo a una función en C / Pascal  tarea (parte de código) requerida varias veces. • Similitud con funciones matemáticas: promedio, multiplicación, potencia, etc… • Diseño MODULAR: código más legible, compacto y depuración. LLAMADA A LA SUBRUTINA Se efectúan mediante la instrucción  CALL (Dirección / Etiqueta): 1.- El PC (Program Counter) se guarda en la pila 2.- Se carga en el PC la dirección de comienzo de la subrutina 3.- Seleccionar la página de memoria donde está la subrutina  bits3 y 4 de PCLATH. RETORNO DE LA SUBRUTINA • La instrucción RETURN (Return from Subroutine) SIEMPRE al final de la subrutina. • Se recupera la dirección de la parte superior de la pila al PC. T5. Programación en ensamblador Pág 36 de 52 Ensamblador MPSAM Paso de parámetros a las subrutinas • Parámetros de entrada, salida, entrada / salida  Uso de registros GPR • Llamada a una subrutina SUBR que opera sobre dos vectores de 16 bits situados en 0x20 y 0x30. BUFL EQU 0x10 UDATA0x20 BUFFERA RES BUFL BUFFERB RES BUFL ;Longitud de los vectores. ;Creación del vector A. Comienza en la 0x20 ;Creación del vector B. Comienza en la 0x30 • La longitud de los vectores, BUFL, la pasamos a través del registro 0x40 y sus direcciones de comienzo, BUFFERA y BUFFERB, a través de los registros 0x41 y 0x42. • La subrutina se llamará de la siguiente manera: MOVLWBUFL ;Longitud de los vectores. MOVWF0x40 ; MOVLWBUFFERA ;Dirección de comienzo del vector A. MOVWF0x41 MOVLWBUFFERB ;Dirección de comienzo del vector B. MOVWF0x42 CALL SUBR ;Llamada a subrutina. • Al final de la ejecución de SUBR y si ésta devuelve el resultado en el registro 0x43: SUBR ...................... MOVWF0x43 RETURN T5. Programación en ensamblador Pág 37 de 52 Ensamblador MPSAM MACROinstrucciones • Secuencia de instrucciones que se identifica con una etiqueta  MACRO • Se pueden combinar con directivas del ensamblador • Una vez definida, se puede invocar en distintos puntos • El ensamblador reemplaza la etiqueta de la MACRO por el código de su definición • La sintaxis de una macro es: NombreMacro macro [arg1, arg2, ...] [local etiqueta1 [, etiqueta2, etiqueta3, ...] ] ; ; Cuerpo de la macro ; endm ; Fin de la macro • En una MACRO no hay saltos ni retornos  no hay que guardar nada en la PILA. • Permiten una programación modular del programa fuente. T5. Programación en ensamblador Pág 38 de 52 Ensamblador MPSAM MACROinstrucciones • En el siguiente programa se define la macro Convierte que se invoca dos veces en el programa. La macro recibe un digito hexadecimal en un registro nombrado HEXA y entrega en otro registro, nominado ASCII, el equivalente ASCII del digito. Por ejemplo, si HEXA= OAh, entonces ASCll = 41h. • La conversión a ASCII suma 30h al digito hexadecimal si éste es <= 9 o 37h si el digito hexadecimal >= 9. list p=l6f873 #include pl6f873.inc ; Definición de macros: ; Esta macro convierte a ASCII el dígito hexadecimal (O a F) dado en ; el registro denominado HEXA, El código ASCll se entrega en el registro denominado ASCII. ; Convierte macro HEXA,ASCII ;Declaración de la macro. local suma30,suma37,fin ; Etiquetas locales. movf HEXA,W ;En W el digito hexadecimal. sublw 9 ;W > 9 ? (Se afecta STATUS<C>). movf HEXA,W ;En W el digito hexadecimal (no se afecta STATUSO). btfsc STATUS,C ;Sí (C=O), sumar 37h a HEXA. goto suma30 ;No (C=l), sumar 30h a HEXA. suma37: addlw 37h goto fin suma30: addlw 30h fin: movwf ASCII ; El resultado se deposita en el registro ASCII. endm ; Fin de la macro. T5. Programación en ensamblador Pág 39 de 52 Ensamblador MPSAM MACROinstrucciones ; Registros de la memoria de datos: udata-shr HEXA1 res 1 HEXA2 res 1 ASCII1 res 1 ASCII2 res 1 ; Programas Rst_vector code pagesel PP goto PP O ;Se selecciona la página donde está PP ;garantizando un salto al lugar correcto. Prog_Principal code 0x800 PP: movlw 9 movwf HEXA1 movlw OAh movwf HEXA2 Convierte HEXA1,ASCII1 ;Se invoca la macro Convierte. El ensamblador ;inserta en este punto las instrucciones de la macro. nop Convierte nop goto end $ T5. Programación en ensamblador HEXA2,ASCII2 ;Se invoca otra vez la macro Convierte. El ensamblador ;inserta en este punto, de nuevo, las instrucciones ;de la macro. ;Lazo infinito. ;Fin del programa. Pág 40 de 52 Ensamblador MPSAM Organización de un programa en ASM con codificación ABSOLUTA ;Organización del programa para codificación absoluta list p=16f877A #include <p16f877A,inc> ;Se declara el microcontrolador que se va a utilizar ;y se definen sus variables. ;DEFINICIÓN DE CONSTANTES: ; DATO1 EQU 0x1 ;Ejemplo DATO2 EQU 0x2 ;Ejemplo ;DEFINICIÓN DE VARIABLES: ; w_temp equ 0x20 ;Variable usada para salvar W. status_temp equ 0x21 ;Variable usada para salvar STATUS X equ 0x22 ;Ejemplo. Y equ 0x23 ;Ejemplo. ; ;CUERPO DEL PROGRAMA: ; ;RESET org 0x000 ;Dirección del vector de reset. movlw high PP ;Preparar el salto al programa principal, movwf PCLATH ;garantizando la selección de la página correcta. goto PP ;Saltar a la dirección donde comienza el programa principal. T5. Programación en ensamblador Pág 41 de 52 Ensamblador MPSAM Organización de un programa en ASM con codificación ABSOLUTA ;INTERRUPCIÓN org movwf movf bcf mowf 0x004 w_temp STATUS,W STATUS,RP0 status_temp ;Dirección del vector de interrupciones ;Salvar el contenido actual de W. ;Copiar el contenido actual de STATUS en W, ;asegurar la selección del banco 0 ;y salvar el contenido de STATUS ;Aquí se ponen las instrucciones de la rutina de atención a la interrupción bcf movf movwf swapf swapf retfie STATUS,RP0 ;Asegurar la selección del banco 0. status_temp,W ;Recuperar la copia de STATUS STATUS ;y restituirla. w_temp,f ;Recuperar la copia de W w_temp,W ;y restituirla sin alterar STATUS. ;Retornar desde la interrupción. ;PROGRAMA PRINCIPAL PP: clrf clrf X Y ;Iniciar variables. ;Iniciar variables. ;Aquí se escriben instrucciones del programa principal ; movlw high SBR1 ;Si la subrutina SBR1 está en una página diferente, movwf PCLATH ;garantizar la selección de la página correcta cal1 SBR1 ;y llamar a la subrutina. ; ;Aquí se escriben instrucciones del programa principal ; goto $ ;Ejemplo: bucle infinito para terminar el programa principal. ; T5. Programación en ensamblador Pág 42 de 52 Ensamblador MPSAM Organización de un programa en ASM con codificación ABSOLUTA ;SUBRUTINAS (SBR1 ; SBR1: ; ;Aquí se escriben ; movlw movwf call ; ;Aquí se escriben ; return y SBR2 ANIDADA) ;Aquí comienza la subrutina SBR1. las instrucciones de la subrutina SBR1. high SBR2 ;Ejemplo: llamar a la SBR2 que está en otra página, PCLATH ;garantizar la selección de la página correcta SBR2 ;y llamar a la subrutina SBR2. instrucciones de la subrutina SBR1. ; Retornar al programa principal desde SBR1. SBR2: ; Aquí comienza la subrutina SBR2. ; ;Aquí se escriben las instrucciones de la subrutina SBR2. : return ; Retornar a la subrutina SBR1 desde SBR2. end T5. Programación en ensamblador ; Fin del programa fuente. Pág 43 de 52 Ensamblador MPSAM Ejemplo 1: Conversor Binario – ASCII • El microprocesador trabaja internamente en binario, pero el resultado hay que sacarlo al exterior sobre un dispositivo (terminal CRT, impresora) que admite caracteres ASCII. • El dato a convertir tiene un valor numérico entre 0 y 255. • Hay que obtener la cifra de centenas, decenas y unidades para obtener el carácter ASCII de cada una de ellas. NUMERO: 254 BINARIO: 1111 1110 HEX: FEh CENTENA: 2 BIN: 0000 0010 HEX: 02h ASCII: 32h UNIDAD: 4 BIN: 0000 0100 HEX: 04h ASCII: 34h DECENA: 5 BIN: 0000 0101 HEX: 05h ASCII: 35h T5. Programación en ensamblador Pág 44 de 52 Ensamblador MPSAM Ejemplo 1: Conversor Binario – ASCII • Separación de cifras mediante restas iteradas T5. Programación en ensamblador Pág 45 de 52 Ensamblador MPSAM Ejemplo 1: Conversor Binario – ASCII T5. Programación en ensamblador Pág 46 de 52 Ensamblador MPSAM Ejemplo 2: Búsqueda del valor máximo en una lista INICIO Inicializar índice posiciones Inicializar MAX con 0 Leer elemento de la lista Incrementar Índice de posiciones Comparar con MAX ¿Elemento Mayor? SI LAZO NO SIGUE Elemento a MAX NO ¿Acabó lista? SI FIN T5. Programación en ensamblador Pág 47 de 52 Ensamblador MPSAM Ejemplo 3: Generación de retardos por software • Para conseguir alcanzar una temporización dada, a partir del oscilador disponible, se puede obtener el número de ciclos máquina necesarios Nº de Ciclos_máquina = Temporización 4 ⋅ Tosc • Usar bucles con un número definido de iteraciones CUENTA BUCLE EQU ... movlw movwf decfsz goto 0x20 N CUENTA CUENTA BUCLE Aportación de cada instrucción 1 ciclo máquina 1 ciclo máquina N-1 ciclos si no salta + 2 al saltar (N-1)*2 ciclos máquina Duración = 1 + 1 + (N-1) + 2 + (N-1) * 2 = 3N + 1 (ciclos) (N valor a definir) Duración máxima = 3 x 256 + 1 = 769 ciclos máquina T5. Programación en ensamblador Pág 48 de 52 Ensamblador MPSAM Ejemplo 3: Generación de retardos por software • Aumentar la temporización añadiendo instrucciones en el lazo CUENTA BUCLE EQU ... movlw movwf nop decfsz goto 0x20 N CUENTA CUENTA BUCLE Aportación de cada instrucción 1 ciclo máquina 1 ciclo máquina N ciclos Nueva instrucción en el bucle N-1 ciclos si no salta + 2 al saltar (N-1)*2 ciclos máquina Duración = 1 + 1 + N + (N-1) + 2 + (N-1) * 2 = 4N + 1 (ciclos máquina) • Pocos factores de libertad  temporizaciones poco precisas y cortas • Uso de bucles anidados T5. Programación en ensamblador Pág 49 de 52 Ensamblador MPSAM Ejemplo 3: Generación de retardos por software • Aumentar la temporización añadiendo instrucciones en el lazo CUENTA BUCLE EQU ... movlw movwf nop decfsz goto 0x20 N CUENTA CUENTA BUCLE Aportación de cada instrucción 1 ciclo máquina 1 ciclo máquina N ciclos Nueva instrucción en el bucle N-1 ciclos si no salta + 2 al saltar (N-1)*2 ciclos máquina Duración = 1 + 1 + N + (N-1) + 2 + (N-1) * 2 = 4N + 1 (ciclos máquina) • Pocos factores de libertad  temporizaciones poco precisas y cortas • Uso de bucles anidados T5. Programación en ensamblador Pág 50 de 52 Ensamblador MPSAM Ejemplo 3: Generación de retardos por software Ciclos de máquina = 2+((2+((2+(3(n-1)+2))•m)+3(m-1)+2)•p)+3(p-1)+2 = (((3•(n-1)+2)+2)•m+2+2+3•(m-1))•p+3•(p-1)+2+1+1 = 3nmp+4mp+4p+1 T5. Programación en ensamblador Pág 51 de 52 Ensamblador MPSAM Ejemplo 3: Generación de retardos por software Ciclos de máquina = 2+((2+((2+(n+3(n-1)+2))•m)+3(m-1)+2)•p)+3(p-1)+2 = (((3•(n-1)+2+n)+2)•m+2+2+3•(m-1))•p+3•(p-1)+2+1+1 = 4nmp+4mp+4p+1 (El factor pasa de 3 a 4) T5. Programación en ensamblador Pág 52 de 52

Use Quizgecko on...
Browser
Browser