Zero One Cyber

Contenu du cours
Tutoriel Assembleur – Chapitre 1 : Les bases indispensables pour débuter
Dans ce premier chapitre, tu découvriras les fondamentaux du langage Assembleur afin de comprendre comment un programme interagit directement avec le processeur et la mémoire. Tu apprendras : ce qu’est réellement l’Assembleur et à quoi il sert le rôle du processeur, des registres et de la mémoire la structure d’un programme assembleur les instructions de base et leur fonctionnement le flux d’exécution d’un programme les notions essentielles pour lire et comprendre du code assembleur simple Ce chapitre pose les bases indispensables pour aborder la programmation bas niveau, le reverse engineering et l’analyse de binaires dans la suite du cours. Aucun prérequis avancé n’est nécessaire : tout est expliqué pas à pas, avec une approche claire et accessible.
0/13
Programmation bas niveau : maîtriser l’Assembleur

INTRODUCTION

 

La programmation graphique en assembleur ouvre un vaste champ de possibilités pour créer des effets visuels directement en manipulant la mémoire vidéo.

 

Dans ce chapitre, nous allons :

  • Comprendre la mémoire vidéo (VRAM)

  • Découvrir les modes vidéos du BIOS

  • Apprendre à afficher des pixels et à effacer l’écran

 

 Nous nous limiterons au mode graphique 320x200x256 couleurs (mode 13h) pour rester simples et pédagogiques. Les autres modes (SVGA, Mode-X, TrueColor, etc.) nécessitent des techniques plus avancées.

 

La mémoire vidéo

 

La mémoire vidéo, ou VRAM (Video RAM), est un bloc réservé à l’affichage à l’écran :

  • Taille : 64 Ko en mode réel

  • Adresse de base : 0A000h:0000

Pour utiliser la VRAM, il faut initialiser le mode vidéo via l’interruption BIOS INT 10h.

 

Le mode 13h

 

  • Résolution : 320 x 200 pixels

  • Couleurs : 256

  • Accès simple : chaque pixel correspond à 1 byte (index de couleur)

 

Calcul de l’offset d’un pixel

 

En assembleur, la VRAM est linéaire. L’adresse d’un pixel (X,Y) est donnée par :

offset=(Y∗320)+X\text{offset} = (Y * 320) + X

 

Exemple : pixel en (12,79)

 

offset=(79∗320)+12=25292\text{offset} = (79 * 320) + 12 = 25292

 

Exemple : afficher un pixel jaune

 
MOV AX, 013h ; mode 13h : 320x200x256 couleurs
INT 10h ; interruption vidéo
MOV AX, 0A000h ; segment de la VRAM
MOV ES, AX ; transférer dans ES
MOV AL, 14 ; couleur jaune (index 14)
MOV ES:[25292], AL ; placer le pixel à l’offset calculé

Attendre l’appui d’une touche

 

Pour ne pas revenir immédiatement au mode texte :

 

 
XOR AX, AX ; mettre AX à 0
INT 16h ; attendre appui d’une touche
MOV AX, 03h ; retour au mode texte 80x25
INT 10h
RET
  • XOR AX, AX : plus court que MOV AX,0

  • INT 16h : interruption clavier pour pause

  • INT 10h avec AX=03h : réinitialise le mode texte

 

Effacer l’écran

 

Méthode avec MOV

 

Pour effacer 64000 bytes (320×200 pixels), on peut utiliser une boucle :

 

 
MOV AX, 013h
INT 10h
MOV AX, 0A000h
MOV ES, AX
XOR DI, DI ; premier pixel
MOV AX, 0 ; couleur noire

Debut:
MOV ES:[DI], AX ; écrire le word (2 bytes) dans la VRAM
ADD DI, 2 ; passer au word suivant
CMP DI, 64000
JNAE Debut ; répéter tant que DI < 64000

MOV AX, 03h ; retour mode texte
INT 10h
RET

  • ADD DI,2 : on écrit 2 bytes à la fois pour accélérer

  • La boucle parcourt tous les pixels de l’écran

 

Méthode optimisée avec STOSB et REP

 

Pour gagner en taille et en vitesse :

 

 
MOV AX, 013h
INT 10h
PUSH 0A000h
POP ES ; segment VRAM
XOR DI, DI ; premier pixel
XOR AX, AX ; valeur noire

MOV CX, 32000 ; 32000 words = 64000 bytes
REP STOSB ; remplir ES:DI avec AL (0)

MOV AL, 03h
INT 10h ; retour au mode texte
RET

  • STOSB combiné à REP permet d’éviter les instructions MOV/ADD répétitives

  • Cette technique réduit considérablement la taille du code

  • Utile pour optimisation mémoire ou pour intro 4k

 

Points clés

 

  1. La VRAM est linéaire, chaque pixel occupe 1 byte dans le mode 13h

  2. La position d’un pixel se calcule avec (Y*320)+X

  3. MOV ES:[offset], AL permet de dessiner un pixel

  4. STOSB/REP accélère le remplissage de blocs mémoire (ex. effacer l’écran)

  5. Toujours restaurer le mode texte avant de quitter le programme