Da Linguagem C ao Assembly e Registradores da CPU
A Jornada do Código até os Transistores
Quando um programador escreve código em uma linguagem de alto nível como C, o compilador traduz esse texto legível em instruções de máquina que a CPU entende.
Código C ──▶ Compilador (GCC/Clang) ──▶ Assembly (x86_64) ──▶ Código de Máquina (Binário) ──▶ CPU
1. Exemplo Prático de Tradução
Código em C:
int somar(int a, int b) {
return a + b;
}
Instruções Assembly (x86_64 / Intel):
somar:
mov eax, edi ; Copia o valor do 1º parâmetro (edi) para o registrador EAX
add eax, esi ; Soma o 2º parâmetro (esi) ao registrador EAX
ret ; Retorna o resultado armazenado em EAX
Agora execute essa mesma tradução (e mais três outras, incluindo uma com desvio condicional) passo a passo, vendo os registradores mudarem de valor em tempo real:
🧮
Do Código C ao Assembly e aos Registradores
Veja o compilador traduzir uma função C em Assembly x86-64 real, e execute registrador por registrador
ℹ️ Chamada de exemplo: somar(7, 3) — convenção de chamada System V AMD64: o 1º parâmetro inteiro entra em EDI, o 2º em ESI, e o valor de retorno sai em EAX.
📄 Código C
int somar(int a, int b) {return a + b;}
⚙️ Assembly x86-64
mov eax, ediadd eax, esiret
EDI
7
ESI
3
EAX
—
> // Clique em "Próximo Passo" ou execute automaticamente
Instruções Executadas
0
Resultado (EAX)
—
💡 Diferente do ciclo Fetch-Decode-Execute (com a ISA de brinquedo do simulador de Von Neumann), aqui os mnemônicos são Assembly x86-64 real — o mesmo tipo de código que o GCC ou o Clang geram de verdade a partir do seu
.c. Repare que EDI e ESI nunca mudam: eles chegam prontos com os argumentos da chamada; só EAX é usado como acumulador de trabalho, e é ele que carrega o valor de retorno quando a instrução ret executa.2. O Papel dos Registradores na CPU
Os registradores são as memórias mais rápidas do sistema, localizadas dentro do próprio Die da CPU:
- EAX / RAX: Acumulador principal para operações aritméticas e valores de retorno.
- RIP / EIP (Instruction Pointer): Armazena o endereço de memória da próxima instrução a ser executada.
- RSP / ESP (Stack Pointer): Aponta para o topo atual da pilha (Call Stack).
3. O Ciclo de Execução da CPU (Fetch-Decode-Execute)
1. FETCH (Busca): A Unidade de Controle busca a instrução binária na memória RAM (via Cache L1).
2. DECODE (Decodificação): A instrução binária é convertida nos sinais eletrônicos correspondentes.
3. EXECUTE (Execução): A ALU (Unidade Lógica/Aritmética) realiza aoperação nos registradores.