Bonsoir,
Mon programme, écrit en C, fait ceci :
Le GROS soucis, vient de la ligne : resultats[i] = ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for (i = 0; i < 10; i++) { asm volatile("rdtsc;"); asm volatile("mov %%eax, %0;" : "=m"(l_MSR)); asm volatile("mov %%edx, %0;" : "=m"(h_MSR)); resultats[i] = (h_MSR << 32) | l_MSR; }
La variable i est stockée dans le registre EAX (j'ai debug après avoir vu qu'il y avait une erreur).
Dès lors, le stockage dans le tableau resultats plante vu que l'instruction rdtsc modifie le registre eax.
Ainsi, ma question est la suivante : Comment faire pour dire au compilateur de ne pas utiliser les registres eax et edx (modifiés par rdtsc) et ce pour la portion de code qui m'intéresse ? (à savoir la boucle for)
J'avais tenté de sauvegardé les registres sur la pile... puis de dépiler après mes instructions ASM. Mais étant donné que mon code assembleur utilise les variables stockés sur la pile..., cela provoque des erreurs par la suite. De plus, avec cette technique, je risque d'écraser des données importantes. Du coup, j'ai tout de suite abandonné cette idée.
Un grand merci
Partager