Qualquer CPU é projetada desde o início para suportar um conjunto de instruções específico. Um conjunto de instruções é um conjunto de operações codificadas que a CPU pode executar. Essas operações podem ser, por exemplo, somar dois números, pular para uma parte diferente do programa ou comparar dois valores. Cada operação que um computador pode realizar é representada exclusivamente por um opcode.
Códigos de operação
Ao executar um programa, a CPU usa um contador de programa para rastrear qual instrução precisa ser executada em seguida. Quando uma instrução é buscada, o contador de programa é incrementado pelo comprimento da instrução para que aponte para o início da próxima instrução. Cada instrução consiste em um opcode. Dependendo da instrução, pode ou não incluir operandos. Os operandos podem ser um valor constante ou um ponteiro para a localização de um valor no registrador da CPU ou na RAM do sistema.
Uma vez que a instrução completa foi buscada, ela precisa ser decodificada. Este é o processo onde a CPU separa o opcode e quaisquer operandos. O opcode decodificado é usado para habilitar ou desabilitar caminhos elétricos específicos na CPU que resultarão na operação correta.
Uma vez que a instrução tenha sido decodificada, ela será executada. O comportamento exato da CPU dependerá da operação. Uma operação de adição somará dois valores juntos. Uma operação de salto calculará para onde no programa saltar. Uma operação de comparação comparará dois valores. Uma operação NOP ficará ociosa, pois NOP significa Sem Operação.
A maioria das instruções produzirá o resultado da operação. Esta saída pode ir para os registradores do processador e, se necessário, para a RAM do sistema. Cada uma dessas operações leva um único ciclo de clock para ser concluída.
Códigos de operação ilegais
Cada arquitetura de CPU tem sua lista específica de opcodes publicada pelo fabricante. Os valores desses opcodes não são necessariamente a mesma plataforma cruzada, e é por isso que o software precisa ser compilado para diferentes arquiteturas. Em alguns casos, o fabricante também inclui opcodes não documentados. Estes são referidos como “opcodes ilegais”. Opcodes ilegais, embora não documentados, executarão a mesma função toda vez que forem chamados. Como recursos não documentados e fora do padrão, porém, as atualizações na arquitetura da CPU podem simplesmente removê-los.
Alguns dos primeiros jogos de computador no Apple II dependiam de opcodes ilegais específicos. Eles então sofreram problemas de desempenho e estabilidade na revisão posterior da CPU do Apple IIc, pois o IIc removeu os opcodes ilegais que os jogos exigiam. Opcodes ilegais também foram usados em círculos de proteção de direitos autorais como um método de segurança através da obscuridade em sua luta contra piratas que quebram seu conteúdo. Alguns opcodes ilegais são simplesmente ferramentas de depuração e manipuladores de erros.
O conjunto de instruções x86 contém um grande número de opcodes ilegais não documentados. Curiosamente, alguns deles são compartilhados entre CPUs Intel e AMD, indicando que ambas as empresas estão publicamente cientes de seu propósito enquanto não documentadas.
Compiladores e Montagem
A maioria dos programas são escritos em linguagens de alto nível. Estes são relativamente fáceis de ler, geralmente usando palavras em inglês ou taquigrafia para minimizar as curvas de aprendizado. Para que um computador execute esses programas, eles precisam ser compilados. Um compilador é basicamente um tradutor. Ele pega o código de alto nível e o converte em código de computador, as instruções que a CPU pode entender.
Também é possível, em algumas linguagens, executar código não compilado por meio de um programa previamente compilado que gera código de máquina em tempo real. Assembly é uma linguagem de programação de baixo nível que usa atalhos para permitir aos desenvolvedores visibilidade e controle diretos sobre as operações realizadas. NOP é um exemplo de abreviação de montagem.
Conclusão
Um conjunto de instruções é uma lista de funções oficiais que uma arquitetura de CPU pode executar. É uma lista de operações que podem ser executadas. Essas operações são codificadas na CPU e chamadas usando seus respectivos opcodes.
O software geralmente usa um compilador para traduzir de código de alto nível legível por humanos para o código de máquina que a CPU pode ler. Às vezes, uma arquitetura de CPU pode ter opcodes não documentados, chamados opcodes ilegais. Opcodes ilegais são tecnicamente parte do conjunto de instruções. No entanto, eles podem não estar disponíveis de forma confiável em futuras iterações da plataforma. Não se esqueça de deixar sua opinião nos comentários abaixo.