Pular para o conteúdo

Referência de Instruções

O ÆRIS implementa o conjunto RV32I base inteiro

Esta página descreve as instruções reais suportadas pelo simulador, organizadas por formato de instrução

Todas as instruções operam sobre:

  • registradores de 32 bits
  • memória endereçável por byte

As instruções do tipo R realizam operações entre registradores.

InstruçãoDescrição
add rd, rs1, rs2Soma dois registradores e armazena o resultado em rd.
sub rd, rs1, rs2Subtrai rs2 de rs1.
and rd, rs1, rs2AND bit a bit entre registradores.
or rd, rs1, rs2OR bit a bit entre registradores.
xor rd, rs1, rs2XOR bit a bit entre registradores.
slt rd, rs1, rs2Define rd = 1 se rs1 < rs2 (com sinal).
sltu rd, rs1, rs2Define rd = 1 se rs1 < rs2 (sem sinal).
sll rd, rs1, rs2Shift lógico à esquerda.
srl rd, rs1, rs2Shift lógico à direita.
sra rd, rs1, rs2Shift aritmético à direita.

Instruções do tipo I utilizam imediatos ou acessam memória.

InstruçãoDescrição
addi rd, rs1, immSoma imediato de 12 bits ao registrador.
andi rd, rs1, immAND bit a bit com imediato.
ori rd, rs1, immOR bit a bit com imediato.
xori rd, rs1, immXOR bit a bit com imediato.
slti rd, rs1, immDefine rd = 1 se rs1 < imm (com sinal).
sltiu rd, rs1, immDefine rd = 1 se rs1 < imm (sem sinal).
InstruçãoDescrição
slli rd, rs1, shamtShift lógico à esquerda com imediato.
srli rd, rs1, shamtShift lógico à direita com imediato.
srai rd, rs1, shamtShift aritmético à direita com imediato.
InstruçãoDescrição
lw rd, offset(rs1)Carrega palavra de 32 bits da memória.
lh rd, offset(rs1)Carrega halfword (16 bits) com sinal.
lhu rd, offset(rs1)Carrega halfword sem sinal.
lb rd, offset(rs1)Carrega byte com sinal.
lbu rd, offset(rs1)Carrega byte sem sinal.

Instruções do tipo S armazenam valores na memória.

InstruçãoDescrição
sw rs2, offset(rs1)Armazena palavra de 32 bits na memória.
sh rs2, offset(rs1)Armazena halfword (16 bits).
sb rs2, offset(rs1)Armazena byte (8 bits).

Instruções do tipo B realizam desvios condicionais.

InstruçãoDescrição
beq rs1, rs2, labelDesvia se os registradores são iguais.
bne rs1, rs2, labelDesvia se os registradores são diferentes.
blt rs1, rs2, labelDesvia se rs1 < rs2 (com sinal).
bge rs1, rs2, labelDesvia se rs1 >= rs2 (com sinal).
bltu rs1, rs2, labelDesvia se rs1 < rs2 (sem sinal).
bgeu rs1, rs2, labelDesvia se rs1 >= rs2 (sem sinal).

Carregam imediatos grandes.

InstruçãoDescrição
lui rd, immCarrega imediato de 20 bits nos bits superiores do registrador.
auipc rd, immSoma imediato de 20 bits ao valor atual do PC.

Realizam saltos incondicionais.

InstruçãoDescrição
jal rd, labelSalta para o endereço especificado e salva o endereço de retorno em rd.
InstruçãoDescrição
jalr rd, rs1, immSalta para o endereço rs1 + imm e salva o endereço de retorno em rd.
InstruçãoDescrição
ecallExecuta uma chamada de sistema.