2010-06-14 8 views
3

Je me demandais comment intégrer une utilisation de fbstp sur une architecture I86 32 bits. J'ai essayé quelque chose commeAssemblage en ligne de l'instruction fbstp x86

int main() 
{ 
    double foo = 100.0; 

    long bar = 0; 

    asm("pushl %1; fbstp %0" 
     : "=m"(bar) 
     : "r"(foo) 
     ); 

    ... 

Mais la barre est inchangée. J'ai essayé de lire tout ce que je peux trouver à ce sujet, mais la plupart des exemples simplement faire des choses comme ajouter deux entiers ensemble. Je ne trouve rien qui parle de pousser des opérandes sur la pile et ce que je devrais faire quand une instruction comme fbstp écrit en mémoire 80 bits de données (c'est-à-dire quel type de C utiliser) et comment le spécifier dans la syntaxe asm .

Toujours sur x86-64, il semble y avoir un pushq et aucun pushl mais fbstp existe toujours, contrairement à fbstq. Y a-t-il une autre magie pour 64 bits.

+0

Je ne suis pas expert, mais pushl pousse une valeur à l'utilisateur pile tout pops fbstp de la pile à virgule flottante, alors ne devriez-vous pas d'abord faire un fld och fild au lieu d'un push? – Olof

Répondre

Questions connexes