Programa en Lenguaje "Assembler" (Operaciones aritméticas)

in #spanish2 years ago

  Soy estudiante de ingeniería electrónica de la Universidad Simón Bolívar de Venezuela (USB), hace unos meses me encontraba cursando la materia “Arquitectura del computador 1” donde se nos estuvo evaluando la elaboración de programas en lenguaje “Assembler” a través del MARS4_5. Una de nuestra primeras evaluaciones fue la ejecución de operaciones de aritmética entera y punto flotante del MIPS.

  Objetivos:

  Aplicar los conceptos de “Carry Over”, “Overfow” y “Bad Result” en las operaciones de aritmética entera del MIPS.

   Utilizar la aritmética punto de flotante del MIPS para resolver en lenguaje “Assembler” problemas comunes de ingeniería y matemática aplicada.

  Entre las indicaciones del profesor se nos pidió que al iniciar el programa se desplegara un menú con diferentes opciones para ejecutar cada programa solicitado. Por ello se utilizó un solo archivo del MARS para englobar todos los programas.

  Se declaró una directiva “.data” que englobará todas las cadenas de caracteres tanto para el menú como para cada programa.


Directiva ".data" (Imagen Propia)

  Se declaró la directiva “.text” para empezar el programa, el cual inicia imprimiendo el menú de opciones para que el usuario seleccione la operación a realizar.


Directiva ".text"(Imagen Propia)

  Lab02-02:

  Tras seleccionar el número “1” se enlaza al programa para determinar el promedio de “n” números ingresados.

  Se declararon las variables iniciales en modo flotante SUMA y CANTIDAD (las cuales pueden ir cambiando en el trascurso del programa) además de CONDICION e INCREMENTO (Las cuales se usaron para comparar y establecer condiciones).


Fragmento del Código "Lab0202" (Imagen Propia)

  El programa utiliza la función “Ingresa” para desplegar un aviso para ingresar los números seguido de la condición de ingresar el número “0” para finalizar el mismo. Cada vez que se ingresa un numero nuevo, el programa pregunta si este es igual a cero.

  Si resulta ser distinto de cero, se salta a la función “Sumar” la cual procede a incrementar en “1” el parámetro “CANTIDAD” y a sumar el valor ingresado al parámetro “SUMA” (el cual es cero originalmente), una vez hecho esto regresa a la función “Ingresa” para recibir otro número.

  Si el número es igual a cero, se salta a la función “Preguntar” la cual determina si este es el primer número ingresado para evitar una división entre cero. Si es el primer valor ingresado, el programa ira a la función “FinalizarConError” y mostrará un aviso diciendo que no hay número para calcular promedio y posteriormente terminará. Si ya se han ingresado otros números, el programa se dirigirá a la función “CalculaPromedio” y allí realizara la operación correspondiente de SUMA/CANTIDAD para calcular el promedio e imprimir el mismo.


Fragmento del Código Lab0202 (Imagen Propia)

  Lab02-03:

  Tras seleccionar el número “2” se enlaza al programa para la aproximación de la raíz de un número utilizando el método iterativo de Newton.

  En el bloque 1 se fijó un parámetro “X = 100” el cual se utilizó como pivote general para la fórmula de Newton Raphson, además de establecer el numero “2” como un flotante para ser utilizado en la formula, en el bloque 2 se solicita el número que se desea evaluar y ”R”.


Fragmento del Código Lab0203 (Imagen Propia)

  En el bloque 3 se ingresa a la función “Formula” la cual desarrolla la fórmula de Newton Raphson con los parámetros establecidos anteriormente: [X - (X^2-R)/(2*X)]. Al final se evalúa el resultado obtenido y se compara con la raíz cuadrada de R (el número ingresado), de no coincidir se regresa a la función “Formula”, este proceso se repite hasta que los valores coincidan. Una vez el valor arrojado por la fórmula es igual a la raíz cuadrada de R se salta a la función “Resultado” la cual imprime la raíz del número solicitado.


Fragmento del Código Lab0203 (Imagen Propia)

  Lab02-04:

  Tras seleccionar el número “3” se salta al programa para determinar las raíces de un polinomio de segundo grado.

  En el primer bloque, el programa se encarga de solicitar al usuario los valores de los términos del polinomio, siguiendo la forma de la ecuación aX^2 + bX + c.


