Instrucciones al compilador de risc-V

Las instruciones al compilador, no son ordenes que se ejecuten en el programa , sin embargo facilitan la organización de como ordena estas, y son importantes para comprender mejor el código.

  1. Comentario : se pueden poner en cualquier punto del código y tienen que empezar por el carácter "#" esto el compilador lo elimina como si no estuviese escrito pero, con o sin el el código no cambiará pero nos valdrá para dar información sobre parte del código.
  2. .text : (segmento de texto) esta etiqueta indica que a continuación se escribiran las instrucciones que pasaran a código maquina.
  3. .bss : seccion bss son para variables glovales inicializadas a 0.
  4. .section .foo : Los siguientes items se almacenan en la varible .foo .
  5. .data : representa el segmento de datos, esto indica que a continuación se escribiran datos en el segmento de memoria, pero no instrucciones.
    Dentro de este es normal ver otras indicaciones como:
    • .word: indica que se reserva una palabra (4bytes) en este caso.
    • .half: indica que se reserva media palabra (2bytes) en este caso.
    • .byte: indica que se reserva un byte en este caso.
    • .dword: indica que se reserva una doble palabra (8bytes) en este caso.
    • .string: o .asciz: reservan palabras para una cadena en función de lo que esta ocupe, a tener en cuenta que una cadena de caracteres asci en risc-v termina siempre con el caracter "0" o "\n".
    • .space 15 indica que se reserva bytes, generalmente están iniciados a 0 todas las casillas, pero es buena páctica no dar esto por hecho.
    • .globn : declara la siguiente variable como global y por lo tanto accesible desde cualquier fichero.

    se pueden almacenar más de una palabra de manera cómoda sin necesidad de poner .word para cada una de ellas separandalas por comas "," .
    ej: .word: 0xfabcde10 , 0 , 1 , a

    las reservas se hacen de manera alineada. es decir si tengo una palabra reservada se empieza a reservar los primeros 4 bytes para ella y si luego reservo un byte se reserva el próximo byte para el, así como si reservo otra palabra a continuación lo hará en los 4 bytes siguientes.

    Se utiliza el criterio de almacenamiento little endian.

    • nnnn si queremos escribir un número en decimal se escribiran los digitos normalmente.
    • 0xnnnn si queremos escribir un número en hexadecimal.
    • 'a' se escribe el número asociado al carácter asci a(para este caso 64 pero de manera general será un número entre 0 y 225).
  6. Etiquetas almacenan la dirección de memoria que se indique para poder hacer referencia a ella posteriormente , se escribe el nombre de la etiqueta seguido de dos puntos "etiqueta:" (el compilador va contando instrucciones y segmentos de datos y cuando encuentra una etiqueta apunta la dirección de la siguiente instrucción. Cuando posteriormente es llamada utiliza la dirección donde está.
    ej: esto seria la etiqueta ejemplo y cada vez que se escriba ej esta será sustituida por la dirección en la que se encuentre escrito ej:
  7. Equivalencias .eqv nombre 43 siempre que se escriba nombre será cambiado por el 43 en el código. ej: .eqv pi 3.141592
  8. .aling n : alinea los siguientes datos en un formato de $2^n$ bytes.

    .baling n : alinea los siguientes datos en un formato de $n bytes$ bytes.

  9. .option Escribe opciones , a este parámetro se le puede enviar:
    • rvc -> comprime las siguientes instrucciones
    • norvc -> no comprime las siguientes instrucciones
    • relax -> relajación del linker para las siguientes instrucciones
    • norvc -> no permite relajación del linker para las siguientes instrucciones
    • pic
    • nopic
    • push
    • pop