Exercices¶
Dans le cours théorique, nous avons parlé des instructions
set
qui permettent de fixer la valeur d’un byte d’un registre en fonction de la valeur des drapeaux du registreeflags
. Comment feriez-vous pour compiler en assembleur la ligneb=(a>0)
sans utilisez cette instruction et en sachant que les valeurs dea
etb
sont initialement dans les registres%eax
et%ecx
. Pour répondre à cette question, écrivez d’abord un code en C semblable au code ci-dessous :if ( condition) { b=1; } else { b=0; }
Avec le compilateur gcc, il est aussi possible de compiler du code assembleur directement dans une programme C. Cette fonctionnalité est intéressante si vous voulez tester de petites fonctions écrites en langage assembleur. Ainsi, une fonction baptisée
rien
et qui ne fait absolument rien peut s’écrire comme suit:extern void rien(); // indique au compilateur que la fonction est externe __asm__( "rien:\n" " ret\n" );
En utilisant l’assembleur [IA32], écrivez les instructions assembleur qui permettent d’implémenter une fonction qui ne prend aucun argument et retourne toujours l’entier
1
.
Considérons une fraction de la mémoire représentée dans le tableau ci-dessous.
Adresse Valeur 0x0C 0x00 0x08 0xFF 0x04 0x02 0x00 0x01 Si
%esp
contient initialement la valeur0x0C
et que%eax
et%ebx
contiennent respectivement0x02
et0x03
, que deviennent cette mémoire et les registres durant l’exécution de :pushl %eax pushl %ebx popl %ecx
En C, il n’est pas rare de voir dans certains programmes que la valeur de retour de certaines fonctions est ignorée. C’est une mauvaise pratique qui peut donner lieu à pas mal de problèmes. Connaissant la façon dont la valeur de retour d’une fonction
int f()
est gérée en assembleur, expliquez ce qu’il se passe en pratique lorsque la valeur de retour def
n’est pas sauvegardée.
- Vous trouverez sur INGInious plusieurs exemples de questions typiques sur l’assembleur à l’examen. Ces questions portent sur la traduction d’un code assembleur dans son équivalent en C. Première question, deuxième question, troisième question et quatrième question .