Je suis curieux de cela, disons que j'ai:
00000000001 90 nop
00000000002 90 nop
00000000003 90 nop
Est-il exécuté exactement de la même manière?
00000000001 0F1F00 nop dword [ds:rax]
Quel effet aurait le deuxième exemple par rapport au premier?
multi byte nop
, se présente pas mal de résultats.Réponses:
Cela dépend de l'architecture de la machine. Le KA-10 classique (pdp-10) avait beaucoup de codes nop, probablement une conséquence de son jeu d'instructions très régulier et du fait qu'il a été implémenté par des composants discrets, pas par un microcode. Certains NOP ont fait référence à la mémoire, certains étaient des tests de sauts qui n'ont jamais sauté, mais ont néanmoins testé la condition qui aurait pu provoquer un saut, etc. "JFCL 0", a été annoncé dans le manuel comme le nop le plus rapide.
la source
Il semble que le deuxième exemple devrait s'exécuter plus rapidement que le premier. Dans le premier exemple, trois instructions distinctes seront exécutées. Dans le second, une seule instruction. Les NOP multi-octets sont destinés à être utilisés pour des "conseils" CPU (exactement comment et quand est apparemment confidentiel ). Ils peuvent être utiles à des fins d'alignement (pour démarrer une boucle étroite sur une ligne de cache), mais ils n'ont actuellement aucune autre utilisation. Il n'est pas clair si le CPU évalue réellement les arguments, il n'est donc pas possible de dire s'il augmente le temps de décodage des instructions ou encourt une pénalité d'accès à la mémoire. Quelqu'un avec un bon ICE veut tester l'un d'eux et voir quelles adresses apparaissent sur une trace de bus?
la source