Lenguajes y Autómatas II
Objetivo: Implementar un generador de código que traduzca una secuencia de Cuádruplos a código Ensamblador,
demostrando el manejo de Registros (4.1), Lenguaje Ensamblador (4.2) y Administración de Memoria (4.4).
NOTA: El código generado debe poder ejecutarse.
Podrían usar el simulador MARS (MIPS Assembler and Runtime Simulator).
ID Operador Op1 Op2 Resultado
-1 * A B T1
-2 + T1 C T2
-3 - D 10 T3
-4 < T2 T3 T4
-5 IFFALSE T4 -8
-6 = T2 X
-7 GOTO -9
-8 LABEL -8
-9 = T3 X
-10 RET
Lógica por implementar: if (A * B + C) < (D - 10) then X = A * B + C else X = D – 10
El Desarrollo (Generador de Código)
El estudiante debe crear un programa (en el lenguaje de su elección: Python, Java, C++, etc.) que lea la tabla de
Cuádruplos (ya sea desde un archivo o un hardcode) y genere un archivo de texto con la extensión .asm o .s que
contenga el código Ensamblador MIPS correspondiente.
Puntos Clave para una Entrega: Para obtener una calificación óptima, el proyecto debe demostrar el correcto
entendimiento de los siguientes criterios:
1. Manejo de Registros (4.1)
• Asignación de Registros Temporales: Demostrar que se usaron registros MIPS ($t0, $t1, etc.) para
almacenar los resultados intermedios (T1, T2, T3, T4).
• Reutilización: El generador debe intentar reutilizar los registros temporales. Por ejemplo, una vez que T1
ya no se necesita (después del Cuádruplo 02), el registro que lo contenía debería poder ser usado para
otra variable.
2. Correcta Traducción al Ensamblador (4.2)
• Traducción 1:1: Cada operación aritmética (*, +, -) debe traducirse correctamente a una instrucción MIPS
(mul, add, sub).
• Manejo de Control: Las instrucciones de control (IFFALSE, GOTO, LABEL) deben traducirse
correctamente a instrucciones de salto condicional (bne, beq, etc.) y/o incondicional (j).
3. Administración de Memoria (4.4)
• Carga y Almacenamiento: El código generado debe usar lw (Load Word) para obtener los valores iniciales
de A, B, C, D de la memoria al registro.
• Resultado Final: El resultado final de la variable X debe ser almacenado de vuelta en la memoria usando
sw (Store Word).
• Estructura del Archivo: El archivo .asm debe incluir las secciones .data (definiendo las variables iniciales)
y .text (el código generado).
Material de Apoyo y Consulta
Puntos de la Unidad que
Recurso Descripción
Refuerza
4.2 Lenguaje ensamblador
Descarga e instalación de la herramienta. Es el
Simulador MARS y 4.4 Administración de
banco de pruebas para su código.
memoria
Referencia MIPS Tabla con las instrucciones lw, sw, add, sub, mul, y 4.1 Registros y 4.2
Básica las instrucciones de salto. Lenguaje ensamblador
[Video de YouTube: Ensamblador MIPS32.
Tutorial de MARS Introducción al simulador MARS.] Tutorial que 4.1, 4.2, 4.4 (Aplicación
(YouTube) explica la interfaz, el uso de registros y la ejecución práctica)
paso a paso.
Entender el Se entiende qué son los registros (memoria
Concepto: Máquina rápida) y por qué son escasos, justificando la 4.1 Registros
de Registros necesidad de la asignación.
Elementos a Entregar
El proyecto debe entregarse en un paquete comprimido (.zip o .rar) que contenga:
1. Código Fuente del Generador: El código del programa que realiza la traducción (e.g., [Link]).
2. Archivo de Salida: El código ensamblador generado ([Link]). Este archivo debe ser funcional y
ejecutable, por ejemplo en MARS.
3. Reporte Breve (PDF/Word): Un documento de máximo 2 páginas que incluya:
o Algoritmo de Asignación: Explicación de cómo su programa decide qué Cuádruplo se asigna a
qué registro temporal.
o Captura de Pantalla: Una imagen del simulador ‘MARS’ mostrando el código generado, ejecutado
y con el valor final de la variable X visible en memoria.
Criterio de Evaluación (Rúbrica)
El proyecto será evaluado sobre una base de 100 puntos, distribuidos en tres áreas principales de la Unidad 4,
más la documentación y presentación.
Puntos
Categoría Criterio de Logro y Evidencia
Máximos
1. Generación de Traducción Completa y Funcional: El archivo [Link] es generado
35 pts.
Código (4.2) correctamente y se ejecuta sin errores sintácticos en el simulador.
Manejo de Control: Las instrucciones de control (IFFALSE, GOTO,
15 pts. LABEL) se traducen de forma lógica y correcta a saltos condicionales
(bne/beq) y etiquetas.
Traducción Aritmética: Todas las operaciones aritméticas (*, +, -, =)
20 pts. están traducidas de manera precisa a sus equivalentes MIPS (mul, add,
sub, li, etc.).
2. Manejo de Administración de Memoria (4.4): Se usan correctamente lw y sw para
Recursos (4.1 y 30 pts. cargar las variables iniciales (A, B, C, D) y almacenar el resultado final
4.4) (X).
Asignación y Reutilización de Registros (4.1): El código fuente del
generador implementa una lógica para asignar variables temporales (T1-
20 pts.
T4) a registros ($t0, $t1...). Se intenta reutilizar un registro cuando el
valor temporal ya no es necesario.
3. Desarrollo y Código Fuente del Generador: El programa que realiza la traducción es
15 pts.
Codificación legible, bien estructurado y utiliza comentarios claros.
Automatización: El generador toma la entrada de Cuádruplos y produce
10 pts.
la salida .asm de manera automática y correcta.
Reporte Breve: Incluye la explicación del algoritmo de asignación de
4. Documentación y
20 pts. registros y la captura de pantalla de MARS con el valor final de X
Entrega
verificado.
Formato de Entrega: El proyecto se entrega en el formato solicitado
10 pts.
(paquete comprimido .zip o similar) y a tiempo.
10 pts. Bono
Se otorgará un bono de hasta 10 puntos extra si el código Ensamblador generado incluye una pequeña rutina que
imprima el valor final de la variable X en la consola de MARS, demostrando un conocimiento adicional del
subsistema de E/S (syscall).