Vous êtes sur la page 1sur 4

Exercice 1 (opration sur les registres )

Nous allons crer notre premier programme en assembleur dont le but est de faire quelles que
opration sur les registres. Reproduire les lignes suivantes dans un fichier exe1.asm

section .data ; parti e dans laquelle on dclare et on initialise des variables

message db 'salam',0x0a; dclaration et initialisation d'une chane de caractres
longmes equ $-message; affectation de la longueur de la chane l'tiquette longmes

section .text

global debut

debut :
mov eax, 3 ; eax = 3
mov ebx,eax ; ebx = eax
mov eax, 0x0f0f0f0f ; eax=0x0f0f0f0f
add eax,3 ; eax = eax + 3
add ah,0x1c ; ah = ah + 28
add ebx,ecx ; ebx = ebx + ecx
sub eax, 10 ; eax = eax - 10
add ah,al ; ah = ah + al
shr al,2 ; al sera dcal de 2 bits vers la droite
shl al,3 ; al sera dcal de 3 bits vers la gauche
fin :
mov eax,1 ; mettre dans eax le numro de l'appel systme exit
mov ebx,0 ; mettre dans ebx l'argument de exit (la valeur retourner)
int 0x80 ; appeler le noyau

Aprs avoir fini, tapez la ligne suivante nasm -g -f elf exe1.asm -l exe1.lst -o exe1.o . Notre
programme est a prsent compil. Tapez la ligne suivante pour faire l'dition des liens.
ld -e debut exe1.o -o exe1

Tapez la commande insight exe1. L'excution de cette dernire ligne affiche une fentre qui
contient le code crit en assembleur qui pourra tre excut pas pas.
Excutons le programme pas pas et observons l'volutiondes registres.

Exercice 2 (affichage d'une chane de caractres)

Nous allons crer notre premier programme en assembleur dont le but est d'afficher une chane de
caractres avec un saut de ligne.
section .data ; parti e dans laquelle on dclare et on initialise des variables

message db 'salam',0x0a; dclaration et initialisation d'une chane de caractres
longmes equ $-message; affectation de la longueur de la chane l'tiquette longmes

section .text

global debut

debut :
mov eax,4 ; mettre dans eax le numro de l'appel systme write
mov ebx,1 ; mettre dans ebx le numro de la sortie
mov ecx,message ; mettre dans ecx l'adresse du premier caractre de la chane
mov edx,longmes ; mettre dans edx le nombre de caractres afficher
int 0x80 ; appeler le noyau

fin :
mov eax,1 ; mettre dans eax le numero de l'appel systme exit
mov ebx,0 ; mettre dans ebx l'argument de exit (la valeur retourner)
int 0x80 ; appeler le noyau


Exercice 3 (boucle loop )
on dsire afficher une chane de caractre un certain nombre de fois en utilisant l'instruction loop
reproduire les lignes suivantes dans le fichier exe2.asm
section .data

message db 'salam',0x0a; dclaration et initialisation d'une chane de caractres
longmes equ $-message; affectation de la longueur de la chane l'tiquette longmes
ff db 0x25, 0x15, 0x32, 0x25

section .text

global debut

debut :
mov ecx,10 ; mettre dans ecx le nombre d'itrations
affiche :
mov eax,4
mov ebx,1
mov ecx,message
mov edx,longmes
int 0x80
loop affiche
fin :
mov eax,1
mov ebx,0
int 0x80

Aprs compilation et dition des liens, excutez le programme. Vous remarquez que le programme
ne s'excute pas correctement, pourquoi? Que faut-il faire pour remdier au problme?

Exercice 4 (saut conditionnel)
reprendre le programme de l'exercice 3 en remplaant l'instruction loop par jne.
Exercice 5 (saut conditionnel) me chose en remplaant jne par je et jmp