Lab 8 (RISC-V)

En este laboratorio van a programar en lenguaje ensamblador para practicar y reforzar los conocimientos que adquirieron durante CC3.

Antes de empezar, vamos a obtener los archivos necesarios desde Github Classroom:

https://classroom.github.com/a/g5ICjk6y
circle-exclamation

Jupiter

Los siguientes ejercicios utilizan el simulador que ya han utilizado en CC3 llamado Jupiter (anteriormente llamado V-Sim) para instalarlo por favor corran lo siguiente en una terminal:

sudo add-apt-repository ppa:andrescv/jupiter
sudo apt-get update
sudo apt-get install jupiter

Pueden correr jupiter de forma gráfica utilizando lo siguiente:

jupiter

o en modo línea de comandos utilizando lo siguiente:

jupiter [options] <files>

las opciones disponibles son las siguientes:

[General Options]
  -h, --help               show Jupiter help message and exit
  -v, --version            show Jupiter version
  -l, --license            show Jupiter license

[Simulator Options]
  -b, --bare               bare machine (no pseudo-instructions)
  -s, --self               enable self-modifying code
  -e, --extrict            assembler warnings are consider errors
  -g, --debug              start debugger
      --start <label>      set global start label (default: __start)
      --hist <size>        history size for debugging

[Cache Options]
  -c, --cache              enable cache simulation
      --assoc <assoc>      cache associativity as a power of 2 (default: 1)
      --block-size <size>  cache block size as a power of 2 (default: 16)
      --num-blocks <num>   number of cache blocks as a power of 2 (default: 4)
      --policy <policy>    cache block replace policy (LRU|FIFO|RAND) (default: LRU)

[Dump Options]
      --dump-code <file>   dump generated machine code to a file
      --dump-data <file>   dump static data to a file

La documentación de Jupiter la pueden encontrar en el siguiente linkarrow-up-right.

Detalles de RISC-V

  • Los programas de RISC-V van en un archivo de texto con extension .s.

  • Los programas deberían de llevar un label global __start que se utilizará como punto de inicio.

  • Los programas deberían de terminar de la siguiente manera:

  • Las etiquetas o labels terminal con dos puntos.

  • Los comentarios comienzan con un numeral o con punto y coma.

  • No pueden poner más de una instrucción por línea.

Recordatorio de Assembler

Uno de los requisitos de CC4 es dominar los temas de CC3, incluyendo programar en lenguaje ensamblador. RISC-V es una arquitectura RISC por lo cual es muy fácil de utilizar. Algunas instrucciones que deberían conocer hasta el momento son:

Cuando realizamos llamadas a funciones en assembler debemos ser cuidadosos de no perder las direcciones de retorno. Este y otros datos deben ser guardados en el stack al inicio de la llamada y restaurados cuando esta termina.

El convenio de RISC-V es el siguiente:

  • Los registros aX se utilizan como argumentos cuando se manda a llamar a una función.

  • Los registros aX se utilizan como valores de retorno de las funciones.

  • Los registros tX se utilizan como temporales, cuyo valor puede perderse entre llamadas.

  • Los registros sX sobreviven a llamadas.

  • El registro sp es el puntero hacia el stack.

  • El registro ra contiene la dirección de retorno (pc + 4).

Veamos un ejemplo sencillo de un ciclo en RISC-V:

Veamos ahora un programa con llamadas recursivas:

Ejercicio 1: fibonacci.s

En un archivo llamado fibonacci.s implementen la función de fibonacci en lenguaje ensamblador RISC-V.

Ejercicio 2: hanoi.s

Otra función recursiva, traduzca a RISC-V el siguiente código que sirve para resolver el juego de torres de Hanoi.

Ejercicio 3: syscall.s

Realice un programa que lee del teclado un número y una cadena de caracteres. Imprimia la cadena la cantidad de veces que su número indica.

circle-check

Last updated

Was this helpful?