viernes, 19 de abril de 2013

Ensamblador

Introducción
Este tema de la asignatura está dedicado a ensamblador, un lenguaje de bajo nivel, y más concretamente, al ensamblador del MIPS (R2000/R3000). Se trata de un lenguaje con pocas instrucciones, fácil de aprender (con ciertos conocimientos previos) y muy polivalente, ya que es una arquitectura bastante usada. El objetivo de las prácticas de este tema era conocer un poco las bases del lenguaje, y aprender a realizar pequeños algoritmos con un fin muy concreto. Como conclusión, podemos asegurar que es un tema bastante interesante para tratar incluso más a fondo, ya que ayuda a comprender de cierta forma cómo funcionan los computadores y lo que ocurre cuando programamos en lenguajes de más alto nivel.

Una vez introducida la práctica, comenzémos con la presentación de su transcurso:

Día 1, práctica 1:
Tras los primeros pasos con MARS, y tras familiarizarnos con su entorno, procedemos a la modificación de un programa que realiza la sucesión de fibonacci.
Dicha modificación  consiste en que la sucesión se realice con los tres números anteriores, en lugar de con los dos.



Esta actividad, apenas resultó difícil, gracias a nuestros conocimientos previos de programación y a la previa familiarización previa con MARS y el lenguaje ensamblador MIPS.

Día 2, práctica 1:
En este día, nos dispusimos a la realización de la relación de ejercicios, los problemas: 1,2,3,4,5, que se detallarán a continuación:

Nos dieron el código puesto anteriormente para realizar cambios sobre el, en los proximos cuatro problemas,  y familiarizarnos mas aun con este lenguaje.

En este 1er problema, teníamos que realizar un cambio para cargar los valores de array media, en lugar de array_byte.
El 2º problema, es prácticamente igual que el anterior, sustituimos array_byte por array_palabra. Lo que tuvimos que cambiar en el problema 1 y en el 2 fueron los bits de desplazamiento a la hora de manejar los elementos del array.
El problema 3, trata de escribir los elementos impares del array tratado (array_media).

El problema 4, es muy parecido al anterior, pero en lugar de mostrar los elementos impares, mostramos los elementos pares del array tratado (array_palabra), separados por una coma.
En el problema 5, ya no teníamos que modificar código, por primera vez, escribíamos un programa por nosotros mismos, sin un guión ya establecido en cuanto a código se refiere.
Este programa, realiza la suma de dos valores almacenados en memoria,y el resultado lo guardamos en un espacio de memoria reservado anteriormente.

Día 3, práctica 1:

En esta práctica, se procede a la realización de los ejercicios 6-11, que a continuación describimos.
Para el ejercicio numero 6 necesitamos de un código previo sobre el cual trabajaremos:


La modificación consiste en almacenar el resultado de la suma de los elementos del array  en una variable denominada "SUMA". En dicha modificación nos dimos cuenta de que la instrucción de la línea 14 del código que ya estaba escrito y que debíamos usar como modelo, contenía un error, y tuvimos que cambiarla para que el funcionamiento del programa fuera correcto.
En el problema numero 7, sólo tenemos que realizar la asignación en memoria de un array.



En el ejercicio a resolver número 8, se realiza la copia del array numero 1, al array numero 2, realizando un desplazamiento de dos posiciones de memoria. 

 El ejercicio número 9, es uno de los que su realización ha conllevado mayor esfuerzo. Dicho programa, muestra el número mayor encontrado dentro de un array ya definido, así como la posición en la cual se encuentra.
En el problema 10, diseñamos un código que pedía al usuario la introducción de dos valores por teclado, para posteriormente realizar su suma, y mostrar el resultado por pantalla.

El ejercicio 11 consiste en la realización de un bucle, que muestre por pantalla el valor de un array almacenado en memoria.

Comentarios sobre la practica:
-La práctica nos ha resultado interesante puesto que nos ha ayudado a comprender el funcionamiento de la maquina a un nivel que desconocíamos  aunque nos hayamos encontrado alguna dificultad que pudimos resolver al poco tiempo.
-También volver a comentar la errata del código previamente dado al problema 6 en la línea 14, cambiamos la instrucción "ble" por "blt" ya que el índice del array comienza en '0'.
-Podrían haber sido dichas practicas mas llevaderas realizándose de manera mas interactiva.

FAQ's:
¿Qué es MARS?
-Es un entorno interactivo de desarrollo ligero (IDE), especialmente diseñado para el lenguaje ensamblador MIPS.

¿Qué instrucción de salto incondicional debo usar para recorrer el vector?
-Depende de tu código. La instrucción blt significa branch if less than, por lo que se usará como el operador estrictamente menor. La instrucción ble significa branch if less or equal than, por lo que se usará como el operador menor o igual. Al iterar una matriz o vector, como el índice empieza en 0, usaremos (en condiciones normales) la instrucción de salto condicional blt.

Mi programa no se ensambla con los últimos cambios, ¿a que se debe?
-Probablemente, no hayas guardado la ultima modificación antes de ensamblarlo.

Quiero ver que ha ocurrido hasta un punto del programa ya diseñado, ¿cómo se hace?
En la parte izquierda de la ventana "Execute", aparecerán unos checkboxs bajo el nombre de "bkpt", esto quiere decir, "Break points", o lo que es lo mismo, puntos de interrupción.
Marcando esas casillas, conseguirás detener la ejecución del programa cuando llegue a dicha instrucción.

¿Cómo puedo seguir la ejecución de mi programa paso a paso en MARS?
Puedes seguir la ejecución paso a paso, incluso controlar la velocidad de ejecución  en la barra superior derecha del programa.


Realizado por: 
-Francisco Alejandro Naranjo Castañeda
-Eduardo García Ruiz




No hay comentarios:

Publicar un comentario