Exercices et Corrections en Assembleur
Table des Matières
1. Exercice 1 : Addition et affichage en ASCII
2. Exercice 2 : Affichage de l'alphabet
3. Exercice 3 : Échange de registres
4. Exercice 4 : Conversion de minuscules en majuscules
5. Exercice 5 : Copie de chaîne
6. Exercice 6 : Inversion de chaîne avec la pile
7. Exercice 7 : Affichage de l'alphabet en majuscules
8. Exercice 8 : Produit de deux nombres
9. Exercice 9 : Affichage de l'alphabet de 'a' à 'z'
10. Exercice 10 : Comptage des caractères 'a'
Exercice 1 : Addition et affichage en ASCII
Code :
section .text
global _start
_start:
mov ax, 5
mov bx, 3
add ax, bx
add ax, 48
mov dx, ax
mov ah, 2
int 21h
mov ah, 4Ch
int 21h
Correction :
Aucune correction nécessaire.
Explication :
Ce programme additionne les valeurs 5 et 3,
ajoute 48 pour convertir le résultat en caractère ASCII, puis a
Exercice 2 : Affichage de l'alphabet
Code :
section .text
global _start
_start:
mov dl, 'a'
boucle:
mov ah, 2
int 21h inc
dl cmp dl,
'z'+1 jz fin
jmp boucle
fin:
mov ah, 4Ch
int 21h
Correction :
Aucune correction nécessaire.
Explication :
Ce programme affiche les caractères de 'a' à 'z'
en utilisant une boucle et se termine après l'affichage de 'z
Exercice 3 : Échange de registres - Méthode 1 : Utilisation de la pile
Code :
section .text
global _start
_start:
mov ax, 100
mov bx, 200
push ax push
bx pop ax
pop bx mov
ah, 4Ch int
21h
Explication :
Cette méthode montre comment échanger les valeurs de deux registres en utilisant la pile.
Exercice 3 : Échange de registres - Méthode 2 : Utilisation des registres
Code :
section .text
global _start
_start:
mov ax, 100
mov bx, 200
mov cx, bx
mov bx, ax
mov ax, cx
mov ah, 4Ch
int 21h
Correction :
Aucune correction nécessaire.
Explication :
Cette méthode montre comment échanger les valeurs de deux registres en utilisant un registre intermédiai
Exercice 4 : Conversion de minuscules en majuscules
Code :
assume ds:data
data segment
miniscul db 'abcd2$'
data ends
code segment
start:
mov ax, data mov
ds, ax mov si, offset
miniscul
transform:
mov al, [si]
cmp al, '$'
je fin sub
al, 32 mov
dl, al mov
ah, 2 int 21h
inc si jmp
transform
fin:
mov ah, 4Ch
int 21h
code ends
end start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme convertit les caractères en minuscules d'une chaîne en majuscules et les affiche jusqu'à
ce
Exercice 5 : Copie de chaîne
Code :
assume ds:data
data segment
source db 'abc&'
destination db '?'
data ends
code segment
start:
mov ax, data mov ds,
ax mov si, offset source
mov di, offset destination
mov cl, 0
boucle: cmp
[si], '&' je
fin mov al,
[si] mov
[di], al inc
si inc di
inc cl jmp
boucle
fin:
mov ah, 4Ch
int 21h
code ends
end start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme copie les caractères de la chaîne source vers la chaîne destination jusqu'à ce qu'il
rencontr
Exercice 6 : Inversion de chaîne avec la pile
Code : assume
ds:data
data segment
chaine db 'abc$'
data ends
code segment
start:
mov ax, data mov
ds, ax mov cl, 0
mov si, offset chaine
empile: mov
ax, [si] je
depile push
ax inc cl
inc si jmp
empile
depile:
pop ax mov
dx, ax mov
ah, 2 int
21h dec cl
cmp cl, 0
je fin jmp
depile
fin:
mov ah, 4Ch
int 21h
code ends
end start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme empile les caractères de la chaîne source puis les dépile et les affiche pour inverser l'ordre
Exercice 7 : Affichage de l'alphabet en majuscules
Code :
section .text
global _start
_start:
mov dl, 'A' call
affiche_alphabt mov
ah, 4Ch int 21h
affiche_alphabt proc
affiche_caracter:
cmp dl, 'Z'+1 je fin
mov ah, 2 int 21h
inc dl jmp
affiche_caracter
fin: ret
affiche_alphabt endp
code ends
end _start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme affiche les lettres de l'alphabet de 'A' à 'Z' en appelant une procédure qui parcourt les
carac
Exercice 8 : Produit de deux nombres
Code :
assume ds:data
data segment
n1 dw 25h
n2 dw 4
prod dw ? data
ends
code segment
main:
mov ax, data
mov ds, ax
mov ax, n1
mov cx, n2
mov dx, 0
boucle:
add dx, ax
loop boucle
mov prod, dx
mov ah, 4Ch
int 21h
code ends
end main
Correction :
Aucune correction nécessaire.
Explication :
Ce programme utilise une boucle pour multiplier deux nombres et stocke le résultat dans 'prod'.
Exercice 9 : Affichage de l'alphabet de 'a' à 'z'
Code : assume
ds:data
data segment
caractere db 'a' data
ends
code segment
start:
mov ax, data mov
ds, ax mov al,
caractere call
affiche_alphabet mov
ah, 4Ch int 21h
affiche_alphabet proc
push bp mov bp,
sp pusha sub
sp, 10
affiche: cmp
al, 'z'+1 je
fin mov dl,
al mov ah, 2
int 21h inc
al jmp
affiche
fin: add sp, 10
popa pop bp
ret affiche_alphabet
endp
code ends
end start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme affiche les lettres de l'alphabet de 'a' à 'z' en appelant une procédure.
Exercice 10 : Comptage des caractères 'a'
Code : assume
ds:data
data segment
chaine db 'abc$'
caractere db 'a'
data ends
code segment
start:
mov ax, data mov
ds, ax mov si, offset
chaine mov cl, 0
compare:
mov al, [si]
cmp al, '$' je
affiche cmp al,
caractere je
compte
compte: inc
cl inc si
jmp compare
affiche:
mov dl, cl
add dl, 48
mov ah, 2
int 21h mov
ah, 4Ch int
21h
code ends
end start
Correction :
Aucune correction nécessaire.
Explication :
Ce programme compte le nombre de caractères 'a' dans une chaîne et affiche ce nombre.