Architecture et jeu d’instructions
TD 2
1 octobre 2009
1 Mon premier programme assembleur
.intel_syntax noprefix
.data # segment de donn´
ees
hello:
.string "Hello, world!"
.text # segment de code
.globl main
main:
lea eax, hello # charger l’adresse de hello dans eax
push eax # empiler l’argument eax
call puts # appel de la fonction puts
add esp, 4 # restaurer le pointeur de pile
ret # retour `
a l’appelant
1. Essayer ce programme et expliquer son fonctionnement. On compilera avec
gcc -o hello hello.s
2. Lancer ce programme dans le d´
ebogueur ddd :
ddd hello
Selectionner View Machine Code Window. Dans la ligne de commande en bas, entrer :
break main
run
Selectionner Status Registers.
En surveillant la valeur des registres dans la fenˆ
etre, avancer dans le code avec la commande nexti.
3. Que va-t-il se passer si on ajoute l’instruction :
add eax, 1
avant le push ? Essayer.
4. Et en la remplac¸ant par l’instruction :
add byte ptr [eax], 1 ?
On veut maintenant ajouter 1 `
a chacun des codes de caract`
eres de la chaˆ
ıne "Hello, world !". Cette
chaˆ
ıne se termine par un caract`
ere nul (valeur 0).
5. ´
Ecrire un algorithme qui fait cette op´
eration, avec des variables, tests, boucles. . .
6. Faire la mˆ
eme chose, mais en s’autorisant uniquement les op´
erations de :
lecture ou ´
ecriture d’une valeur en m´
emoire `
a une adresse donn´
ee,
addition, soustraction. . .,
comparaison d’´
egalit´
e, sup´
eriorit´
e, inf´
eriorit´
e. . .de deux nombres,
sauts conditionnels (suivant le r´
esultat d’une comparaison) ou inconditionnels.
Vous avez donc droit au goto pour une fois, profitez-en.
1
Le langage assembleur x86 que vous utilisez est d´
ecrit en 5 volumes t´
el´
echargeables `
a :
http://developer.intel.com/products/processor/manuals
Avant de partir en courant, cherchez dans les volumes 2a et 2b les instructions suivantes :
MOV,
ADD,
CMP,
JMP et Jcc.
7. En utilisant ces instructions que vous connaissez maintenant par cœur, transcrire l’algorithme pr´
ec´
edent en
assembleur x86. Le tester et le d´
eboguer.
8. ´
Ecrire le mˆ
eme programme en C et le compiler avec gcc -S -masm=intel helloC.c (pensez `
a utiliser
un nom diff´
erent pour ne pas ´
ecraser votre propre code assembleur). Notez les diff´
erences avec votre version,
suivant le niveau d’optimisation utilis´
e (-O0, . . ., -O3).
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !