Visão geral da arquitetura RISC-V
1. Ideias centrais
RV32I é a ISA base inteira de 32 bits. Ela usa 32 registradores de propósito geral (x0..x31) e um modelo load/store. Apenas loads e stores tocam a memória; a aritmética fica nos registradores.
2. Registradores em um relance
1
2
3
4
5
6
7
8
9
10
| x0 = zero (sempre 0)
x1 = ra (return address)
x2 = sp (stack pointer)
x3 = gp (global pointer)
x4 = tp (thread pointer)
x5..x7 = temporários (t0..t2)
x8..x9 = salvos (s0/fp, s1)
x10..x17 = args/return (a0..a7)
x18..x27 = salvos (s2..s11)
x28..x31 = temporários (t3..t6)
|
flowchart LR
I["Immediate"] -->|addi/lw/jalr| I1["imm[11:0] rs1 funct3 rd opcode"]
R["Register"] -->|add/sub| R1["funct7 rs2 rs1 funct3 rd opcode"]
S["Store"] -->|sw/sb| S1["imm[11:5] rs2 rs1 funct3 imm[4:0] opcode"]
B["Branch"] -->|beq/bne| B1["imm rs2 rs1 funct3 imm opcode"]
4. Recursos adicionais
5. Mapa de memória no QEMU virt
1
2
| 0x8000_0000 RAM (colocamos código + dados aqui)
0x1000_0000 UART0 (MMIO)
|
6. Exercícios
- Identifique quais registradores são caller-saved vs callee-saved.
- Procure um formato de instrução na spec do RISC-V Card e mapeie cada campo pelo nome.
7. Resumo
- O RV32I fornece uma ISA base pequena e limpa.
- O banco de registradores é fixo e as convenções dão papéis aos registradores.
- O QEMU
virt expõe um mapa simples de RAM + UART.