Skip to content

Codificação

As instruções são vetores binários de 32 bits, podendo ser classificadas de duas formas: segundo sua sintaxe, ou de acordo com sua função. No que se refere à sintaxe, as instruções podem ser do tipo R, I, S, B, U ou J, como demonstrado na Tabela Sintaxe.

Tipo3130-2524-212019-1514-1211-876-0
Rfunct7rs2rs1funct3rdopcode
Iimm[31:11]imm[10:0]rs1funct3rdopcode
Simm[31:11]imm[10:5]rs2rs1funct3imm[4:0]opcode
Bimm[31:12]imm[10:5]rs2rs1funct3imm[4:1]imm[11]opcode
Uimm[31:12]rdopcode
Jimm[31:20]imm[10:1]imm[11]imm[19:12]rdopcode
Tabela Sintaxe - Tabela de Sintaxe dos tipos de instrução.

Sobre cada tipo de instrução:

  • Instruções do tipo R são usadas para realizar operações entre registradores.
  • Instruções do tipo I são utilizadas para realizar operações em registradores com uso de valores imediatos.
  • Instruções do tipo S armazenam valores na memória.
  • Instruções do tipo B realizam desvios no programa dependendo do resultado da comparação de valores em dois registradores.
  • Instruções do tipo U são empregadas em operações que usam os 20 bits mais significativos da instrução como imediato, com os bits remanescentes sendo 0.
  • Apenas a instrução JAL é do tipo J.

Sendo, para cada segmento da instrução:

  • opcode: Codifica o tipo de instrução ou uma instrução específica;
  • funct3: Codifica a operacionalização da instrução;
  • funct7: Codifica uma variação da operacionalização;
  • rs1: Endereça registrador de recurso primário;
  • rs2: Endereça registrador de recurso secundário;
  • rd: Endereça registrador de destinação;
  • imm: Vetor do imediato.

Opcode

Opcodes são segmentos de 7 bits do vetor de instrução. Cada tipo de instrução possui um opcode ou uma instrução possui um opcode exclusivo. Para alguns tipos de instrução, são codificados com mais de um opcode, estando estes exemplificados na Tabela Opcode.

Tabela Opcode - Tabela com exemplos de opcodes comuns.
Nomevalor
OP0110011
OP-IMM0010011
STORE0100011
LOAD0000011
BRANCH1100011
OutrosXXXXX11

Imediato

Os imediatos são vetores binários de 32 bits. Cada tipo de instrução com imediato possui uma sintaxe de imediato demonstrada na Tabela Imediato.

Tabela Imediato - Tabela com a sintaxe dos imediatos de acordo com seu tipo de instrução.
Tipo3130 - 2019 - 121110 - 54 - 10
Iinst[31]inst[30:20]
Sinst[31]inst[30:25]inst[11:7]
Binst[31]inst[7]inst[30:25]inst[11:8]0
Uinst[31:12]000000000000
Jinst[31]inst[19:12]inst[20]inst[30:21]0

Sendo, para cada segmento, inst o vetor da instrução.


Por sua vez, a classificação das instruções segundo sua funcionalidade divide-as em grupos independentemente de sua estrutura. Esses grupos incluem:

  • As instruções de construção, que criam valores em registradores;
  • As instruções de deslocamento, que realizam operações de deslocamento de bits nos valores armazenados nos registradores;
  • As instruções aritméticas, que efetuam operações matemáticas;
  • As instruções lógicas, que são responsáveis por operações lógicas;
  • As instruções de desvio, que alteram o fluxo de execução do programa com base em condições;
  • As instruções de salto, que permitem saltos para outras partes do programa;
  • As instruções de carregar, que carregam valores da memória para os registradores;
  • As instruções de armazenar, que guardam valores dos registradores na memória.

Nas instruções que se seguem, RV32I Base significa que elas pertencem ao conjunto base de instruções para inteiros de 32 bits, e “M” Standard Extension significa que elas pertencem à extensão de Multiplicação:

Publicado sob a Licença MIT.