Pular para o conteúdo

Pseudo Instruções

Pseudo-instruções são atalhos sintáticos que facilitam a escrita e leitura de programas em Assembly. Elas não fazem parte do hardware do RISC-V.

Durante o processo de montagem, cada pseudo-instrução é expandida automaticamente para uma ou mais instruções reais do conjunto RV32I.

No simulador ÆRIS, essa expansão ocorre durante a fase de análise do código, através do componente PseudoExpander. Após a expansão, apenas instruções reais permanecem no programa antes da geração do código de máquina.


No Text Segment, as linhas que se originaram de uma pseudo-instrução são exibidas na cor laranja.

Ao passar o mouse sobre uma dessas linhas, um tooltip indica que a instrução se trata de uma pseudo-instrução.

Pseudo-instrução destacada no text segment

PseudoDescrição
mv rd, rsCopia o valor de um registrador para outro
nopNão executa nenhuma operação
not rd, rsInverte todos os bits de um registrador

PseudoDescrição
li rd, immCarrega um valor imediato no registrador

PseudoDescrição
la rd, labelCarrega o endereço de um label

PseudoDescrição
j labelSalto incondicional
jal labelSalta e salva endereço de retorno em ra
jalr rsSalta para endereço em registrador
jalr rs, immSalta para endereço rs + imm
jalr rd, imm(rs)Salta para rs + imm salvando retorno em rd
jr rsSalta para endereço armazenado em rs
jr rs, immSalta para endereço rs + imm

PseudoDescrição
beqz rs, labelDesvia se rs == 0
bnez rs, labelDesvia se rs != 0
bgez rs, labelDesvia se rs >= 0
bltz rs, labelDesvia se rs < 0
bgtz rs, labelDesvia se rs > 0
blez rs, labelDesvia se rs <= 0
bgt rs1, rs2, labelDesvia se rs1 > rs2
bgtu rs1, rs2, labelDesvia (unsigned)
ble rs1, rs2, labelDesvia se rs1 <= rs2
bleu rs1, rs2, labelDesvia (unsigned)

PseudoDescrição
lb rd, (rs)Carrega byte da memória
lb rd, immCarrega byte usando offset
lb rd, largeImmCarrega byte com imediato grande
lb rd, labelCarrega byte a partir de um label
lbu rd, (rs)Carrega byte sem sinal
lbu rd, immCarrega byte sem sinal com offset
lbu rd, largeImmCarrega byte sem sinal com offset grande
lbu rd, labelCarrega byte sem sinal de label
lh rd, (rs)Carrega halfword
lh rd, immCarrega halfword com offset
lh rd, largeImmCarrega halfword com offset grande
lh rd, labelCarrega halfword de label
lhu rd, (rs)Carrega halfword sem sinal
lhu rd, immCarrega halfword sem sinal com offset
lhu rd, largeImmCarrega halfword sem sinal com offset grande
lhu rd, labelCarrega halfword sem sinal de label
lw rd, (rs)Carrega word da memória
lw rd, immCarrega word com offset
lw rd, largeImmCarrega word com offset grande
lw rd, labelCarrega word de label

PseudoDescrição
sb rs, (rd)Armazena byte na memória
sb rs, immArmazena byte com offset
sb rs, label, rtArmazena byte em label
sh rs, (rd)Armazena halfword
sh rs, immArmazena halfword com offset
sh rs, label, rtArmazena halfword em label
sw rs, (rd)Armazena word
sw rs, immArmazena word com offset
sw rs, label, rtArmazena word em label

PseudoDescrição
seqz rd, rsrd = 1 se rs == 0
snez rd, rsrd = 1 se rs != 0
sltz rd, rsrd = 1 se rs < 0
sgtz rd, rsrd = 1 se rs > 0
sgt rd, rs1, rs2rd = 1 se rs1 > rs2
sgtu rd, rs1, rs2rd = 1 se rs1 > rs2 (unsigned)