Exercices Architecture de l'ordinateur ( instructions assembleur machine )

Travaillez calmement, il est normal que vous ne répondiez pas à certaines questions. Huit questions bien traitées rapportent beaucoup plus de points que douze questions maltraitées !

On considère des entiers codés sur 16 bits et interprétés comme des entiers relatifs (codés en complément à deux) ; dans tout l'exercice on utilise 4 chiffres hexadécimaux pour écrire ces entiers.{sidebar id=1}

M N P Q R
ba4e fe3d 6190 3cc6 89f0
  1. Parmi ces cinq entiers quels sont ceux qui sont négatifs ?
  2. Classer ces entiers du plus petit au plus grand, par exemple :

    M < P < R < N < Q

    (mais cette réponse tirée au hasard n'est probablement pas la bonne). Justifier la réponse sur la copie.

  3. Calculer M + N : effectuer l'addition directement en hexadécimal sur la copie — une réponse brute ne rapportera aucun point. Y a-t-il débordement (overflow) ?
  4. Calculer -N et M - N ; comme dans la question précédente le détail des calculs doit figurer sur la copie.

Voici ci-contre le texte du programme de démonstration fourni avec le simulateur Y86, dont on a malencontreusement effacé les commentaires (sauf le dernier).

  1. Que se passerait-il lors de l'exécution du programme si par malheur on avait oublié l'instruction jmp Main d'adresse 0x00c ?
  2. Quels sont les paramètres de la fonction Sum ? Expliquer quelle est la partie du code qui permet de répondre à cette question.
  3. Expliquer les trois instructions consécutives d'adresses 0x03e, 0x044 et 0x04a ; en déduire le rôle des trois registres %eax, %ecx, et %edx pendant l'exécution de la fonction Sum.
  4. Expliquer les sept instructions qui composent la boucle — adresses 0x057 à 0x06f. Attention : les réponses qui paraphrasent le code (on ajoute %esi à %eax, etc.) ne rapportent aucun point ; il faut rédiger clairement, en choisissant correctement les noms des variables manipulées par le programme. En déduire ce que calcule la fonction Sum.
  5. Où se trouve le résultat calculé par la fonction Sum ? Quelle est sa valeur (en hexadécimal) ?
  6. Si ce code avait été produit par un compilateur quelle aurait été la déclaration (en langage C) de la fonction Sum ?
  7. Expliquer le rôle des deux instructions d'adresses 0x03a et 0x03c au début de la fonction Sum. Expliquer de même le rôle des deux instructions d'adresses 0x074 et 0x076 en fin de fonction.
  8. Expliquer le rôle des deux instructions d'adresses 0x050 et 0x052. Donner une instruction qui remplacerait avantageusement (pourquoi ?) l'instruction qui les précède (adresse 0x04a).
  9. Décrypter le code machine 50250c000000 (instruction d'adresse 0x044). Conseil : examiner le code machine des instructions similaires et expliquer en détail sur la copie comment raisonner pour retrouver le code-opération et la numérotation (exotique) des registres .                       {sidebar id=2}

5

Ecrire en langage d'assemblage Y86 une fonction cmp telle que l'appel call cmp permette de comparer les deux registres %eax et %ecx sans les modifier.

call cmp jl boucle

Par exemple le code ci-contre doit déclencher un saut vers l'instruction d'étiquette boucle si le contenu du registre %eax est strictement inférieur au contenu du registre %ecx. Les valeurs de tous les registres doivent être identiques avant et après exécution de ce fragment de code.

Plus d exercices en architectures des ordinateurs ( assembleur,fonction,registre ) dans la categorie parente .

{sidebar id=5}