Além das lições · 5 min de leitura

Assembly e C: qual é a diferença?

Assembly e C permitem escrever programas, mas mostram o computador em níveis diferentes. Não é uma competição: cada linguagem facilita determinados tipos de trabalho.

Representação de um processador sobre uma placa com circuitos

Uma operação em C

Em C, você pode escrever uma expressão como total = 5 + 3;. A linguagem oferece variáveis, tipos de dados e estruturas para organizar tarefas sem escolher, a cada linha, um registrador físico.

Um compilador transforma o programa em instruções para uma arquitetura. Ele pode otimizar a expressão e guardar diretamente o valor 8, em vez de emitir uma soma. Por isso, uma linha de C não corresponde sempre a uma única instrução de máquina.

O mesmo raciocínio em Assembly

Trecho x86-64 · Intel / NASM · Linux
mov rax, 5    ; guarda 5
add rax, 3    ; calcula 5 + 3

Aqui escolhemos explicitamente o registrador RAX e descrevemos a soma. É um trecho didático: não inclui a entrada de um programa nem uma maneira de encerrá-lo. O resultado esperado, pelo significado das instruções, é 8 em RAX.

Portabilidade não é automática

Um programa em C pode ser recompilado para arquiteturas diferentes quando seu código e suas dependências são compatíveis. Isso não significa que todo programa C funciona em qualquer máquina sem ajustes.

Assembly expõe os registradores e as instruções da arquitetura. Um trecho x86-64 normalmente precisa ser reescrito para ARM. Até na mesma arquitetura, chamadas ao sistema podem mudar entre Linux e Windows.

Por que estudar os dois?

C ajuda a construir programas com abstrações; Assembly ajuda a enxergar o trabalho feito em um nível mais próximo do processador. Esse entendimento é útil para ler código compilado, estudar sistemas e compreender limites da representação de dados.

Você não precisa aprender C antes de começar aqui. Primeiro, entenda o que é Assembly e depois acompanhe as primeiras instruções.