J'essaie de comprendre l'optimisation de l'assemblage x64
qui est faite par le compilateur.Que fait "nop dword ptr [rax + rax]" instruction d'assemblage x64 faire?
J'ai compilé un petit projet C++ comme Release
construit avec Visual Studio 2008 SP1
IDE sur Windows 8.1.
Et l'une des lignes contenait le code assembleur suivant:
B8 31 00 00 00 mov eax,31h
0F 1F 44 00 00 nop dword ptr [rax+rax]
Et voici une capture d'écran:
Pour autant que je sais nop
par lui-même est do nothing
, mais je Je ne l'ai jamais vu avec un opérande comme ça.
Quelqu'un peut-il expliquer ce qu'il fait?
Il s'agit d'un NOP multi-octets. La référence du jeu d'instructions explique ceci: http://www.felixcloutier.com/x86/NOP.html –
@MichaelPetch: Merci. Juste curieux, quel est le but de l'ajout de cette instruction dans une version 'Release'? – c00000fd
Habituellement pour l'alignement. souvent vous le verrez avant les boucles pour les aligner sur une limite de 16 ou 32 octets (16 est souvent un défaut). Cela peut améliorer les performances de la boucle. –