Tamaño: 7325
Comentario:
|
Tamaño: 7778
Comentario:
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 1: | Línea 1: |
Línea 3: | Línea 2: |
Línea 13: | Línea 11: |
* '''ex1.s''' archivo en texto del programa en assembler | |
Línea 15: | Línea 12: |
Este archivo está constituido por un encabezado que es fijo para todos los ejemplos | * '''ex1.s''' archivo en texto del programa en assembler |
Línea 17: | Línea 14: |
Este archivo está constituido por un encabezado que es fijo para todos los ejemplos | |
Línea 18: | Línea 16: |
.text .arm .global _start _start: b reset b loop b loop b loop b loop nop b loop b loop |
{{{ .text .arm .global _start _start: b reset b loop b loop b loop b loop nop b loop b loop |
Línea 35: | Línea 34: |
Línea 36: | Línea 36: |
...... ...... }}} |
|
Línea 39: | Línea 42: |
20 ldr r3,SUMA11 21 ldr r4,SUMA21 22 adds r1,r3,r4 23 24 ldr r3,SUMA12 25 ldr r4,SUMA22 26 adc r2,r3,r4 27 loop: b loop 28 29 30 /* ============================== 31 * CONSTANTES 32 * ============================== 33 */ 34 SUMA11: .word 0x1231AAAA 35 SUMA12: .word 0xB3423433 36 SUMA21: .word 0xFF232323 37 SUMA22: .word 0x23323111 38 .end |
{{{ ...... ...... loop: b loop /* ============================== * CONSTANTES * ============================== */ CTE1: .word 0x1231AAAA .end }}} Archivo de configuración * '''Makefile''' archivo de configuración usado por el make Archivos de salida generados por make * '''ex1.elf''' archivo binario. * '''ex1.hex''' archivo binario formato Intel, usado para grabar el microcontrolador. * '''ex1.lst''' archivo con el código fuente y el binario desensamblado. Archivo de configuración general para todos los ejemplos ([[attachment:Makefile]]) ===== Ejercicio 1 ===== Realizar un programa que sume dos números de 64 bits cada uno, guardando el resultado en R5 R6 (64bits), los números a sumar estarán dispuesto en R1 R2(64bits) y R3 R4(64bits) respectivamente. archivo fuente [[attachment:suma64_ex1.s|ex1.s]] ===== Ejercicio 2 ===== Realizar un programa que analizando un bit en el registro r3 active una alarma si este bit es 0, el nro de bit a analizar está guardado en el registro r4, la alarma se activa escribiendo un 1 en el bit 16 de r6 archivo fuente [[attachment:alarma_ex1.s|ex1.s]] ===== Ejercicio 3 ===== Realizar una serie de subrutinas que realizen diferentes comparaciones, devolviendo r0 = 0 si estas comparaciones fueron falsas y r0<>0 si fueron verdaderas, las comparaciones son las siguientes * r1<100 y r1>20 * r1<100 o r2>20 * r1 = 10 o r1 = 15 o r1 = 20 * r1 = 10 y r2 = 15 y r3 = 20 archivo fuente [[attachment:compara_ex1.s|ex1.s]] |
Línea 60: | Línea 87: |
Archivo de configuración * '''Makefile''' archivo de configuración usado por el make Archivos de salida generados por make * '''ex1.elf''' archivo binario. * '''ex1.hex''' archivo binario formato Intel, usado para grabar el microcontrolador. * '''ex1.lst''' archivo con el código fuente y el binario desensamblado. Archivo de configuración general para todos los ejemplos ([[attachment:Makefile | Makefile]]) ===== Ejercicio 1 ===== Realizar un programa que sume dos números de 64 bits cada uno, guardando el resultado en R5 R6 (64bits), los números a sumar estarán dispuesto en R1 R2(64bits) y R3 R4(64bits) respectivamente. archivo fuente [[attachment:suma64_ex1.s | ex1.s]] ===== Ejercicio 2 ===== |
===== Ejercicio 4 ===== |
Línea 80: | Línea 90: |
archivo fuente [[attachment:multip_ex1.s | ex1.s]] ===== Ejercicio 3 ===== |
archivo fuente [[attachment:multip_ex1.s|ex1.s]] |
Línea 83: | Línea 92: |
===== Ejercicio 5 ===== | |
Línea 85: | Línea 95: |
archivo fuente [[attachment:potencia_ex1.s | ex1.s]] ===== Ejercicio 4 ===== |
archivo fuente [[attachment:potencia_ex1.s|ex1.s]] |
Línea 88: | Línea 97: |
===== Ejercicio 6 ===== | |
Línea 92: | Línea 102: |
archivo fuente [[attachment:cadena_ex1.s | ex1.s]] ===== Ejercicio 5 ===== |
archivo fuente [[attachment:cadena_ex1.s|ex1.s]] |
Línea 95: | Línea 104: |
===== Ejercicio 7 ===== | |
Línea 97: | Línea 107: |
archivo fuente [[attachment:promedio_ex1.s | ex1.s]] ===== Ejercicio 6 ===== |
archivo fuente [[attachment:promedio_ex1.s|ex1.s]] |
Línea 100: | Línea 109: |
===== Ejercicio 8 ===== | |
Línea 110: | Línea 120: |
archivo fuente [[attachment:punt_ex1.s | ex1.s]] ===== Ejercicio 7 ===== |
archivo fuente [[attachment:punt_ex1.s|ex1.s]] |
Línea 113: | Línea 122: |
===== Ejercicio 9 ===== | |
Línea 116: | Línea 126: |
===== Ejercicio 8 ===== | |
Línea 118: | Línea 127: |
===== Ejercicio 10 ===== | |
Línea 122: | Línea 132: |
entrada | entrada |
Línea 126: | Línea 136: |
salida | salida |
Línea 130: | Línea 140: |
archivo fuente ex1.s | archivo fuente [[attachment:may_min_ex1.s|ex1.s]] |
Línea 132: | Línea 142: |
===== Ejercicio 9 ===== | ===== Ejercicio 11 ===== Se debe realizar un programa que calcule de los 100 primeros números naturales cuales son primos usando el método de la "Criba de Eratóstenes". El método se resume en estos pasos: |
Línea 134: | Línea 145: |
Se debe realizar un programa que calcule de los 100 primeros números naturales cuales son primos usando el método de la "Criba de Eratóstenes". El método se resume en estos pasos: * se carga un vector de 99 elementos con los números naturales del 2 hasta 100 * se comienza por el numero 2, lo dejamos y eliminamos a partir de allí todos los números múltiplo de 2 * luego nos corremos hasta el próximo número no borrado ( en este caso el 3) y eliminamos todos los múltiplos de 3 * el siguiente numero sin eliminar será el 5, lo dejamos y eliminamos todos los múltiplos de 5 * así vamos avanzando, cuando llegamos a un número que no ha sido eliminado lo dejamos y a partir de allí eliminamos los múltiplos de él |
* se carga un vector de 99 elementos con los números naturales del 2 hasta 100 * se comienza por el numero 2, lo dejamos y eliminamos a partir de allí todos los números múltiplo de 2 * luego nos corremos hasta el próximo número no borrado ( en este caso el 3) y eliminamos todos los múltiplos de 3 * el siguiente numero sin eliminar será el 5, lo dejamos y eliminamos todos los múltiplos de 5 * así vamos avanzando, cuando llegamos a un número que no ha sido eliminado lo dejamos y a partir de allí eliminamos los múltiplos de él |
Línea 143: | Línea 153: |
archivo fuente ex1.s | archivo fuente [[attachment:criba_ex1.s|ex1.s]] |
Línea 145: | Línea 155: |
===== Ejercicio 10 ===== | ===== Ejercicio 12 ===== Se debe realizar un programa que invierta la posición de las letras en cada una de las palabras guardadas en un vector. Las características de este vector a tener en cuenta son: |
Línea 147: | Línea 158: |
Se debe realizar un programa que invierta la posición de las letras en cada una de las palabras guardadas en un vector. Las características de este vector a tener en cuenta son: * Las palabras en el mismo están separadas por uno o varios espacios. * No existen signos de puntuación. * El vector termina con nulo. |
* Las palabras en el mismo están separadas por uno o varios espacios. * No existen signos de puntuación. * El vector termina con nulo. |
Línea 153: | Línea 162: |
ejemplo | ejemplo |
Línea 161: | Línea 170: |
archivo fuente ex1.s | archivo fuente [[attachment:may_min_ex1.s|ex1.s]] |
Línea 163: | Línea 172: |
===== Ejercicio 11 ===== Partiendo de una cadena de caracteres y 10 vectores de 10 punteros cada uno, se pide realizar un programa que guarde en esos vectores las palabras encontradas en la cadena de la siguiente forma: En el primer vector todas las palabras que tengan menos de 3 letras, luego en el segundo las que tengan 4 letras, en el próximo 5, hasta llegar al décimo vector, donde se guardarán aquellas que tengan mas de 11 letras. En caso de poseer mas de 10 palabras de una clase, no se guardarán. |
===== Ejercicio 13 ===== Partiendo de una cadena de caracteres y 10 vectores de 10 punteros cada uno, se pide realizar un programa que guarde en esos vectores las palabras encontradas en la cadena de la siguiente forma: En el primer vector todas las palabras que tengan menos de 3 letras, luego en el segundo las que tengan 4 letras, en el próximo 5, hasta llegar al décimo vector, donde se guardarán aquellas que tengan mas de 11 letras. En caso de poseer mas de 10 palabras de una clase, no se guardarán. |
Línea 173: | Línea 179: |
===== Ejercicio 12 ===== | ===== Ejercicio 14 ===== |
Línea 176: | Línea 182: |
Ejemplo | Ejemplo |
Línea 186: | Línea 192: |
archivo fuente [[attachment:prom_vector_ex1.s | ex1.s]] | archivo fuente [[attachment:prom_vector_ex1.s|ex1.s]] |
Trabajo Práctico Nro.3 Assembler
Este práctico tiene como objetivo ejercitarse en la programación del assembler del ARM como así también conocer las herramientas necesarias para resolver las diferentes instancias de un proyecto ( Escritura del código, compilación, enlace y simulación ).
Todos los ejercicios se realizan en base al microcontrolador LPC 2114, pero no se hace referencia al hardware de periféricos, lo que permite la fácil simulación.
Para la realización de los prácticos en esta primera etapa, utilizaremos el mismo nombre del archivo fuente y el de los archivos en binario, distinguiendo a cada ejemplo o ejercicio por el nombre del directorio que utilizamos, esto permite utilizar el mismo Makefile para todos los ejercicios.
Tendremos entonces dentro del directorio de cada ejercicio los siguientes archivo:
Archivo de entrada
ex1.s archivo en texto del programa en assembler
Este archivo está constituido por un encabezado que es fijo para todos los ejemplos
.text .arm .global _start _start: b reset b loop b loop b loop b loop nop b loop b loop /* ============================== * CODIGO * ============================== */ reset: ...... ......
...... ...... loop: b loop /* ============================== * CONSTANTES * ============================== */ CTE1: .word 0x1231AAAA .end
Archivo de configuración
Makefile archivo de configuración usado por el make
Archivos de salida generados por make
ex1.elf archivo binario.
ex1.hex archivo binario formato Intel, usado para grabar el microcontrolador.
ex1.lst archivo con el código fuente y el binario desensamblado.
Archivo de configuración general para todos los ejemplos (Makefile)
Ejercicio 1
Realizar un programa que sume dos números de 64 bits cada uno, guardando el resultado en R5 R6 (64bits), los números a sumar estarán dispuesto en R1 R2(64bits) y R3 R4(64bits) respectivamente.
archivo fuente ex1.s
Ejercicio 2
Realizar un programa que analizando un bit en el registro r3 active una alarma si este bit es 0, el nro de bit a analizar está guardado en el registro r4, la alarma se activa escribiendo un 1 en el bit 16 de r6
archivo fuente ex1.s
Ejercicio 3
Realizar una serie de subrutinas que realizen diferentes comparaciones, devolviendo r0 = 0 si estas comparaciones fueron falsas y r0<>0 si fueron verdaderas, las comparaciones son las siguientes
r1<100 y r1>20
r1<100 o r2>20
- r1 = 10 o r1 = 15 o r1 = 20
- r1 = 10 y r2 = 15 y r3 = 20
archivo fuente ex1.s
Ejercicio 4
Realizar un programa que dado un numero guardado en R1 lo multiplique por 10, de dos formas distintas, usando la instrucción mul y por corrimiento
archivo fuente ex1.s
Ejercicio 5
Realizar un programa que dado un numero guardado en R1 y otro en R2, calcule el resultado de elevar R1 a la potencia de R2 y guardar el resultado en R3 (R3 = R1^R2)
archivo fuente ex1.s
Ejercicio 6
Realizar un programa que dada una cadena con terminación nula guardada en VECT, la pase a mayúscula, guardando el resultado en el mismo vector VECT
nota:la cadena de entrada solo contendrá valores alfabéticos o espacio en blanco ('a' - 'z','A' - 'Z')
archivo fuente ex1.s
Ejercicio 7
Realizar un programa que dado un vector de 16 halfword con signos, guarde en R1 el resultado de su promedio
archivo fuente ex1.s
Ejercicio 8
Realizar un programa que sume los word de un vector VECTW sin signo en las posiciones indicadas por un segundo vector VECTB de 20 byte,el resultado guardarlo en R1
ejemplo
VECTB = 1,3,2,0,2......
VECTW = 1,111,222,333,444,555,666,......
se suman 111+333+222+1+222...
archivo fuente ex1.s
Ejercicio 9
Dado un vector de 16 words con signo, realizar un programa que encuentre el elemento del vector mas cercano a la media del mismo.
archivo fuente ex1.s
Ejercicio 10
Dada una cadena de caracteres con terminación nula la cual contiene palabras separadas por espacio, realizar un programa que pase a minúscula todas las letras con excepción de la primera de cada palabra que deberá ser pasada a mayúscula, además, las palabras de menos de 3 letras deberán quedar en minúscula
ejemplo
entrada
VECT = "El mUndo dE Hoy",0
salida
VECT = "el Mundo de Hoy",0
archivo fuente ex1.s
Ejercicio 11
Se debe realizar un programa que calcule de los 100 primeros números naturales cuales son primos usando el método de la "Criba de Eratóstenes". El método se resume en estos pasos:
- se carga un vector de 99 elementos con los números naturales del 2 hasta 100
- se comienza por el numero 2, lo dejamos y eliminamos a partir de allí todos los números múltiplo de 2
- luego nos corremos hasta el próximo número no borrado ( en este caso el 3) y eliminamos todos los múltiplos de 3
- el siguiente numero sin eliminar será el 5, lo dejamos y eliminamos todos los múltiplos de 5
- así vamos avanzando, cuando llegamos a un número que no ha sido eliminado lo dejamos y a partir de allí eliminamos los múltiplos de él
Al final copiamos a un nuevo vector todos los números no eliminados.
archivo fuente ex1.s
Ejercicio 12
Se debe realizar un programa que invierta la posición de las letras en cada una de las palabras guardadas en un vector. Las características de este vector a tener en cuenta son:
- Las palabras en el mismo están separadas por uno o varios espacios.
- No existen signos de puntuación.
- El vector termina con nulo.
ejemplo
vec1 = " Las palabras en el mismo están separadas por uno o varios espacios ",0
resultado
vec1 = " saL sarbalap ne le omsim nátse sadarapes rop onu o soirav soicapse ",0
archivo fuente ex1.s
Ejercicio 13
Partiendo de una cadena de caracteres y 10 vectores de 10 punteros cada uno, se pide realizar un programa que guarde en esos vectores las palabras encontradas en la cadena de la siguiente forma: En el primer vector todas las palabras que tengan menos de 3 letras, luego en el segundo las que tengan 4 letras, en el próximo 5, hasta llegar al décimo vector, donde se guardarán aquellas que tengan mas de 11 letras. En caso de poseer mas de 10 palabras de una clase, no se guardarán.
Nota: no es necesario guardar las palabras en otro vector, simplemente con guardar el puntero de comienzo de la palabra y luego cambiar el espacio que sigue a esta por Nulo es suficiente.
archivo fuente ex1.s
Ejercicio 14
Dada una cadena de bytes sin signo de terminación nula, por cada elemento de esta cadena se sacará el promedio del mismo con los tres bytes anteriores guardando este valor en una segunda cadena en la posición correspondiente. La excepción a esta regla son los tres primeros valores que son guardados directamente en la segunda cadena sin calculo de promedio.
Ejemplo
cadena1 = 2,14,7,8,9,2,.......,0
salida
cadena2 = 2,14,7,7,9,6
donde 2 <- 2, 14 <- 14, 7 <- 7, 7 <- prom(2+14+7+8), 9 <- prom(14+7+8+9), 6 <- prom(7+8+9+2)
archivo fuente ex1.s