Exercices¶
Dans le cours théorique, nous avons parlé des instructions
setqui 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 deaetbsont initialement dans les registres%eaxet%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
rienet 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
%espcontient initialement la valeur0x0Cet que%eaxet%ebxcontiennent respectivement0x02et0x03, 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 defn’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 .