• Documentación

Lab 3: RISC-V Intro

En este laboratorio vamos a practicar con un problema simple programación en lenguaje ensamblador RISC-V de 32 bits utilizando Jupiter.

Objetivos

  • Practicar, corriendo y debuggeando código ensamblador RISC-V.
  • Escribir funciones en RISC-V con el procedimiento correcto de llamadas a funciones.

Lecturas

  • P&H: 2.12

Preparación

Para comenzar con el laboratorio primero tienen que tener todos los archivos base, estos se encuentran aquí. Recuerden que deben aceptar la asignación de GitHub Classroom y se les creará automáticamente un repositorio con una extensión que termina con su usuario de GitHub. Cuando ya se haya creado el repositorio, pueden ejecutar los siguientes comandos abriendo una terminal (CTRL + T ):

git clone <link del repositorio>
NOTA: Tienen que reemplazar <link del repositorio> con el link del repositorio que se creó.

Introducción a ensamblador RISC-V

Los siguientes ejercicios utilizan un ensamblador y simulador de RISC-V, desarrollado por Andrés Castellanos (Su catedrático). El simulador se llama Jupiter y es un proyecto open source inspirado, inicialmente, en el lengendario SPIM y, posteriormente, en MARS y VENUS para la versión gráfica.

Para instalarlo en su computadora, siga estas instrucciones: Máquina virtual del curso. Felicidades! No necesita instalar nada, puede ejecutar Jupiter usando el siguiente comando:

jupiter

Ubuntu 20+

Descargue este archivo, luego en su terminal vaya a la carpeta donde lo descargó y ejecute estos comandos:

unzip Jupiter-3.1-linux.zip
sudo mv image /opt/jupiter
echo 'export PATH=/opt/jupiter/bin:$PATH' >> ~/.bashrc 
source ~/.bashrc

Después de esto, ya debería poder usar jupiter. Si aun no funciona, la vieja y confiable, reinicie su máquina.

Cosas básicas en Jupiter:

A continuación, les vamos a dar una pequeña guía de Jupiter, para más información visiten la documentación completa.

  • Pueden crear archivos, editarlos y borrarlos desde la pestaña "Editor".
  • Los programas empiezan en la etiqueta global __start, es decir que tienen que definir una etiqueta llamada __start y declararla como global.
.globl __start
__start:
  li a0 10
  ecall       # exit

Sí, allí dice .globl, no .global.

  • Las etiquetas terminan con dos puntos como ven en el ejemplo anterior.
  • Los comentarios comienzan con el simbolo "#" o ";".
  • Solo pueden poner una instrucción por línea.
  • Cuando hayan terminado de escribir su código, guarden y presionen F3 para ensamblar y poder ejecutar.
  • Los programas siempre tienen que terminar con un ecall de exit y esto se logra poniendo un 10 en a0 (exactamente como el ejemplo anterior). Esto le indica al programa que tiene que terminar. Las instrucciones ecall son análogas a los "System Calls" (llamadas al sistema) y nos permiten hacer cosas como imprimir a consola o reservar memoria dinámica.

Ejercicio 1: Factorial.

En este ejercicio, tienen que implementar la función de factorial en RISC-V que toma un sólo parámetro entero n y retorna n!. Pueden encontrar un esqueleto de esta función en el archivo factorial.s que se encuentra en el repositorio que clonaron. Ustedes sólo necesitan agregar las instrucciones bajo la etiqueta factorial, y el argumento que se pasa a la función va en el registro a0. Pueden resolver este problema ya sea de forma recursiva o iterativa. Asegúrense de que su función retorne de forma apropidada lo siguiente 3! = 6, 7! = 5040 y 8! = 40320.

Autograder

Para este laboratorio pueden probar de forma local el autograder utilizando el siguiente comando:

python3 check.py

Si todo esta correcto el siguiente resultado les deberia de salir:

== Factorial Test Cases =

Test fact -1         Pass
Test fact 1          Pass
Test fact 5          Pass
Test fact 10         Pass
Test fact 0          Pass
Test fact 3          Pass
Test fact 4          Pass
Test fact 2          Pass
Test fact 9          Pass
Test fact 8          Pass

Grade: 100/100

Entrega y calificación

Por favor subir el link de su repositorio al GES. Siempre es necesario que suban su repositorio al GES, incluso si no completaron el ejercicio al 100%, de lo contrario la nota será de 0 puntos automáticamente.

Tienen una semana para completar el laboratorio, es decir, el link para subir el link al GES estará habilitado hasta el 22 de Marzo del 2024 a las 11:55 PM.

La calificación de este laboratorio será de 0 a 100 puntos, donde 100 puntos es la calificación máxima. La calificación se basará en la cantidad de respuestas correctas. Si tienen alguna duda sobre la calificación, por favor envíen un correo a los auxiliares o por medio de los canales correspondientes.