RISC-V: instruções e codificação
Operações RV32, formatos R I S B U J, imediatos e pseudo-instruções.
Operações
add rd,rs1,rs2: recebe a soma das fontes antigas. 32 bits inferiores, sem exceção de overflow.
- Imediatos de 12 bits com sinal (−2048…2047):
addi,andi,ori,xori.xori t0,t0,-1inverte tudo. - Deslocamentos:
sllzeros à esquerda;srlzeros à direita;srarepete o sinal. Quantidade: 5 bits inferiores por registo, 0…31 imediata. sltcom sinal,sltusem. Extensão M:mulmetade baixa;mulh/mulhu/mulhsumetade alta;divtrunca para zero. Divisão por zero: quociente todo a 1, resto o dividendo.
Memória e saltos
lw rd,d(rs1)lê;sw rs2,d(rs1)escreve. Deslocamento em bytes, 12 bits com sinal.lb/lhestendem sinal;lbu/lhuzeros.- Falso segue PC+4; verdadeiro segue PC da instrução+d. B: −4096…4094, bit 0 implícito.
jalguarda PC+4 e salta PC+d.jalrguarda PC+4 e salta para com bit 0 limpo, usando rs1 antigo.
Formatos
Sem instruções comprimidas, alinhadas a 4 bytes. op 7 bits, registos 5, f3 3, f7 7.
| Formato | Campos do bit 31 ao 0 |
|---|---|
| R | f7, rs2, rs1, f3, rd, op |
| I | imm[11:0], rs1, f3, rd, op |
| S | imm[11:5], rs2, rs1, f3, imm[4:0], op |
| B | imm[12], imm[10:5], rs2, rs1, f3, imm[4:1], imm[11], op |
| U | imm[31:12], rd, op |
| J | imm[20], imm[10:1], imm[11], imm[19:12], rd, op |
Os índices são bits do deslocamento reconstruído. B junta imm[12],imm[11],imm[10:5],imm[4:1],0 e estende; já sai em bytes. lui+addi com metade baixa negativa: 0x12345ABC usa lui t0,0x12346 e addi t0,t0,-1348.
Pseudo-instruções
mv é addi com 0; j é jal para zero; ret é jalr zero,0(ra). li, la, call podem emitir várias instruções: conta instruções máquina.