Fragmento del Código Lab0204 (Imagen Propia)

  Posteriormente el programa salta a la función “CalculaRaiz” donde sigue la formula estándar para calcular las raíces de un polinomio de segundo grado: 𝑋=(−𝑏±(𝑏2−4𝑎𝑐)^1/2)/(2∗𝑎) y al terminar verifica si el número dentro de la raíz cuadrada es positivo o negativo.


Fragmento del Código Lab0204 (Imagen Propia)

  De ser positivo este valor procede a calcular cada una de las dos soluciones X1 y X2, luego salta a la función “Imprime” donde se imprimen ambas soluciones.


Fragmento del Código Lab0204 (Imagen Propia)

  De ser negativo se salta a la función “RaizImaginaria” donde se despliega un mensaje donde indica que el polinomio no tiene soluciones reales y se finaliza.


Fragmento del Código Lab0204 (Imagen Propia)

  Lab02-05:

  Tras seleccionar el número “4” se salta al programa para determinar el seno del ángulo ingresado. El programa carga en el Coprocesador1 el valor del float PI definido anteriormente en la data para poder trabajar con él, luego solicita al usuario que indique el número cuyo seno se desea calcular.


Fragmento del Código Lab0205 (Imagen Propia)

  Posteriormente se definen las constantes de tipo flotante con las que se va a trabar para calcular los factoriales y transformar a radianes el ángulo.


Fragmento del Código Lab0205 (Imagen Propia)

  En el siguiente bloque se transforma el número ingresado de grados a radianes y calcula los factoriales de 3 y 5 para utilizar la fórmula de Taylor.


Fragmento del Código Lab0205 (Imagen Propia)

  Finalmente se calcula el Seno del ángulo utilizado la fórmula de Taylor con los tres primeros términos: 𝑆𝑒𝑛𝑥=𝑥−𝑥^3/3!+𝑥^5/5! y posteriormente lo imprime.


Fragmento del Código Lab0205 (Imagen Propia)

  Resultados:

  Al iniciar el programa se muestra el menú con un número correspondiente a cada operación a realizar.


Menú del programa. (Imagen Propia)

  Promedio de "n" números:

  Al seleccionar la opción 1 nos conduce al programa para calcular el promedio de “n” números, se introdujo una serie de números y al ingresar el “0” se muestra el promedio de la serie. Y al introducir de primero el número “0” nos muestra el mensaje pertinente y finaliza.


Resultados de la opción "Calcula el promedio de "n" números". (Imagen Propia)

  Aproximación de la raíz de un número utilizando el método iterativo de Newton:

  Al seleccionar la opción 2 nos conduce al programa para calcular el valor aproximado de la raíz de un número mediante el método iterativo de Newton.

  Al introducir un número cualquiera se muestra un valor aproximado de su raíz cuadrada por la izquierda o por la derecha.


Resultado de la opción "Raíz cuadrada utilizando el metodo iterativo de Newton". (Imagen Propia)

  Raíces de un polinomio de segundo grado:

  Tras seleccionar el número “3” se salta al programa para determinar las raíces de un polinomio de segundo grado y se observan los valores de las raíces y el mensaje pertinente cuando se trata de raíces imaginarias.


Resultado de la opción: "Raices de polinomios de segundo grado" (Imagen Propia)

  Estimado del valor del seno del ángulo:

  Tras seleccionar el número “4” se salta al programa para determinar el seno del ángulo ingresado y se muestra el valor aproximado del seno del mismo.


Resultado de la opción: "Calculo del seno de un ángulo". (Imagen Propia)

  Conclusiones

  Se logro emplear el MIPS para desarrollar operaciones aritméticas básicas utilizando el tipo “punto flotante” y se obtuvieron los resultados esperados en cada uno de los programas desarrollados, si bien es cierto que se cumplen con todas las especificaciones pedidas existen métodos mas eficientes para desarrollar cada programa ya que se emplearon muchos registros para realizar las operaciones y existen métodos para obtener los mismos resultados sin ocupar tantos registros, pero los resultados son de igual forma correctos.

  Bibliografía

  Pulido, Juan. Repertorio de Instrucciones MIPS. Práctica de la Asignatura Estructura de Computadores. Politécnica Universidad de Extremadura (2000).

  Vargas, Domingo (2019). Ec2721 – Laboratorio 2. Operaciones Aritmeticas. Universidad Simón Bolívar.