← Retour à la page de la matière

🧠 Cours Complet — Assembly Language (x86-64)

Partie 2 : Contrôle, Tableaux et Structures


🗂️ Plan


🔹 1. Flattened C Code

🧩 Le problème

Traduire directement du code C vers l’assembleur est souvent difficile, car le C contient des instructions imbriquées (if, for, while, etc.).

Les processeurs, eux, ne comprennent que des instructions séquentielles et des sauts (jmp, je, jne, ...).

💡 La solution : "Flatten" (aplatir)

On transforme le code C en version séquentielle, où toutes les conditions et boucles sont remplacées par des tests et des sauts explicites.

Objectif : ne garder que des instructions simples — pas de blocs imbriqués.

🧠 Exemple 1 — if

En C :


if (x > y)
    x = x - y;

Version aplatie :


t1 = (x > y);
if (t1 == 0) goto END;
x = x - y;
END:

En Assembleur :


cmp eax, ebx        ; compare x et y
jle END             ; si x <= y, saute à END
sub eax, ebx        ; sinon, fait x = x - y
END:

🔹 2. Contrôle de flux avec entiers signés

Les int en C sont signés par défaut. Les sauts sont :

📜 Résumé général

Sujet Description Exemple
Flattened C Traduction linéaire de if, while, for cmp + jmp
Contrôle signé jl, jg, jle, jge cmp eax, ebx
Contrôle non signé jb, ja, jbe, jae cmp eax, ebx
Tableaux Accès mémoire indirect / indexé [rdi + rsi*4]
Structures Accès par décalage / alignement [rdi + 4]