Incomprehension assembleur et c
Fermé
nadal1991
Messages postés
268
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
2 octobre 2011
-
Modifié par nadal1991 le 1/10/2011 à 16:50
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 3 oct. 2011 à 18:05
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 3 oct. 2011 à 18:05
A voir également:
- Incomprehension assembleur et c
- Logiciel assembleur - Télécharger - Édition & Programmation
- Assembleur pc salaire ✓ - Forum Études / Formation High-Tech
- Tp corrigé assembleur 8086 - Forum Programmation
- Formation monteur assembleur pc ✓ - Forum Études / Formation High-Tech
- Programmation assembleur exercices corrigés pdf - Forum Programmation
6 réponses
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
2 oct. 2011 à 17:46
2 oct. 2011 à 17:46
Pourrais-tu détailler la syntaxe de ces 2 lignes, car je ne comprend rien à cette forme d'assembleur, ou ne serais-ce que dire ce qu'elles sont censées faire ?
nadal1991
Messages postés
268
Date d'inscription
mercredi 5 septembre 2007
Statut
Membre
Dernière intervention
2 octobre 2011
11
2 oct. 2011 à 20:43
2 oct. 2011 à 20:43
la syntaxe; ben la première instruction prend le contenu de "main_esp" (c'est une valeur du registre esp précédemment sauvegardé) et elle met cette valeur dans le registre "esp.
pour la ligne deux c'est la même chose avec le registre ebp. mais bon ces instruction marche je l'ai aie déjà essayé et ca marche mon problème comme je l'avais dit c'est pourquoi la suppression de cette variable locale "b" qui sert à rien du tout mène à une erreur de segmentation.
voila merci .
pour la ligne deux c'est la même chose avec le registre ebp. mais bon ces instruction marche je l'ai aie déjà essayé et ca marche mon problème comme je l'avais dit c'est pourquoi la suppression de cette variable locale "b" qui sert à rien du tout mène à une erreur de segmentation.
voila merci .
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
Modifié par nicocorico le 3/10/2011 à 12:21
Modifié par nicocorico le 3/10/2011 à 12:21
Oui ça d'accord mais c'est cette syntaxe AT&T, inbuvable à mon goût, qui sème le doute sur la signification précise....
La méthode est relativement barbare, et je ne suis pas étonné que ça ne fonctionne pas....
Tu pourrais sans doute passer les paramètres par des variables globales et des sauts plutôt que de chercher à restituer un contexte, ce qui est assez compliqué.
et en fait, en ajoutant une variable locale, des instructions sont ajoutées pour créer un cadre de pile, c'est à dire que ESP va prendre la valeur de 'Main_EBP' et EBP est sauvegardé puis restauré en sortie de fonction ...
Les instructions ajoutées sont celle-çi :
PUSH EBP
MOV EBP,ESP
SUB ESP,04 // Prépare 4 octets pour la variable locale
ton code est là :
asm ("movl %0, %%esp" : :"r"(main_esp):"esp");
asm ("movl %0, %%ebp" : :"r"(main_ebp));
mov ESP,EBP
POP EBP
RET 04
La méthode est relativement barbare, et je ne suis pas étonné que ça ne fonctionne pas....
Tu pourrais sans doute passer les paramètres par des variables globales et des sauts plutôt que de chercher à restituer un contexte, ce qui est assez compliqué.
et en fait, en ajoutant une variable locale, des instructions sont ajoutées pour créer un cadre de pile, c'est à dire que ESP va prendre la valeur de 'Main_EBP' et EBP est sauvegardé puis restauré en sortie de fonction ...
Les instructions ajoutées sont celle-çi :
PUSH EBP
MOV EBP,ESP
SUB ESP,04 // Prépare 4 octets pour la variable locale
ton code est là :
asm ("movl %0, %%esp" : :"r"(main_esp):"esp");
asm ("movl %0, %%ebp" : :"r"(main_ebp));
mov ESP,EBP
POP EBP
RET 04
Le chêne aussi était un gland, avant d'être un chêne
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 oct. 2011 à 09:49
3 oct. 2011 à 09:49
Bonjour,
vu que tu maitrises l'assembleur, fait une sortie assembleur et compare les codes avec et sans la variable local, peut être que la solution t'apparaitra (genre optimisation du compilateur qui mets b dans un style register).
vu que tu maitrises l'assembleur, fait une sortie assembleur et compare les codes avec et sans la variable local, peut être que la solution t'apparaitra (genre optimisation du compilateur qui mets b dans un style register).
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
3 oct. 2011 à 18:05
3 oct. 2011 à 18:05
Il n'empêche que je ne vois pas comment ça pourrais fonctionner correctement car la méthode est très aléatoire.
Il n'est pas possible d'enregistrer un contexte de pile de cette manière, il faut dans ce cas réorienter ESP vers une nouvelle pile complète et correctement dimensionnée... Et servant uniquement à conserver les paramètres d'une fonction, ce qui se fait plus élégamment en enregistrant les paramètres dans des variables, plutôt que sur la pile.
Il faudrait idéalement que tu expliques l'intérêt de cette démarche pour qu'on puisse vraiment t'aider.
Il n'est pas possible d'enregistrer un contexte de pile de cette manière, il faut dans ce cas réorienter ESP vers une nouvelle pile complète et correctement dimensionnée... Et servant uniquement à conserver les paramètres d'une fonction, ce qui se fait plus élégamment en enregistrant les paramètres dans des variables, plutôt que sur la pile.
Il faudrait idéalement que tu expliques l'intérêt de cette démarche pour qu'on puisse vraiment t'aider.