Articles of x86

Quel est l’intérêt de LEA EAX, ?

LEA EAX, [EAX] J’ai rencontré cette instruction dans un fichier binary compilé avec le compilateur Microsoft C. Cela ne peut clairement pas changer la valeur de EAX. Alors pourquoi est-ce là?

Les architectures x86 actuelles prennent-elles en charge des charges non temporelles (à partir de la mémoire «normale»)?

Je suis au courant de plusieurs questions sur ce sujet, cependant, je n’ai vu aucune réponse claire ni aucune mesure de référence. J’ai donc créé un programme simple qui fonctionne avec deux tableaux d’entiers. Le premier tableau a est très grand (64 Mo) et le second tableau b est petit pour tenir dans le cache […]

Impossible d’écrire dans la mémoire d’écran en C

Je suis très novice en C, c’est mon deuxième langage de programmation de haut niveau après Java. J’ai éliminé la plupart des bases, mais pour une raison quelconque, je ne parviens pas à écrire un seul caractère dans la mémoire de l’écran. Ce programme est compilé en utilisant Turbo C pour DOS sur un Am486-DX4-100 […]

Assemblée – JG / JNLE / JL / JNGE après CMP

Je ne comprends pas les JG/JNLE/JL/JNGE , qui viennent après CMP. Par exemple, si j’ai: CMP al,dl jg label1 Quand al=101; dl =200 al=101; dl =200 . Sur ce que nous demandons au jg ? Est-ce sur al>dl ? ou al-dl>0 ? Même prolbème sur le prochain code: test al,dl jg label1 Je ne comprends […]

Pourquoi un code complexe est-il émis pour diviser un entier signé par une puissance de deux?

Lorsque je comstack ce code avec VC ++ 10: DWORD ran = rand(); return ran / 4096; Je reçois ce déassembly: 299: { 300: DWORD ran = rand(); 00403940 call dword ptr [__imp__rand (4050C0h)] 301: return ran / 4096; 00403946 shr eax,0Ch 302: } 00403949 ret qui est propre et concis et a remplacé une […]

Est-ce qu’en utilisant xor reg, reg donne un avantage sur mov reg, 0?

Il existe deux méthodes bien connues pour définir un registre entier à zéro sur x86. Non plus mov reg, 0 ou xor reg, reg Il y a une opinion selon laquelle la deuxième variante est meilleure puisque la valeur 0 n’est pas stockée dans le code et que cela économise plusieurs octets de code machine […]

Stratégies d’optimisation efficaces sur les compilateurs C ++ modernes

Je travaille sur un code scientifique très critique sur le plan des performances. Une première version du code a été écrite et testée, et maintenant que le profileur est à scope de main, il est temps de commencer les cycles de rasage à partir des points chauds. Il est bien connu que certaines optimisations, par […]

A quoi servent les instructions IN & OUT dans x86?

Je les ai rencontrés dans les instructions IN & OUT en lisant le livre “Understanding Linux Kernel”. J’ai consulté le manuel de référence. 5.1.9 Instructions E / S Ces instructions déplacent les données entre les ports d’E / S du processeur et un registre ou une mémoire. IN Read from a port OUT Write to […]

Quels sont les noms des nouveaux registres de processeurs X86_64?

Où puis-je trouver les noms des nouveaux registres à assembler sur cette architecture? Je me réfère à des registres dans X86 comme EAX, ESP, EBX, etc. Mais je les aimerais en 64 bits. Je ne pense pas qu’ils sont les mêmes que lorsque je démonte mon code C, je reçois des r au lieu de […]

Le dépassement d’entier entraîne-t-il un comportement indéfini en raison d’une corruption de mémoire?

J’ai récemment lu que le dépassement d’entier signé en C et C ++ provoquait un comportement indéfini: Si, lors de l’évaluation d’une expression, le résultat n’est pas défini mathématiquement ou ne figure pas dans la plage des valeurs représentables pour son type, le comportement n’est pas défini. Je suis en train d’essayer de comprendre la […]