Conjunto de Instruções
Carrega Constante
LUI Especificação: Base RV32I
Load Upper Immediate (Carregar Superior Imediato).
Carrega registradores com valores constantes de 32 bits. LUI guarda o valor imediato dos 20 bits mais significativos da instrução nos 20 bits mais significativos do registrador de destino rd, preenchendo os 12 bits menos significativos com zero.
Formato
lui rd, immImplementação
x[rd] = imm[31:12] << 12Sintaxe
| Tipo | 31-12 | 11-7 | 6-0 |
|---|---|---|---|
| U | imm[31:12] | rd | 0110111 |
AUIPC Especificação: Base RV32I
Add Upper Immediate (Adiciona Superior Imediato).
Desloca o valor do imediato da instrução, que consiste nos 20 bits mais significativos, 12 bits à esquerda, preenchendo os 12 bits menos significativos com zero, e o adiciona ao PC. O resultado é então escrito no registrador de destino rd.
Formato
auipc rd, immImplementação
x[rd] = pc + sext(imm[31:12] << 12)Sintaxe
| Tipo | 31-12 | 11-7 | 6-0 |
|---|---|---|---|
| U | imm[31:12] | rd | 0010111 |
Lógica Aritmética
ADD Especificação: Base RV32I
Add (Soma).
Soma o valor armazenado no registrador rs1 com o valor armazenado no registrador rs2 e armazena o resultado no registrador de destino rd. Em caso de overflow, ele é ignorado.
Formato
add rd, rs1, rs2Implementação
x[rd] = x[rs1] + x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 000 | rd | OP |
ADDI Especificação: Base RV32I
Add Immediate (Soma Imediato).
Soma o valor armazenado no registrador rs1 com o sinal estendido do imediato e armazena o resultado no registrador de destino rd. Em caso de overflow, ele é ignorado.
Formato
addi rd, rs1, immediateImplementação
x[rd] = x[rs1] + sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 000 | rd | OP-IMM |
SUB Especificação: Base RV32I
Subtract (Subtrai).
Subtrai o valor armazenado no registrador rs2 do valor armazenado no registrador rs1 e armazena o resultado no registrador de destino rd. Em caso de overflow, ele é ignorado.
Formato
sub rd, rs1, rs2Implementação
x[rd] = x[rs1] - x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0100000 | rs2 | rs1 | 000 | rd | OP |
MUL Especificação: extensão “M” RISC-V
Multiply (Multiplica).
Multiplica o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2 e armazena o resultado no registrador de destino rd. Em caso de overflow, ele é ignorado.
Formato
mul rd, rs1, rs2Implementação
x[rd] = x[rs1] × x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 000 | rd | OP |
MULH Especificação: extensão “M” RISC-V
Multiply High (Multiplica Superior).
Multiplica o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2 considerando que são números de complemento de dois e armazena a metade superior do produto no registrador de destino rd.
Formato
mulh rd, rs1, rs2Implementação
x[rd] = (x[rs1] × x[rs2]) >> XLENSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 001 | rd | OP |
MULHSU Especificação: extensão “M” RISC-V
Multiply High Signed and Unsigned (Multiplica Superior com Sinal e Sem Sinal).
Multiplica o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que o valor em rs1 é de complemento de dois e que o valor em rs2 é um número sem sinal, armazenando a metade superior do produto no registrador de destino rd.
Formato
mulhsu rd, rs1, rs2Implementação
x[rd] = (x[rs1] * x[rs2]) >> XLENSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 010 | rd | OP |
MULHU Especificação: extensão “M” RISC-V
Multiply High Unsigned (Multiplica Superior Sem Sinal).
Multiplica o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que ambos são números sem sinal, e armazena a metade superior do produto no registrador de destino rd.
Formato
mulhu rd, rs1, rs2Implementação
x[rd] = (x[rs1] × x[rs2]) >> XLENSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 011 | rd | OP |
DIV Especificação: extensão “M” RISC-V
Divide (Divide).
Divide o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que ambos são números de complemento de dois, arredondando para zero, e armazena o quociente no registrador de destino rd.
Formato
div rd, rs1, rs2Implementação
x[rd] = x[rs1] ÷ x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 100 | rd | OP |
DIVU Especificação: extensão “M” RISC-V
Divide Unsigned (Divide Sem Sinal).
Divide o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que são números sem sinal, arredondando para zero, e armazena o quociente no registrador de destino rd.
Formato
div rd, rs1, rs2Implementação
x[rd] = x[rs1] ÷ x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 101 | rd | OP |
REM Especificação: extensão “M” RISC-V
Remainder (Resto).
Divide o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que são números de complemento de dois, arredondando para zero, e armazena o resto no registrador de destino rd.
Formato
rem rd, rs1, rs2Implementação
x[rd] = x[rs1] % x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 110 | rd | OP |
REMU Especificação: extensão “M” RISC-V
Remainder Unsigned (Resto Sem Sinal).
Divide o valor armazenado no registrador rs1 pelo valor armazenado no registrador rs2, considerando que são números sem sinal, arredondando para zero, e armazena o resto no registrador de destino rd.
Formato
rem rd, rs1, rs2Implementação
x[rd] = x[rs1] % x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000001 | rs2 | rs1 | 111 | rd | OP |
Lógicas Booleana
XOR Especificação: Base RV32I
Exclusive OR (OU Exclusivo).
Realiza a operação lógica XOR,bit a_bit_, entre os valores armazenados nos registradores rs1 e rs2 e armazena o resultado no registrador de destino rd.
Formato
xor rd, rs1, rs2Implementação
x[rd] = x[rs1] ˆ x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 100 | rd | OP |
XORI Especificação: Base RV32I
Exclusive OR Immediate (OU Exclusivo Imediato).
Realiza a operação lógica XOR,bit a_bit_, entre o valor armazenado no registrador rs1 e o imediato com sinal estendido e armazena o resultado no registrador de destino rd.
Formato
xori rd, rs1, immediateImplementação
x[rd] = x[rs1] ˆ sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 100 | rd | OP-IMM |
OR Especificação: Base RV32I
OR (OU).
Realiza a operação lógica OR,bit a_bit_, entre os valores armazenados nos registradores rs1 e rs2 e armazena o resultado no registrador de destino rd.
Formato
or rd, rs1, rs2Implementação
x[rd] = x[rs1] | x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 110 | rd | OP |
ORI Especificação: Base RV32I
OR Immediate (OU Imediato).
Realiza a operação lógica OR,bit a_bit_, entre o valor armazenado no registrador rs1 e o imediato com sinal estendido e armazena o resultado no registrador de destino rd.
Formato
ori rd, rs1, immediateImplementação
x[rd] = x[rs1] | sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 110 | rd | OP-IMM |
AND Especificação: Base RV32I
AND (E).
Realiza a operação lógica AND,bit a_bit_, entre os valores armazenados nos registradores rs1 e rs2 e armazena o resultado no registrador de destino rd.
Formato
and rd, rs1, rs2Implementação
x[rd] = x[rs1] & x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 111 | rd | OP |
ANDI Especificação: Base RV32I
AND Immediate (E Imediato).
Realiza a operação lógica OR,bit a_bit_, entre o valor armazenado no registrador rs1 e o imediato com sinal estendido e armazena o resultado no registrador de destino rd.
Formato
andi rd, rs1, immediateImplementação
x[rd] = x[rs1] & sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 111 | rd | OP-IMM |
Operação de Deslocamento
SLL Especificação: Base RV32I
Shift Left Logical (Desloca à Esquerda Lógico).
Desloca o valor armazenado no registrador rs1 à esquerda pelo número de posições indicado pelos 5 bits menos significativos do valor armazenado no registrador rs2. Os bits remanescentes de rs2 são ignorados. Os bits vazios de rs1 são preenchidos com zeros. O resultado é escrito no registrador de destino rd.
Formato
sll rd, rs1, rs2Implementação
x[rd] = x[rs1] << x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 001 | rd | OP |
SLLI Especificação: Base RV32I
Shift Left Logical Immediate (Desloca à Esquerda Lógico Imediato).
Desloca o valor armazenado no registrador rs1 à esquerda pelo número de posições indicado pelo shamt. Os bits vazios de rs1 são preenchidos com zeros. O resultado é escrito no registrador de destino rd. Caso se decida atualizar o processador para uma arquitetura de 64 bits, esta instrução terá sua sintaxe alterada (o shamt e o funct7 passam a ter 6 bits cada).
Formato
slli rd, rs1, shamtImplementação
x[rd] = x[rs1] << shamtSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| I | 0000000 | shamt | rs1 | 001 | rd | OP-IMM |
SRL Especificação: Base RV32I
Shift Right Logical (Desloca à Direita Lógico).
Desloca o valor armazenado no registrador rs1 à direita pelo número de posições indicado pelos 5 bits menos significativos do valor armazenado no registrador rs2. Os bits remanescentes de rs2 são ignorados. Os bits vazios de rs1 são preenchidos com zeros. O resultado é escrito no registrador de destino rd.
Formato
srl rd, rs1, rs2Implementação
x[rd] = x[rs1] >> x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 101 | rd | OP |
SRLI Especificação: Base RV32I
Shift Right Logical Immediate (Desloca à Direita Lógico Imediato).
Desloca o valor armazenado no registrador rs1 à direita pelo número de posições indicado pelo shamt. Os bits vazios de rs1 são preenchidos com zeros. O resultado é escrito no registrador de destino rd. Caso se decida atualizar o processador para uma arquitetura de 64 bits, esta instrução terá sua sintaxe alterada (o shamt e o funct7 passam a ter 6 bits cada).
Formato
srli rd, rs1, shamtImplementação
x[rd] = x[rs1] >>shamtSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| I | 0000000 | shamt | rs1 | 101 | rd | OP-IMM |
SRA Especificação: Base RV32I
Shift Right Arithmetic (Desloca à Direita Aritmético).
Desloca o valor armazenado no registrador rs1 à direita pelo número de posições indicado pelos 5 bits menos significativos do valor armazenado no registrador rs2. Os bits remanescentes de rs2 são ignorados. Os bits vazios de rs1 são preenchidos com cópias do_bit_ mais significativo de rs1. O resultado é escrito no registrador de destino rd.
Formato
sra rd, rs1, rs2Implementação
x[rd] = x[rs1] >> x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0100000 | rs2 | rs1 | 101 | rd | OP |
SRAI Especificação: Base RV32I
Shift Right Arithmetic Immediate (Desloca à Direita Aritmético Imediato).
Desloca o valor armazenado no registrador rs1 à direita pelo número de posições indicado pelo shamt. Os bits vazios de rs1 são preenchidos com cópias do_bit_ mais significativo de rs1. O resultado é escrito no registrador de destino rd. Caso se decida atualizar o processador para uma arquitetura de 64 bits, esta instrução terá sua sintaxe alterada (o shamt e o funct7 passam a ter 6 bits cada).
Formato
srai rd, rs1, shamtImplementação
x[rd] = x[rs1] >> shamtSintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| I | 0100000 | shamt | rs1 | 101 | rd | OP-IMM |
Comparação
SLT Especificação: Base RV32I
Set if Less Than (Defina se Menor que).
Verifica se o valor armazenado no registrador rs1 é menor que o valor armazenado no registrador rs2, considerandoque são complemento de dois, em caso positivo, armazena 1 no registrador de destino rd, caso contrário, armazena 0.
Formato
slt rd, rs1, rs2Implementação
x[rd] = x[rs1] < x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 010 | rd | OP |
SLTI Especificação: Base RV32I
Set if Less Than Immediate (Defina se Menor que Imediato).
Verifica se o valor armazenado no registrador rs1 é menor que o imediato com extensão de sinal, considerando que são complemento de dois, em caso positivo, armazena 1 no registrador de destino rd, caso contrário, armazena 0.
Formato
slti rd, rs1, immediateImplementação
x[rd] = x[rs1] < sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 010 | rd | OP-IMM |
SLTIU Especificação: Base RV32I
Set if Less Than Immediate Unisgned (Defina se Menor que Imediato Sem Sinal).
Verifica se o valor armazenado no registrador rs1 é menor que o imediato com extensão de sinal, considerando que são sem sinal, em caso positivo, armazena 1 no registrador de destino rd, caso contrário, armazena 0.
Formato
slti rd, rs1, immediateImplementação
x[rd] = x[rs1] < sext(immediate)Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | imm[11:0] | rs1 | 011 | rd | OP-IMM |
SLTU Especificação: Base RV32I
Set if Less Than Unsigned (Defina se Menor que Sem Sinal).
Verifica se o valor armazenado no registrador rs1 é menor que o valor armazenado no registrador rs2, considerando que são valores sem sinal, em caso positivo, armazena 1 no registrador de destino rd, caso contrário, armazena 0.
Formato
sltu rd, rs1, rs2Implementação
x[rd] = x[rs1] < x[rs2]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| R | 0000000 | rs2 | rs1 | 011 | rd | OP |
Desvio Incondicional
JAL Especificação: Base RV32I
Jump and Link (Salta e Vìncula).
Escreve o endereço da próxima instrução (PC+4) no registrador de destino rd e modifica o PC para o valor atual somado ao offset com extensão de sinal. Se rd for omitido, o valor de retorno é armazenado em x1.
Formato
jal rd, offsetImplementação
x[rd] = pc+4; pc += sext(offset)Sintaxe
| Tipo | 31 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|
| J | offset[20,10:1,11,19:12] | rd | 1101111 |
JALR Especificação: Base RV32I
Jump and Link Register (Salta e Vìncula Registrador).
Realiza um cópia do PC para rs1 + sext(offset), mascara_bit_ menos significativo do endereço resultante e armazena o endereço anterior de PC+4 no registrador de destino rd. Se rd for omitido, o valor é armazenado em x1.
Formato
jalr rd, offset(rs1)Implementação
t =pc+4; pc=(x[rs1]+sext(offset))&∼1; x[rd]=tSintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 000 | rd | 1100111 |
Desvio Condicional
BEQ Especificação: Base RV32I
Branch if Equal (Desvia se Igual)
Verifica se o valor armazenado no registrador rs1 é igual ao valor armazenado no registrador rs2, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
beq rs1, rs2, offsetImplementação
if (rs1 == rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 000 | offset[4:1,11] | BRANCH |
BNE Especificação: Base RV32I
Branch if Not Equal (Desvia se Não Igual)
Verifica se o valor armazenado no registrador rs1 é diferente do valor armazenado no registrador rs2, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
bnq rs1, rs2, offsetImplementação
if (rs1 != rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 001 | offset[4:1,11] | BRANCH |
BLT Especificação: Base RV32I
Branch if Less Than (Desvia se Menor que)
Verifica se o valor armazenado no registrador rs1 é menor que o valor armazenado no registrador rs2, considerando que são números em complemento de dois, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
blt rs1, rs2, offsetImplementação
if (rs1 < rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 100 | offset[4:1,11] | BRANCH |
BGE Especificação: Base RV32I
Branch if Greater Than or Equal (Desvia se Maior ou Igual que)
Verifica se o valor armazenado no registrador rs1 é maior ou igual ao valor armazenado no registrador rs2, considerando que são números em complemento de dois, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
bge rs1, rs2, offsetImplementação
if (rs1 >= rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 101 | offset[4:1,11] | BRANCH |
BLTU Especificação: Base RV32I
Branch if Less Than Unsigned (Desvia se Menor que Sem Sinal)
Verifica se o valor armazenado no registrador rs1 é menor ao valor armazenado no registrador rs2, considerando que são números sem sinal, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
bltu rs1, rs2, offsetImplementação
if (rs1 < rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 110 | offset[4:1,11] | BRANCH |
BGEU Especificação: Base RV32I
Branch if Greater or Equal Than Unsigned (Desvia se Maior ou Igual que Sem Sinal)
Verifica se o valor armazenado no registrador rs1 é maior ou igual ao valor armazenado no registrador rs2, considerando que são números sem sinal, em caso positivo, modifica o PC para o valor atual somado ao offset com extensão de sinal.
Formato
bgeu rs1, rs2, offsetImplementação
if (rs1 >= rs2) pc += sext(offset)Sintaxe
| Tipo | 31 - 25 | 24 - 20 | 19 - 15 | 14 - 12 | 11 - 7 | 6 - 0 |
|---|---|---|---|---|---|---|
| B | offset[12,10:5] | rs2 | rs1 | 111 | offset[4:1,11] | BRANCH |
Busca na Memória
LB Especificação: Base RV32I
Load Byte (Carrega Byte).
Carrega um byte da memória no endereço rs1 + sext(offset) e armazena o valor no registrador de destino rd, com extensão de sinal.
Formato
lb rd, offset(rs1)Implementação
x[rd] = sext(M[x[rs1] + sext(offset)][7:0])Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 000 | rd | LOAD |
LH Especificação: Base RV32I
Load Halfword (Carrega Halfword).
Carrega dois bytes da memória no endereço rs1 + sext(offset) e armazena o valor no registrador de destino rd, com extensão de sinal.
Formato
lh rd, offset(rs1)Implementação
x[rd] = sext(M[x[rs1] + sext(offset)][15:0])Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 001 | rd | LOAD |
LBU Especificação: Base RV32I
Load Byte Unsigned (Carrega Byte Sem Sinal).
Carrega um byte da memória no endereço rs1 + sext(offset) e armazena o valor no registrador de destino rd, com extensão de zero.
Formato
lbu rd, offset(rs1)Implementação
x[rd] = M[x[rs1] + sext(offset)][7:0]Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 100 | rd | LOAD |
LHU Especificação: Base RV32I
Load Halfword Unsigned (Carrega Halfword Sem Sinal).
Carrega dois bytes da memória no endereço rs1 + sext(offset) e armazena o valor no registrador de destino rd, com extensão de zero.
Formato
lhu rd, offset(rs1)Implementação
x[rd] = M[x[rs1] + sext(offset)][15:0]Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 101 | rd | LOAD |
LW Especificação: Base RV32I
Load Word (Carrega Word).
Carrega quatro bytes da memória no endereço rs1 + sext(offset) e armazena o valor no registrador de destino rd.
Formato
lw rd, offset(rs1)Implementação
x[rd] = sext(M[x[rs1] + sext(offset)][31:0])Sintaxe
| Tipo | 31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|
| I | offset[11:0] | rs1 | 010 | rd | LOAD |
Escrita na Memória
SB Especificação: Base RV32I
Store Byte (Armazena Byte).
Armazena o byte menos significativo do valor armazenado no registrador rs2 na memória no endereço rs1 + sext(offset).
Formato
sb rs2, offset(rs1)Implementação
M[x[rs1] + sext(offset)] = x[rs2][7:0]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| S | offset[11:5] | rs2 | rs1 | 000 | offset[4:0] | STORE |
SH Especificação: Base RV32I
Store Halfword (Armazena Halfword).
Armazena os dois bytes menos significativo do valor armazenado no registrador rs2 na memória no endereço rs1 + sext(offset).
Formato
sh rs2, offset(rs1)Implementação
M[x[rs1] + sext(offset)] = x[rs2][15:0]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| S | offset[11:5] | rs2 | rs1 | 001 | offset[4:0] | STORE |
SW Especificação: Base RV32I
Store Word (Armazena Word).
Armazena os quatro bytes menos significativo do valor armazenado no registrador rs2 na memória no endereço rs1 + sext(offset).
Formato
sw rs2, offset(rs1)Implementação
M[x[rs1] + sext(offset)] = x[rs2][31:0]Sintaxe
| Tipo | 31-25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
|---|---|---|---|---|---|---|
| S | offset[11:5] | rs2 | rs1 | 010 | offset[4:0] | STORE |

