2010-10-14 5 views
2

dans l'assembleur en ligne x86 je peux écrire quelque chose comme ceci:ARM assemblage en ligne - spécifier registre individuel comme une contrainte

asm ("cpuid" 
      : "=a" (_eax), 
       "=b" (_ebx), 
       "=c" (_ecx), 
       "=d" (_edx) 
      : "a" (op)); 

donc dans les contraintes de matchin au lieu d'écrire juste « = r » et laisser le compilateur a choisi le registre , Je peux dire quel registre particulier je veux utiliser (= par exemple pour utiliser% eax)

comment puis-je faire cela pour l'assemblage ARM? le livre de cuisine d'assemblage ARM GCC http://www.ethernut.de/en/documents/arm-inline-asm.html états que je peux par exemple utiliser les contraintes « r » pour l'un des registres généraux pour l'un des virgule flottante VFP R0-R15 « w » registres S0-S31

mais comment puis-je contraindre un opérande par exemple exactement à s1? ou à un registre général à usage particulier?

merci!

+0

Quel problème serait-il résoudre sur ARM de savoir exactement quel registre est placé un opérande spécifique? Quelles instructions sur les registres ARM _implicitly_ modify (autres que les opérations de chargement/stockage pré/post-incrément/décrément, pour lesquelles des contraintes spécifiques existent)? Dans cet aspect, ARM et x86 sont assez différents ... ce qui est nécessaire sur x86 n'est pas sur ARM. –

+0

@FrankH. Les appels système? C'est en fait comme ça que j'ai trouvé cette question. – Duc

Répondre

2

Je ne pense pas que gcc for ARM vous permet d'utiliser constraints pour spécifier exactement quel registre utiliser. Cependant, vous pouvez utiliser explicit register variables pour spécifier un registre pour stocker une variable:

register int my_variable asm("r0"); 
Questions connexes