Como uma CPU 'sabe' quais comandos e instruções realmente significam?

71

Como um processador "sabe" o que significam os diferentes comandos?

Estou pensando em comandos de nível de montagem como MOV, PUSH, CALL, etc ...

    
por Simon Verbeke 06.07.2011 / 16:44

6 respostas

88

Quando um computador interpreta instruções de nível de assembly , essas instruções são transformadas em equivalentes binários para a CPU ler. Quando a CPU executa as instruções, ela interpreta a parte opcode da instrução em "microprogramas" individuais, contendo seus equivalentes microcódigo . Apenas para você saber, uma instrução de montagem completa consiste em um opcode e qualquer dado aplicável que a acompanhe, se necessário (por exemplo, nomes de registros, endereços de memória).

As instruções de microcódigo são de nível extremamente baixo (mais ainda na montagem) e controlam os sinais digitais reais que controlam o fluxo da lógica no microprocessador. Por exemplo, uma instrução de microcódigo poderia atualizar um sinalizador de registro de código de condição com um novo valor ou conectar uma CPU registrar com uma das ALU unidades. Tarefas mais complexas são possíveis, mas isso mostra a idéia geral do qual microcódigo é usado.

O fluxo geral da compilação para a execução é o seguinte. As instruções de montagem são montadas (transformadas em seus equivalentes binários 0s e 1s, ou a partir de agora, sinais lógicos). Esses sinais lógicos são, por sua vez, interpretados pela CPU e transformados em sinais lógicos mais baixos, que direcionam o fluxo da CPU para executar a instrução específica. Isso pode levar um ou mais ciclos de clock, dependendo da arquitetura e do design do processador (a maioria dos manuais de referência de processador informa quantos ciclos de clock são necessários para executar uma instrução específica, como este, por exemplo ).

Tudo isso é feito com microcódigo programado (fisicamente incorporado ao processador em algum tipo de ROM , definido durante a fabricação), que direciona o fluxo através de portas lógicas de baixo nível reais. Isso fornece uma interface entre as instruções de montagem abstratas e a lógica elétrica física no processador.

Assim, em resumo, as instruções do processador são montadas e carregadas pelo processador. O processador então usará essas instruções para procurar o microprograma (na forma de microcódigo) correspondente àquela instrução em particular, que é o que "realmente" executa a instrução. Uma vez que os microcódigos para a instrução em particular tenham sido executados (o que pode levar um ou mais ciclos de clock), o processador executa o microcódigo para buscar a próxima instrução, e o ciclo se repete.

    
por 06.07.2011 / 16:48
37

O processador realmente não 'sabe' quais são os comandos. Os comandos são apenas padrões binários que fazem com que o processador faça o que interpretamos nos comandos.

Por exemplo, uma operação ADD-R1-em-R2 fará com que os valores dos registradores 1 e 2 atinjam a ULA (unidade lógica e aritmética), fazendo com que a ULA use a saída do somador em vez de várias outras coisas, e fazer com que a saída da ULA substitua o valor no registrador 2. Existem circuitos lógicos simples para alcançar todas essas coisas ( multiplexador , somador , contador , ...), embora processadores reais usem otimizações muito complicadas.

É como se você estivesse perguntando como um carro sabe desacelerar quando você pisa no freio. O carro não sabe, o pedal de freio apenas controla indiretamente como as almofadas duras são pressionadas contra as rodas.

    
por 06.07.2011 / 18:40
10

Take, for example, the instruction that tells an x86/IA-32 processor to move an immediate 8-bit value into a register. The binary code for this instruction is 10110 followed by a 3-bit identifier for which register to use. The identifier for the AL register is 000, so the following machine code loads the AL register with the data 01100001.

10110000 01100001

This binary computer code can be made more human-readable by expressing it in hexadecimal as follows

B0 61

Here, B0 means 'Move a copy of the following value into AL', and 61 is a hexadecimal representation of the value 01100001, which is 97 in decimal. Intel assembly language provides the mnemonic MOV (an abbreviation of move) for instructions such as this, so the machine code above can be written as follows in assembly language, complete with an explanatory comment if required, after the semicolon. This is much easier to read and to remember.

link

Em outras palavras, quando você "monta" seu programa de montagem, suas instruções, como

MOV AL, 61h

são convertidos em números, que a CPU associa um significado especial e, em seguida, age de acordo.

    
por 06.07.2011 / 16:56
6

Sugestão de leitura:

Veja também as notas do curso em CS152: Arquitetura e Engenharia de Computadores na Universidade de Berkeley, um curso em que os alunos implementam uma CPU.

Se você pesquisar no Google por "cpu caseira", encontrará muitas guloseimas.

    
por 06.07.2011 / 20:45
4

No extremo mais baixo, tudo o que a CPU pode fazer é adicionar. Além disso, pode subtrair, multiplicar e dividir (visto que estes são apenas adicionais de uma maneira diferente). A CPU usa isso para mover dados na memória, aplicando as adições aos endereços de memória.

Tenha em mente que isso está no nível mais baixo possível. A CPU realmente "compreende" certos comandos, na forma de microcódigo. Veja a resposta do Breakthrough, está muito bem escrito.

    
por 06.07.2011 / 16:52
2

Eu dei uma resposta relacionada em programmers.stackexchange.com, consulte Como os computadores funcionam? onde eu caminhei rapidamente sobre tudo, desde o início, sobre como os computadores funcionam sobre como interpretar instruções para mover elétrons.

    
por 06.07.2011 / 22:45