Articles of x86

Quelle est la bonne façon d’obtenir (-1) ^ n?

De nombreux algorithmes nécessitent de calculer (-1)^n (les deux entiers), généralement en tant que facteur dans une série. C’est-à-dire un facteur qui est -1 pour n impair et 1 pour même n. Dans un environnement C ++, on voit souvent: #include #include int main(){ int n = 13; std::cout << std::pow(-1, n) << std::endl; } […]

Pourquoi gcc est-il autorisé à charger de manière spéculative à partir d’une structure?

Exemple montrant l’optimisation gcc et le code utilisateur pouvant être défaillant La fonction ‘foo’ dans l’extrait de code ci-dessous ne chargera qu’un des membres de la structure A ou B; eh bien au moins c’est l’intention du code non optimisé. typedef struct { int A; int B; } Pair; int foo(const Pair *P, int c) […]

La sortie d’assemblage de GCC d’un programme vide sur x86, win32

J’écris des programmes vides pour contrarier l’enfer des codeurs stackoverflow, PAS. Je ne fais qu’explorer la chaîne d’outils gnu. Maintenant, ce qui suit pourrait être trop profond pour moi, mais pour continuer la saga de programme vide, j’ai commencé à examiner la sortie du compilateur C, le contenu consommé par GNU. gcc version 4.4.0 (TDM-1 […]

Quelle est la fonction des instructions push / pop utilisées sur les registres dans un assemblage x86?

Lors de la lecture de l’assembleur, je rencontre souvent des gens qui écrivent qu’ils appuient sur un certain registre du processeur et le réapparaissent plus tard pour restaurer son état antérieur. Comment pouvez-vous pousser un registre? Où est-il poussé? Pourquoi est-ce nécessaire? Est-ce que cela se résume à une seule instruction de processeur ou est-ce […]

Fonction de comparaison de nombre entier efficace

La fonction de compare est une fonction qui prend deux arguments a et b et renvoie un entier décrivant leur ordre. Si a est inférieur à b , le résultat est un nombre entier négatif. Si a est plus grand que b , le résultat est un nombre entier positif. Sinon, a et b sont […]

L’utilisation du double est-elle plus rapide que le flottement?

Les valeurs doubles stockent une plus grande précision et sont deux fois plus grandes qu’un float, mais les processeurs Intel sont-ils optimisés pour les flottants? Autrement dit, les opérations doubles sont-elles aussi rapides ou plus rapides que les opérations flottantes pour +, -, * et /? La réponse change-t-elle pour les architectures 64 bits?

Pourquoi std :: fill (0) est-il plus lent que std :: fill (1)?

J’ai observé sur un système que std::fill sur un grand std::vector était significativement et systématiquement plus lent lors de la définition d’une valeur constante 0 par rapport à une valeur constante 1 ou une valeur dynamic: 5,8 Gb / s contre 7,5 Gb / s Cependant, les résultats sont différents pour les tailles de données […]

Pourquoi laisse-t-on «mov esp, ebp» dans l’assemblage x86?

On dit que l’instruction de leave est la même que: mov esp,ebp pop ebp Mais qu’est-ce que mov esp,ebp ici pour? Cela ne me semble pas valable …

Pourquoi n’y a-t-il pas un registre contenant les octets supérieurs d’EAX?

%AX = (%AH + %AL) Alors pourquoi pas %EAX = (%SOME_REGISTER + %AX) pour certains registres %SOME_REGISTER ?

Comment fonctionne la pagination x86?

Cette question est destinée à combler le vide de bonnes informations gratuites sur le sujet. Je crois qu’une bonne réponse s’inscrira dans une grande réponse SO ou du moins dans quelques réponses. L’objective principal est de donner aux débutants complets juste assez d’informations pour qu’ils puissent prendre le manuel eux-mêmes et être capables de comprendre […]