REPORTE DE DE CODIFICADOR AssemblyBinary.py - AlexDominguez18/MIPS_32_BITS GitHub Wiki

¿POR QUÉ USAR UN SCRIPT EN PYTHON?

Python, al igual que muchos lenguajes de scripting, posee herramientas que nos facilitan mucho realizar tareas que tienen que ver con la lectura de archivos. En una idea inicial, pretendía hacerlo en el lenguaje de C++, esto debido a que este semestre estuve estudiando acerca de la serialización de los bits y el flujo de estos. A priori parecía mucho más sencillo realizar en dicho lenguaje, pero al considerar que este sería un archivo que podría usarse en las máquinas de mis otros compañeros del equipo, opté por usar un lenguaje interpretado como lo es Python.

Usando Python, basta con que mis compañeros posean el interprete para poder ejecutar el script de manera correcta. Haber decidido usar Python sobre otros lenguajes, pues me brindó la oportunidad de retomarlo y además descubrir una que otra característica interesante del lenguaje.

¿EN QUÉ CONSISTE EL SCRIPT?

El script tiene la labor de generar un archivo ya bien sea un ".txt" o un ".mem" con todas las instrucciones que hayan sido colocadas en el archivo de instrucciones traducidas al lenguaje máquina (binario). Entonces, para que el script pueda hacer su labor, por fuerzas necesitamos tener un archivo llamado "instrucciones.txt". En este archivo, el usuario podrá ingresar todas las instrucciones de MIPS 32 con una sintaxis más intuitiva, ya que decidimos que la escritura de las instrucciones respetara la estructura general de cada tipo de instrucción.

De esta manera, nuestras instrucciones quedan con el siguiente formato dependiendo de su tipo:

  • operacionR $rs, $rt, $rd <------ Tipo R
  • operacionI $rs, $rd, #valor <------ Tipo I
  • operacionJ #direccionSalto <------ Tipo J

¿CÓMO FUE PROGRAMADO?

El funcionamiento general del decodificador es muy sencillo y se divide en las siguientes etapas, las cuales enumero a continuación:

1. Lectura de línea en el archivo de instrucciones

Lo primero que hace el script es leer la línea actual del archivo, guarda todo el contenido en una cadena para posteriormente corroborar si alguna de las palabras reservadas de las instrucciones de MIPS están contenidas en dicha cadena.

2. Determinar el tipo de instrucción que se va a realizar.

En esta etapa, el script se encarga de determinar que tipo de instrucción es, ya sea R, I o J. Sea cual sea el caso, cuando identifica el tipo de instrucción manda a llamar a otra subrutina que se encarga de agregar los opcode correspondientes a otra cadena.

3. Traducir los valores manipula la instrucción

Para llevar a cabo dicha labor, el programa se encarga de eliminar los caracteres que no sean números, o sea que elimina las letras, las comas, los símbolos de dolar y los numerales. De esta manera nos quedan los valores que serán traducidos a binario y serán concatenados con la cadena que posee el opcode.

4. Agregar los bits restantes.

Una vez tenemos la cadena de bits con el opcode y los valores que manipula la instrucción, se procede a concatenar los últimos bits a la cadena de bits de la instrucción, estos dependerán de cuál sea la instrucción ya que los últimos bits van a variar en cada instrucción de MIPS.

5. Guardar la cadena de bits en otro archivo

Una vez tenemos nuestra cadena de 32 bits, tenemos que separar cada 8 bits la cadena con un salto de línea, esto ya que nuestro ancho de palabra es de 8 bits en la memoria de instrucciones. Una vez se escriben las líneas correspondientes a la instrucción, el script avanza a la siguiente línea del archivo de instrucciones y repite todo el proceso con la instrucción que sigue. En caso de ya no haber más línea que leer, el script cierra y genera el archivo completo con las instrucciones ya en binario.

Resultados obtenidos:

Aquí tenemos nuestro archivo de instrucciones, una vez guardado en la misma ubicación de nuestro script podemos proceder a ejecutarlo.

AB 1

Con fines ilustrativos, el script desplegará en consola las instrucciones que se están traduciendo a binario. Tras cada enter del teclado, el script traduce la siguiente instrucción.

AB 2

Una vez traducidas todas las instrucciones, se habrá creado un archivo .txt o .mem según modifique el código del script, con las instrucciones en binario, listas para ser usadas en la memoria de instrucciones del MIPS.

AB 3

Conclusiones:

El poder haber trabajado en el desarrollo de este decodificador, me permitió retomar Python y poder hacer algo que está muy relacionado con materias próximas como lo son teoría de la computación o traductores de lenguaje. Creo que comprender como todo el código va siendo decodificado en diferentes niveles hasta llegar al nivel más bajo de entendimiento (el lenguaje máquina) nos abre las puertas muchas formas de programar, ya que ahora no solo tenemos en mente que el programa jale, sino que sabemos o nos damos una idea de como se está comportando internamente nuestra computadora.