Aquest document està pensat per a estudiants que ja coneixen el llenguatge C i volen entendre com funciona un programa a un nivell més proper al maquinari. Assembly permet controlar directament els registres del processador i entendre com el compilador transforma el codi C en instruccions de màquina.
int a = 5;
int b = 3;
int c = a + b;
mov eax, 5
mov ebx, 3
add eax, ebx
mov [c], eax
En aquest exemple:
mov copia dades.add suma dos registres.eax i ebx són registres del processador.Els registres són petites zones de memòria molt ràpides situades dins del processador.
En C:
if (a == b) {
c = 1;
}
En Assembly:
cmp eax, ebx
je igual
mov ecx, 0
jmp final
igual:
mov ecx, 1
final:
La instrucció cmp compara dos valors i
je (Jump if Equal) salta si són iguals.
En C:
for(int i = 0; i < 5; i++) {
// cos del bucle
}
En Assembly:
mov ecx, 5
bucle:
; cos del bucle
dec ecx
jnz bucle
dec decrementa el registre i
jnz continua el bucle mentre el resultat no sigui zero.
Escriviu aquest programa en C:
int suma(int a, int b){
return a + b;
}
A continuació, compileu-lo amb:
gcc -S programa.c
Observeu el fitxer programa.s i identifiqueu: