Qual é a diferença entre o formato de instrução RISC e o 8086?
A filosofia/goal por detrás do design do RISC (Reduced Instruction Set Computer) é tornar todas as instruções do mesmo comprimento e poder executar no mesmo espaço de tempo. Desta forma, o pipeline de instruções fluiria a uma taxa (mais) uniforme, permitindo certas otimizações em hardware e/ou microcódigo (etapas de processamento sobrepostas, processadores, etc.)
A família x8086 tem instruções que têm comprimentos a partir de 1 byte, tornando mais difícil e lento decodificar a instrução (em média): você tem que ler o primeiro byte para determinar quantos bytes de adição precisam ser carregados antes de decodificar.
(Estou simplificando muito. Isto é coisa complexa!)
RISC também significa ter registros que eram do mesmo tipo (tipicamente registros inteiros e registros de endereço) e ao invés de ter muitos registros de propósito especial. Com o x86, não há dois registros iguais.
RISC é semelhante a uma linha de montagem de fábrica que está construindo carros muito similares que têm a mesma duração e complexidade de tempo para construir. A linha move-se (mais) suavemente. Passos que podem ser iniciados antes que o passo anterior esteja terminado, são iniciados.
8086 é semelhante a uma linha de montagem de fábrica que tem uma mistura de limusines da Iugoslávia e limusines esticadas, cujo comprimento e complexidade é muito variável. Isto significa que a linha de montagem tem que parar muito o tempo enquanto espera por uma instrução lenta. Você precisa de muita mecânica especializada. Algumas instruções curtas (1 byte) x86 demoram menos tempo a executar do que a instrução RISC correspondente, mas muitas (as mais longas) demoram mais.
Como uma troca, algumas vezes várias instruções RISC têm de ser executadas em vez de uma única instrução x86 correspondente, mas mais longa. Assim, uma máquina do tipo x86 pode ter uma instrução de deslocamento de memória para a memória. Um RISC teria duas instruções: carregar da memória para um registro, depois armazenar do registro para a memória.
Um grande exemplo de como um chip RISC pode funcionar melhor, é o exemplo de uma instrução de ramo incondicional:
<- Todas as próximas instruções do buffer prefetch são jogadas fora (já que não são mais necessárias)
- li>Ao mesmo tempo, o endereço do branch destination será carregado
- A instrução do endereço de destino será carregada
- Essa nova instrução substituirá a instrução do branch no pipeline de instruções
- Quando o processador RISC começar a decodificar a instrução do branch, ele agora está realmente decodificando a instrução no destination!!
Isso significa que em um chip RISC, uma instrução de branch incondicional é executada em ciclos zero!
O efeito geral disso, é que a família x8086 de chips tende a ser maior, mais quente e consome mais energia do que o chip RISC correspondente da mesma capacidade.
Você não encontrará um chip x86 em dispositivos de menor potência como telefones celulares: o chip x86 é muito grande, funciona muito quente e drenará a bateria mais rapidamente.
Como um benefício lateral, é fácil começar a desmontar o código da máquina RISC em algum endereço alinhado a palavras e ver o código real. Com x86, se você não começar a desmontar no endereço do byte certo, você verá um monte de instruções sem sentido.
Artigos semelhantes
- Qual é a diferença entre uma instrução LDM e uma instrução VLDM na arquitetura do conjunto de instruções ARM?
- Qual é a diferença entre uma instrução e uma diretiva em linguagem de montagem?
- Qual é a diferença entre a arquitetura ARM e o RISC regular?
- What is the difference between 8086 and ARM processors in tabular form?