Lorsque vous insérez un assembleur en ligne dans une fonction dans un langage C, quelle est la convention sur les registres que vous êtes autorisé à utiliser pour scratch? Est-ce la responsabilité du compilateur de sauvegarder les valeurs de tous les registres qu'il doit sauvegarder avant d'entrer dans le bloc asm
? Est-ce la responsabilité du programmeur de stocker les valeurs dans ces registres quelque part et de les restaurer avant de quitter le bloc asm
? Y a-t-il une convention typique ou est-ce très spécifique à la mise en œuvre?Assembleur en ligne: Quels registres de travail peuvent être utilisés?
Répondre
L'assemblage en ligne est, par définition, spécifique au compilateur.
La plupart des compilateurs prenant en charge l'assemblage en ligne ont une syntaxe qui vous permet d'indiquer quels registres sont modifiés par l'assemblage. Le compilateur peut alors enregistrer et restaurer ces registres si nécessaire.
Vous pouvez lire sur l'utilisation du registre dans certaines conventions d'appel here.
Ceci est très spécifique au compilateur. Cependant, pour un exemple réaliste, prenons gcc sur x86. Le format est le suivant:
asm (assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers (optional)
);
Lorsque la « liste des registres mis à mal », vous dit la compilateur qui enregistre votre code utilise.
est ici un simple code de copie de mémoire:
asm ("movl $count, %%ecx;
up: lodsl;
stosl;
loop up;"
: /* no output */
:"S"(src), "D"(dst) /* input */
:"%ecx", "%eax"); /* clobbered list */
Compte tenu de ces directions, gcc n'utilisera EAX et ECX pour d'autres choses dans le bloc.
Plus d'infos here.
- 1. Quels SDK peuvent être utilisés pour créer une application de cartes hors ligne pour iPad/iPhone?
- 2. Quels paramètres peuvent être utilisés lors de l'intégration d'une vidéo Flash et comment peuvent-ils être accédés via ActionScript?
- 3. Quels langages de script peuvent être utilisés avec l'élément de canevas HTML5?
- 4. x86 assembleur en ligne drapeau
- 5. Quels outils peuvent être utilisés pour aider les tests multi-utilisateurs
- 6. Quels sont les cadres différents qui peuvent être utilisés pour SOAP
- 7. Quels verrous de fichiers peuvent être ignorés ... en règle générale?
- 8. Quels éléments UIKit peuvent être utilisés pour répliquer la grille paginée App Store/iTunes Store?
- 9. Quels types d'exécutables peuvent être décompilés?
- 10. Quels hacks cool peuvent être faits en utilisant sys.settrace?
- 11. Quels types de vidéos peuvent être lus par MediaElement?
- 12. Quand "créer" et "déclarer" peuvent-ils être utilisés comme synonymes?
- 13. guillemets doubles mssql_query PHP ne peuvent pas être utilisés
- 14. Quels sont les bons outils de diff qui sont autonomes et peuvent être utilisés à partir d'un
- 15. Les génériques peuvent-ils être utilisés avec Silverlight?
- 16. Les services déclaratifs peuvent-ils être utilisés dans un thread?
- 17. Les icônes d'élément de travail TFS peuvent-elles être modifiées?
- 18. Les modèles Db_Table peuvent-ils être utilisés dans bootstrap?
- 19. Comment des événements comme CancelEventArgs peuvent-ils être utilisés?
- 20. mb_substr ne peuvent pas être utilisés sur PHP 5.2.6
- 21. Quels jetons peuvent être paramétrés dans AOP préparé des déclarations?
- 22. Quels types de retour peuvent être sérialisés par JQuery AJAX?
- 23. Quels formats de fichiers vidéo peuvent être lus par QTKit?
- 24. Les objets volumineux ne peuvent pas être utilisés en mode de validation automatique
- 25. Les objets volumineux ne peuvent pas être utilisés en mode de validation automatique
- 26. Quels éditeurs wysiwyg peuvent être chargés avec ajax?
- 27. Quels événements javascript peuvent déclencher un popup sans être bloqués?
- 28. Les plug-ins Paint.NET peuvent-ils être utilisés en dehors de Paint.NET?
- 29. Quels modèles de conception sont sous-utilisés?
- 30. Quels outils, etc. peuvent être utilisés pour optimiser une application web PHP fonctionnant sur un serveur Windows 2003 IIS 6