CM d'Architecture des ordinateurs (ESIPE 1)
Exemples d'exercices en assembleur
- [registres ; sauts conditionnels]
On suppose que eax
, ebx
et
ecx
contiennent trois valeurs (des entiers
signés). Écrire une suite d'instructions qui place dans
edx
la plus grande de ces trois valeurs.
- [registres ; sauts conditionnels]
Écrire une suite d'instructions qui, dans le cas où
eax
et ebx
contiennent des valeurs
d'un même signe, remplace le contenu de ecx
par son
opposé.
- [registres ; sauts conditionnels ; boucles]
On suppose que eax
contient une valeur positive que
l'on symbolise par n
. Écrire une suite
d'instructions faisant en sorte de placer la valeur
1 + 2 + 3 + ... + n
dans eax
.
- [registres ; sauts conditionnels ; boucles]
On suppose que eax
contient une valeur positive que
l'on symbolise par n
. Écrire une suite
d'instructions faisant en sorte de placer la valeur
12 + 22 + 32
+ ... + n2
dans eax
.
- [registres ; pile]
Écrire une suite d'instructions qui échange le contenu des
valeurs des registres eax
et ebx
. Les
valeurs des deux autres registres de travail ecx
et
edx
doivent être préservées (indice : utiliser la
pile).
- [registres ; pile]
On suppose que la pile contient trois données. Écrire une
suite d'instructions qui inverse l'ordre de ces trois
valeurs situées à partir de la tête de la pile.
- [registres ; pile ; sauts conditionnels]
Écrire une suite d'instructions qui place en tête de pile le
maximum entre les valeurs des registres eax
et
ebx
.
- [registres ; sauts conditionnels ; boucles]
On suppose que eax
et ebx
contiennent
des valeurs positives. Écrire une suite d'instructions qui
remplace le contenu de ebx
par la valeur initiale
de ebx
plus la valeur initiale de eax
.
L'utilisation des instructions add
et
sub
n'est pas autorisée. L'utilisation des
instructions inc
et dec
est recommandée.
- [registres ; pile ; sauts conditionnels ; boucles]
Écrire une suite d'instructions qui dépile toutes les valeurs
nulles situées à partir de la tête de la pile.
- [registres ; pile ; sauts conditionnels ; boucles]
On suppose que eax
contient une valeur entière et
que la pile contient un nombre suffisant de valeurs. Écrire une
suite d'instructions qui dépile les valeurs de la pile qui sont
strictement supérieures à la valeur contenue dans
eax
. Le processus s'arrête dès qu'une valeur
inférieure à celle de eax
figure en tête de pile.
- [registres ; pile ; sauts conditionnels ; boucles]
On suppose que la pile contient un nombre suffisant de valeurs
et que la tête de pile contient une valeur non nulle. Écrire une
suite d'instructions qui place dans eax
la plus
grande valeur de la pile rencontrée jusqu'à ce qu'une valeur
nulle soit trouvée.
- [registres ; pile ; sauts conditionnels ; fonctions]
Écrire une fonction (respectant les conventions du C) qui prend
trois arguments a
, b
et c
et qui renvoie 1
si a = b = c
et
0
sinon.
- [registres ; pile ; sauts conditionnels ; boucles ;
fonctions]
On suppose que l'on dispose d'une fonction pow
(écrite selon les conventions du C) qui prend en premier argument
une valeur x
(entière signée) et en second argument
une valeur n
(entière positive). Cette
fonction renvoie la valeur xn
. On ne se
soucie pas des dépassement de capacité éventuels ici. Écrire une
suite d'instructions qui empile successivement
n1
, n2
,
n3
, ..., nk
où n
est la valeur de eax
et
k
est la valeur de ebx
.
- [registres ; pile ; sauts conditionnels ; boucles ;
fonctions ; chaînes de caractères]
Écrire une fonction (respectant les conventions du C) qui prend
comme argument l'adresse d'une chaîne de caractères et qui renvoie
sa longueur (et donc le nombre de caractères situés avant le
caractère nul 0
).
- [registres ; pile ; sauts conditionnels ; boucles ;
fonctions ; chaînes de caractères]
Écrire une fonction (respectant les conventions du C) qui prend
comme arguments les adresses de deux chaînes de caractères et
qui renvoie 1
si les deux chaînes de caractères
sont égales et 0
sinon.
- [registres ; pile ; sauts conditionnels ; boucles ;
fonctions ; tableaux]
Écrire une fonction (respectant les conventions du C) qui prend
comme arguments les adresses de deux tableaux et une taille
n
. Les deux tableaux sont formés de n
cases de 4
octets. La fonction renvoie
1
si les deux tableaux sont égaux et 0
sinon.
- [registres ; pile ; sauts conditionnels ; boucles ;
fonctions ; écriture en mémoire]
Écrire une fonction (respectant les conventions du C) qui prend
comme arguments une adresse adr
, un entier positif
n
et un caractère c
. Cette fonction
écrit aux adresses allant de adr
à
adr + n - 1
la valeur c
.