Formatos e Codificação de Instruções
Os formatos de instrução definem como cada instrução de máquina é organizada em binário — o código de operação (opcode), os campos de registrador e os valores imediatos — determinando a compactação do armazenamento dos programas e a facilidade de decodificação pelo hardware.
Definition
Um formato de instrução é o arranjo definido de campos de bits dentro de uma instrução de máquina que codifica sua operação e operandos, e a codificação de instrução é o esquema que mapeia as instruções para esses padrões binários.
Scope
Este tópico abrange a representação binária das instruções: codificações de comprimento fixo versus comprimento variável, os campos que especificam a operação, os registradores de origem e destino, e os valores imediatos, bem como o equilíbrio entre a densidade do código e a simplicidade da decodificação. Inclui famílias de formatos representativas, como os tipos R/I/S/B/U/J do RISC-V. Exclui a escolha dos modos de endereçamento utilizados pelos operandos (modos de endereçamento) e a filosofia mais ampla RISC/CISC (RISC e CISC).
Core questions
- Que campos uma codificação de instrução deve conter para especificar uma operação e seus operandos?
- Como as codificações de comprimento fixo e variável equilibram a simplicidade da decodificação com a densidade do código?
- Como os valores imediatos e as grandes constantes são codificados dentro de um número limitado de bits de instrução?
- Como uma codificação regular simplifica a decodificação de instruções em pipeline?
Key concepts
- campo de opcode
- campos especificadores de registrador
- campos imediatos
- codificação de comprimento fixo vs. comprimento variável
- densidade de código
- regularidade de decodificação
- famílias de formatos de instrução (R/I/S/B/U/J)
Mechanisms
Cada instrução é dividida em campos de bits: um opcode seleciona a operação, os campos de registrador nomeiam os operandos e os campos imediatos contêm constantes ou deslocamentos de endereço. Formatos de comprimento fixo (como no RISC-V) mantêm todas as instruções com a mesma largura e posicionam os campos de forma consistente para que a decodificação seja simples e rápida; formatos de comprimento variável (como no x86) compactam as instruções para densidade, à custa de uma decodificação mais complexa.
Clinical relevance
As escolhas de codificação repercutem em todo o processador: formatos regulares de comprimento fixo permitem decodificadores simples e rápidos que tornam o pipelining profundo prático, enquanto formatos densos de comprimento variável reduzem o tráfego da memória de instruções. Compiladores e montadores devem visar esses formatos com precisão, e as extensões do conjunto de instruções devem se encaixar no espaço de codificação existente.
History
Os primeiros conjuntos de instruções usavam codificações irregulares e ajustadas manualmente para economizar memória escassa. O movimento RISC da década de 1980 favoreceu formatos uniformes de comprimento fixo para otimizar a decodificação e o pipelining, enquanto conjuntos CISC como o x86 mantiveram codificações densas de comprimento variável. ISAs abertas modernas, como o RISC-V, codificam famílias de formatos limpas e extensíveis.
Key figures
- David A. Patterson
- John L. Hennessy
Related topics
Seminal works
- patterson2020
- hennessy2019
Frequently asked questions
- Por que os conjuntos de instruções RISC usam codificações de comprimento fixo?
- Instruções de comprimento fixo permitem que o processador localize a próxima instrução e extraia seus campos sem primeiro decodificar o comprimento, o que simplifica e acelera os estágios de busca e decodificação e torna o pipelining profundo muito mais fácil do que com codificações de comprimento variável.
- Como as grandes constantes são tratadas se as instruções têm apenas um número fixo de bits de largura?
- Os campos imediatos são limitados, então as grandes constantes são construídas em partes — por exemplo, uma instrução de carregamento de imediato superior define os bits mais significativos e uma instrução subsequente adiciona os bits menos significativos — ou a constante é colocada na memória e carregada.