docoo
Instruciones risc-v
El código risc-V son las instrucciones en binario expresadas en el apartado Instrucciones(R-V:32I), pero estas instrucciones tienen una forma más comoda y legible que es lenguaje ensamblador. Aquí se ordenaran no por la estructura binaria que tiene, las ordenaremos por el tipo de función que desempeñan.
  1. Aritmetica
    nemónico nombre ejemplo explicación
    add +
     add x8 , x7 , x6 
    x8 = x7 + x6
    sub -
     sub x8 , x7 , x6 
    x8 = x7 - x6
    addi + inmediata
     addi x8 , x7 , 3 
    x8 = x7 + 3
    lui load upper inmediate
     lui x8 , 43 
    escribe un número en los 20 bits de mayor peso o dicho de otra manera introduce el valor y lo multiplica por $2^{11}$
    auipc add upper inmediate to pc inmediata
     auipc x8 , 0xff 
    lo mismo que lui pero desde una referencia

    La realización de la resta inmediata no existe porque es lo mismo que sumar el opuesto (restar 3 es lo mismo que sumar -3) de este modo nos ahorramos una instrucción.

  2. Lógicas
    nemónico nombre ejemplo explicación
    and y
     and x8 , x7 , x6 
    x8=(x7&x6)
    andi y inmediato
     andi x8 , x7 , 15 
    x8=(x7&15)
    or o
     or x8 , x7 , x6 
    x8=(x7|x6)
    ori o inmediata
     ori x8 , x7 , 15 
    x8=(x7|15)
    xor o excluyente
     xor x8 , x7 , x6 
    x8=(x7^x6)
    xori o excluyente inmediata
     xori x8 , x7 , 15 
    x8=(x7^15)

    La realización de la resta inmediata no existe porque es lo mismo que sumar el opuesto (restar 3 es lo mismo que sumar -3) de este modo nos ahorramos una instrucción.

  3. Desplazamientos
    nemónico nombre ejemplo explicación
    sll desplazamiento a izquierda lógico
     and x8 , x7 , x6 
    x8 = x7 << x6
    slli desplazamiento a izquierda lógico inmediato
     andi x8 , x7 , 3 
    x8= x7 << 3
    srl desplazamiento a la derecha lógico
     srl x8 , x7 , x6 
    x8= x7 >> x6
    srli desplazamiento a la derecha lógico inmediato
     srl x8 , x7 , 3 
    x8= x7 >> 3
    sra desplazamiento a la derecha aritmético
     srl x8 , x7 , x6 
    srai desplazamiento a la derecha aritmético inmediato
     srl x8 , x7 , 3 

    Para el caso de los registros a derechas hay dos formas de hacerlos, poniendo 0 en las casillas libres (este es el modelo lógico) o poniendo lo que se haya en la última casillas que se desplaza , en el caso de que sea un 1 pues será un 1 y en el caso de que sea un 0 pues este.

  4. Carga y almacenaje (load y store)
    nemónico nombre ejemplo explicación
    lw cargar palabra
     lw x10 , 15(x11) 
    carga en el registro x10 la palabra que se encuentra en la memoria con dirección (la almacenada en x11 ) más 15 bytes.
    lh cargar media palabra
     lh x10 , 15(x11) 
    carga en el registro x10 la media palabra que se encuentra en la memoria con dirección (la almacenada en x11 ) más 15 bytes.
    lb cargar el byte
     lb x10 , 15(x11) 
    carga en el registro x10 el byte que se encuentra en la memoria con dirección (la almacenada en x11 ) más 15 bytes.
    lhu cargar media palabra sin signo
     lhu x10 , 15(x11) 
    carga en el registro x10 la media palabra que se encuentra en la memoria y lo espande como un valor positivo con dirección (la almacenada en x11 ) más 15 bytes.
    lbu cargar el byte sin signo
     lb x10 , 15(x11) 
    carga en el registro x10 el byte que se encuentra en la memoria (considerandolo como positivo) con dirección (la almacenada en x11 ) más 15 bytes.
    sw guardar palabra
     sw x10 , 15(x11) 
    guarda el contenido del registro x10 en (la dirección que almacena el x11) más 15 bytes
    sh guardar media palabra
     sh x10 , 15(x11) 
    guarda el contenido de medio registro x10 en (la dirección que almacena el x11) más 15 bytes
    sb guardar byte
     sb x10 , 15(x11) 
    guarda el contenido del byte x10 en (la dirección que almacena el x11) más 15 bytes
    * cuando la palabra es menor que un registro entonces se almacena la parte menos significativa.

    Cuando decimos que se guarda en la dirección almacenada en x11 más 15 bytes en realidad queremos decir en la dirección almacenada en x11 más (15 * 8) ya que un byte ocupa 8 bits.

  5. saltos
    nemónico nombre ejemplo explicación
    jal salto
     jal x10 , 4 
    va a la dirección guardada en x10 + 4.
    jalu salto al registro
     jal x10 , 4 
    va a la dirección guardada en x10 + 4.
    beq salta si son iguales
     beq x10 , x11, eti 
    va a eti si x10 y x11 son iguales.
    bne salta si no son iguales
     bne x10 , x11, eti 
    va a eti si x10 y x11 no son iguales.
    bge salta si es mayor o igual
     bge x10 , x11, eti 
    va a eti si x10 y x11 es >=.
    bgeu salta si es mayor o igual (no se consideran negativos)
     bge x10 , x11, eti 
    va a eti si x10 y x11 es >=.
    blt salta si es menor que
     blt x10 , x11, eti 
    va a eti si x10 y x11 es <.
    bltu salta si es menor (no se consideran negativos)
     bge x10 , x11, eti 
    va a eti si x10 y x11 es <.

    Cuando decimos que se guarda en la dirección almacenada en x11 más 15 bytes en realidad queremos decir en la dirección almacenada en x11 más (15 * 8) ya que un byte ocupa 8 bits.

    Se puede ver que es general el uso de la terminación u para referirnos a que los registros solo hacen referencia a números positivos.

    Si existe mayor o igual no existe la instrucción menor o igual ya que es lo mismo pero cambiada de orden.

  6. Llamadas al sistema (syscall)
    nemónico nombre ejemplo explicación
    ecall llamada al sistema
     ecall 
    llama al sistema
    ebreak llamada al sistema
     ebreak 
    pasa el control al debug

    Llamar al sistema no es una acción como las otras, más bien es una función, cuya acción dependerá tanto del sistema como de los parámetros que se le envien.
    No todos los sistemas tienen el mismo conjunto de acciones, no es lo mismo una maquina de trabajo con acciones con entrada y salida de datos que recibe de una persona física como un sistema empotrado que se dedica a medir una temperatura y posiblemente no tenga ninguna opción de llamada.

  7. Instrucciones de control
    nemónico nombre ejemplo explicación
    frece
      
    Coordina accesos entre dispositivos I/O y otros hilos.
    frece.i
      
    Sincroniza el flujo de instrucción de datos.

    Llamar al sistema no es una acción como las otras, más bien es una función, cuya acción dependerá tanto del sistema como de los parámetros que se le envien.
    No todos los sistemas tienen el mismo conjunto de acciones, no es lo mismo una maquina de trabajo con acciones con entrada y salida de datos que recibe de una persona física como un sistema empotrado que se dedica a medir una temperatura y posiblemente no tenga ninguna opción de llamada.

--