Assembly RISC-V
RV32, endereços, formatos de instrução, saltos e chamadas com a pilha.
Registos RV32
| Registos | Convenção |
|---|---|
x0 | Sempre zero |
x1/x2 | ra retorno; sp pilha, repor ao sair |
t0–t6 | Temporários, o chamado não preserva |
a0–a7 | Argumentos; a0/a1 trazem o retorno |
s0–s11 | O chamado repõe os que alterar |
Banco f separado para vírgula flutuante. Alinhamento de pilha de 16 bytes.
Memória e imediatos
- Endereços em bytes:
lw rd,12(rs1)lê emrs1+12. Palavra de 4 B;vetor[i]embase+4i. lb/lhestendem sinal;lbu/lhupreenchem zeros. Little endian guarda o byte baixo primeiro.addiusa imediato de 12 bits com sinal. Soma mantém 32 bits baixos, sem exceção.slt/blt/bgecom sinal;sltu/bltu/bgeusem sinal.sraiarredonda negativos para baixo,divpara zero.
Vírgula flutuante
.ssimples 32 bits,.ddupla 64 bits.flwcopia,fcvtconverte.- Precisão dupla sobre dados simples:
flw,fcvt.d.spor elemento,fadd.d, avanço de 4 B. Contagem comfcvt.d.w, retorno comfcvt.s.d. fmvcopia bits; não converte.
Codificar e saltar
| Formato | Campos |
|---|---|
| R | funct7 rs2 rs1 funct3 rd opcode |
| I | imm12 rs1 funct3 rd opcode |
| S | imm[11:5] rs2 rs1 funct3 imm[4:0] |
| B/J | Imediato reordenado, bit zero implícito |
- Deslocamento B/J em bytes, somado ao PC da própria instrução.
jal/jalrguardamPC+4;jalrsalta para(base+imm)&~1. Conta pseudoinstruções depois de expandidas.lui+addibaixo negativo exige compensar a parte alta.
Pilha e recursão
Pico soma os tamanhos dos frames ativos; com tamanhos iguais, ativos × tamanho. Inclui o caso base quando reserva antes do teste.