FAEX • Arquitetura de Computadores • Semana 07
ISA RV32I: da instrução em Assembly aos 32 bits
Na Semana 06 acompanhamos por onde uma instrução passa. Nesta semana vamos compreender como a própria palavra de instrução informa ao processador o que fazer.
Pergunta PBL: qual conjunto mínimo de instruções é suficiente para expressar a carga de controle e manter uma decodificação regular?
1. ISA, 32/64 bits e RISC/CISC
Referências: Harris & Harris, cap. 6; Stallings, caps. 13, 14 e 17; Nisan & Schocken, cap. 4; RISC-V Unprivileged ISA Specification, RV32I e RV64I.
O que é uma ISA?
A ISA (Instruction Set Architecture) é o contrato visível entre software e hardware. Ela define quais instruções existem, como são representadas e qual efeito arquitetural cada instrução deve produzir.
| A ISA define | Exemplo |
|---|---|
| instruções disponíveis | ADD, LW, SW, BEQ |
| registradores visíveis | x0 a x31 |
| formatos e campos | opcode, rd, rs1, rs2, imediato |
| efeito arquitetural | rd ← rs1 + rs2 |
Regra prática: a ISA diz o que deve acontecer; a microarquitetura define como o processador realiza isso internamente.
Do Assembly para a máquina
O que significa 32 ou 64 bits?
XLEN / registradores inteiros
Em RV32I, XLEN = 32: os registradores inteiros possuem 32 bits. Em RV64I, XLEN = 64: os registradores inteiros possuem 64 bits.
Espaço de endereços
RV32I trabalha com endereços inteiros de 32 bits no modelo base; RV64I amplia o espaço de endereçamento suportado para 64 bits.
Tamanho da instrução
64 bits no registrador não significa instrução de 64 bits. As instruções-base de RV32I têm 32 bits, e RV64I mantém os formatos-base de 32 bits. Extensões podem acrescentar outros comprimentos.
| Característica | RV32I | RV64I |
|---|---|---|
| XLEN | 32 bits | 64 bits |
| Registradores x0–x31 | 32 bits cada | 64 bits cada |
| Operações inteiras principais | sobre 32 bits | sobre 64 bits |
| Formato-base das instruções | 32 bits | continua baseado nas codificações de 32 bits |
RISC e CISC: diferentes decisões de projeto
RISC e CISC descrevem características do conjunto de instruções. A comparação ajuda a entender por que o RISC-V privilegia regularidade de formatos e operações simples.
| Aspecto | RISC — exemplo: RISC-V | CISC — exemplo: x86-64 |
|---|---|---|
| Formatos | tendem a ser mais regulares | podem ser mais variados |
| Comprimento das instruções | o conjunto-base RISC-V usa codificações de 32 bits; extensões podem adicionar outros comprimentos | comprimento variável |
| Acesso à memória | arquitetura load/store: operações aritméticas usam registradores; load/store acessam memória | muitas instruções podem combinar operação e acesso à memória |
| Modos de endereçamento | tendem a ser mais simples | podem ser mais numerosos e complexos |
| Decodificação | regularidade ajuda a localizar campos | pode exigir análise de instruções de formatos e tamanhos diferentes |
Resumo da etapa: 32/64 bits descrevem principalmente a largura arquitetural dos dados inteiros; não devem ser confundidos automaticamente com o tamanho de cada instrução. RISC e CISC representam decisões diferentes de desenho de ISA.
Nesta semana, o foco é compreender e especificar a codificação do subconjunto MiniRV. O montador completo será desenvolvido na Semana 08.
2. Como uma instrução cabe em 32 bits?
Referências: Harris & Harris, cap. 6; RISC-V Unprivileged ISA Specification, seção “Base Instruction Formats”.
Primeiro: 32 posições precisam ser divididas em campos
No formato R, os 32 bits são divididos em seis campos. A soma das larguras é exatamente 32:
Regra prática: os campos não são escolhidos durante a execução. A ISA já define previamente quais posições pertencem a cada campo.
O que cada campo responde?
| Campo | Pergunta simples |
|---|---|
| opcode | Que grupo geral de instrução é este? |
| rd | Onde o resultado será escrito? |
| rs1 | De onde vem o primeiro valor? |
| rs2 | De onde vem o segundo valor? |
| funct3 / funct7 | Qual operação específica dentro do grupo? |
Por que rd, rs1 e rs2 têm 5 bits?
O RV32I possui 32 registradores inteiros, x0 até x31. Para identificar 32 possibilidades, são necessários 5 bits:
Por que existem formatos diferentes?
Nem toda instrução precisa das mesmas informações. Uma soma precisa de duas fontes e um destino; um STORE precisa do dado a gravar e de um endereço; um BRANCH precisa comparar dois valores e saber para onde desviar. Por isso os mesmos 32 bits são organizados de maneiras diferentes.
Formato R
Compare os formatos
Resumo da etapa: o opcode fica sempre nos bits 6–0; campos de registradores permanecem em posições previsíveis quando são necessários. A regularidade facilita a decodificação.
3. Leia a instrução antes de codificar
Referências: Harris & Harris, cap. 6; RISC-V Unprivileged ISA Specification, instruções OP do RV32I.
Comece pela sintaxe
rd é o destino; rs1 fornece o primeiro valor; rs2 fornece o segundo valor.
Regra prática: primeiro interprete os papéis dos operandos. Só depois converta cada informação para bits.
Faça a identificação comigo
O que já identificamos?
Identificando a operação
Depois de saber quem participa da instrução, o processador precisa saber qual operação executar.
Leitura: ADD e SUB compartilham opcode e funct3; o funct7 é o campo que permite distingui-las neste caso.
Montagem final dos 32 bits
| Campo | Valor | Como chegamos nele |
|---|
Conclua as etapas acima para montar a palavra.
4. Decodifique passo a passo
Referências: Harris & Harris, cap. 6; RISC-V Unprivileged ISA Specification, formatos-base.
Escolha uma palavra real do subconjunto
Método: 1) leia opcode; 2) determine formato; 3) extraia registradores/imediato; 4) use funct3/funct7 quando necessário; 5) escreva a instrução.
Instrução reconstruída: —
| Passo | O que foi encontrado | Por que importa |
|---|---|---|
| A análise ainda não começou. | ||
Resumo: a decodificação começa pelo opcode porque ele indica como interpretar os demais bits.
5. Imediatos e modos de endereçamento
Referências: Harris & Harris, cap. 6; Stallings, cap. 14; RISC-V Unprivileged ISA Specification.
Analise um exemplo
Depois da interpretação
| Formato | Papel do imediato | Exemplo |
|---|---|---|
| I | constante ou deslocamento base + offset | ADDI, LW, JALR |
| S | deslocamento base + offset para STORE | SW |
| B | deslocamento PC-relativo para branch | BEQ, BNE, BLT |
| U | bits superiores de um valor | LUI |
| J | deslocamento PC-relativo para salto | JAL |
Resumo da etapa: “imediato” não significa sempre a mesma coisa. O formato e a instrução determinam como o valor deve ser interpretado.
6. Contrato do subconjunto MiniRV
Referências: Guia do Projeto Integrador — Semana 07; RISC-V Unprivileged ISA Specification.
O objetivo do MiniRV é possuir instruções suficientes para expressar a carga canônica de controle e, ao mesmo tempo, manter uma implementação pequena, verificável e coerente com o cronograma.
Consulte uma instrução obrigatória
Relacione necessidade e classe de instrução
Selecione uma necessidade da carga de controle:
Tabela do contrato obrigatório
| Classe | Instruções | Formato | Função no projeto |
|---|---|---|---|
| Aritmética/lógica | ADD, SUB, AND, OR, XOR, SLT, SLL, SRL | R | calcular e comparar valores |
| Imediatas/carga/salto indireto | ADDI, ANDI, ORI, LW, JALR | I | constantes, leitura e redirecionamento indireto |
| Armazenamento | SW | S | escrever dados na memória/E/S mapeada |
| Desvios e salto | BEQ, BNE, BLT, JAL | B/J | decisões e repetição do laço |
| Imediato superior | LUI | U | formar valores/endereço-base maiores |
Resumo da etapa: o subconjunto é uma decisão de projeto. Ele deve cobrir as necessidades funcionais sem ampliar a complexidade além do necessário.
7. Vetores encode/decode: transformar a especificação em evidência
Referências: Guia do Projeto Integrador — critérios de aceite da Semana 07; contrato RV32I definido pela dupla.
Exemplo de ida e volta
Regra de teste: para uma instrução válida, decode(encode(instrução)) deve preservar o mnemônico e os campos relevantes.
Evidências para o repositório
- docs/isa/rv32i-subset-v1.md com a tabela completa de codificação;
- vetores encode/decode de todas as instruções obrigatórias;
- programa Assembly preliminar da carga canônica;
- PR revisada e tag s07.
Resultado dos vetores
| Instr. | Assembly | Palavra | Decode | Resultado |
|---|---|---|---|---|
| Execute o teste acima. | ||||
Resumo da etapa: a especificação só se torna verificável quando exemplos válidos e inválidos são transformados em testes reproduzíveis.