Aller au contenu

NOP

Un article de Wikipédia, l'encyclopédie libre.

NOP, mnémonique pour No Operation (en français : « aucune opération »), est une instruction assembleur disponible pour divers processeurs (par exemple 6502, famille 68000, famille x86, la plupart des processeurs RISC).

Description

[modifier | modifier le code]

L'instruction NOP est une instruction de base de beaucoup de processeurs, qui consiste simplement à ne rien faire. L'utilité principale de cette instruction est d'attendre un cycle, par exemple pour permettre à une instruction précédente dans le pipeline de se terminer et ainsi pouvoir utiliser son résultat, ou bien attendre la résolution d'un branchement.

Cette instruction est également utilisée dans les processeurs VLIW afin de combler les slots vides d'un mot d'instruction (ou bundle).

Il est fréquent, notamment dans certaines familles de processeurs RISC, que ce mnémonique soit une pseudo-instruction, que l'assembleur remplace par une instruction équivalente. Par exemple, l'instruction OR r0, r0, r0 n'aura aucun effet sur la valeur de r0 (un OU logique avec la même valeur), ne dure qu'un cycle, et sera donc équivalente à un NOP. Dans certaines architectures dont le registre r0 est câblé à la valeur zéro, la pseudo-instruction NOP en tire parti et effectue une affectation dans ce registre, ce qui n'a donc aucun effet.

L'instruction NOP est historiquement un alias de l'instruction XCHG A, A du 8080, puis XCHG AX, AX qui en échangeant la valeur d'un registre avec lui même, fonctionnellement ne fait rien. Elle a dû être implémentée sur le x64 en tant que vraie instruction qui ne fait rien au vu de la spécificité de cette architecture qui lors d'opérations sur les registres en 32bits, annule les 32bits hauts des registres 64bits. Un XCHG EAX, EAX annulerait les 32bits hauts de RAX, et aurait donc une action.

L'instruction NOP ne fait rien si ce n'est prendre un cycle processeur, incrémenter le pointeur d'instruction (EIP) et s'insèrer dans le flot d'instructions sans rien changer au contexte du processeur.

Opcode Instruction Description
90 NOP Ne fait aucune opération.

Le rôle d'une telle instruction est de remplir un espace prévu pour du code mais non utilisé afin d'aligner le code sur un multiple d'octets permettant un accès plus rapide à la mémoire. Elle est utilisée aussi pour supprimer l'exécution de certaines instructions.

Elle est codée sur un seul octet afin de pouvoir remplir toute taille de zone mémoire, mais de nombreuses architectures permettent de produire des NOP multi-octets.

Aucun drapeau du registre EFLAGS n'est affecté par cette instruction.

Exceptions produites

[modifier | modifier le code]

Cette instruction ne produit aucune exception et ceci dans aucun des trois modes de fonctionnement du processeur x86 (Mode réel, Mode virtuel 8086, Mode protégé).

Articles connexes

[modifier | modifier le code]