docoo
Instrucciones(R-V:32I)
La ISA de risc-v 32I se compone de un número reducido de instrucciones.
A continuación se ordenan por tipos.
  • Instrucciones tipo R

    Las instrucciones tipo R se componen de:
    • Registro destino.
    • Registro salida1.
    • Registro salida2.
    • Código de operación. este no está escrito de forma continua, por lo que se divide en: código de función 7, código de función 3 y opcode

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    nemónico fun(7) rs2(5) rs1(5) fun(3) rd(5) opcode
    add 0000000 000 0110011
    sub 0100000 000 0110011
    and 0000000 111 0110011
    or 0000000 110 0110011
    xor 0000000 100 0110011
    slt 0000000 010 0110011
    sltu 0000000 011 0110011
    sll 0000000 001 0110011
    srl 0000000 101 0110011
    sra 0100000 101 0110011
  • Instrucciones tipo I

    Las instrucciones tipo I se componen de:
    • Registro destino.
    • Registro salida1.
    • Inmediato.
    • Código de operación. este no está escrito de forma continua, por lo que se divide en: código de función 3 y opcode

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    nemónico Inm(7) Inm(5) rs1(5) fun(3) rd(5) opcode
    addi 000 0010011
    andi 111 0010011
    ori 110 0010011
    xori 100 0010011
    slti 010 0010011
    sltui 011 0010011
    slli 0000000 001 0010011
    srli 0000000 101 0010011
    srai 0100000 101 0010011
    lb 000 0000011
    lh 001 0000011
    lw 010 0000011
    lbu 100 0000011
    lhu 101 0000011
    jalr
    frence
    frence.i
    ecall
    break

    *El inm(5) en las instrucciones "slli", "srli" y "srai" se conoce como (shamt) y no precisa de más de 5bits, el inm(7) queda reservado como en las instrucciones tipo R a complementar el código de operación

  • Instrucciones tipo S

    Las instrucciones tipo S se componen de:
    • Registro destino.
    • Registro salida1.
    • Registro salida2.
    • Inmediato.
    • Código de operación. este no está escrito de forma continua, por lo que se divide en: código de función 3 y opcode

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    nemónico Inm(7) rs2(5) rs1(5) fun(3) inm(5) opcode
    sb 000 0100011
    sh 011 0100011
    sw 010 0100011

    *En este tipo de instrucción también se concatenan los inmediatos, pero lo hacen de una manera diferente.

  • Instrucciones tipo B

    Las instrucciones tipo B se componen de:
    • Registro destino.
    • Registro salida1.
    • Registro salida2.
    • Inmediato.
    • Código de operación. este no está escrito de forma continua, por lo que se divide en: código de función 3 y opcode

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    nemónico Inm(7) rs2(5) rs1(5) fun(3) inm(5) opcode
    beq 000 1100011
    bne 001 1100011
    blt 100 1100011
    bge 101 1100011
    bltu 110 1100011
    bgeu 111 1100011
  • Instrucciones tipo J

    Las instrucciones tipo J se componen de:
    • Registro destino.
    • Inmediato.
    • Código de operación.

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    Las Instrucciones tipo J tienen el imm está escrito 31[19-12]20[30-21] también se puede ver expresado como 20[10:1]11[19:12] siendo este el orden de los pesos

    nemónico Inm(20) rd opcode
    jal
  • Instrucciones tipo U

    Las instrucciones tipo U se componen de:
    • Registro destino.
    • Inmediato.
    • Código de operación.

    Cada instrucción está compuesta por 32 bits y como RV32I tiene 32 registros necesita 5bits para referenciar cada registro.

    Las instrucciones tipo U tienen el imm ordenado desde el carácter [31-12]

    nemónico Inm(20) rd opcode
    lui
    auipc

La razón por la que un inmediato a veces se parte es por conseguir generalidad de manera que todos los r1, r2, opcode, etc... ocupen las mismas posiciones dentro del registro .
La razón por la que un inmediato a veces se parte aun ocupando un espacio continuo es porque en algunos casos desde el punto de vista algebraico algunos caracteres pueden ser considerados de otra manera como por ejemplo el primer signo de un número puede considerarse como un signo y se trata nuevamente de mantener continuidad en los posicionamientos.

--