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, imm
Implementação
x[rd] = imm[31:12] << 12
Sintaxe
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, imm
Implementaçã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, rs2
Implementaçã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, immediate
Implementaçã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, rs2
Implementaçã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, rs2
Implementaçã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, rs2
Implementação
x[rd] = (x[rs1] × x[rs2]) >> XLEN
Sintaxe
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, rs2
Implementação
x[rd] = (x[rs1] * x[rs2]) >> XLEN
Sintaxe
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, rs2
Implementação
x[rd] = (x[rs1] × x[rs2]) >> XLEN
Sintaxe
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, rs2
Implementaçã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, rs2
Implementaçã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, rs2
Implementaçã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, rs2
Implementaçã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, rs2
Implementaçã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, immediate
Implementaçã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, rs2
Implementaçã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, immediate
Implementaçã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, rs2
Implementaçã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, immediate
Implementaçã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, rs2
Implementaçã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, shamt
Implementação
x[rd] = x[rs1] << shamt
Sintaxe
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, rs2
Implementaçã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, shamt
Implementação
x[rd] = x[rs1] >>shamt
Sintaxe
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, rs2
Implementaçã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, shamt
Implementação
x[rd] = x[rs1] >> shamt
Sintaxe
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, rs2
Implementaçã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, immediate
Implementaçã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, immediate
Implementaçã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, rs2
Implementaçã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, offset
Implementaçã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]=t
Sintaxe
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, offset
Implementaçã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, offset
Implementaçã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, offset
Implementaçã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, offset
Implementaçã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, offset
Implementaçã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, offset
Implementaçã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 |