CM d'Architecture des ordinateurs (ESIPE 1)

Exemples d'exercices en assembleur

  1. [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.

  2. [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é.

  3. [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.

  4. [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.

  5. [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).

  6. [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.

  7. [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.

  8. [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.

  9. [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.

  10. [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.

  11. [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.

  12. [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.

  13. [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, ..., nkn est la valeur de eax et k est la valeur de ebx.

  14. [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).

  15. [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.

  16. [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.

  17. [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.