NOP
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.
x86
[modifier | modifier le code]L'instruction NOP est une instruction de base des processeurs x86. Elle fut implémentée sur le premier processeur de cette famille, le 8086.
L'instruction NOP ne fait rien si ce n'est incrémenter le pointeur d'instruction (EIP) et s'insère dans le flot d'instructions sans rien changer au contexte du processeur. NOP est un alias pour l'instruction XCHG (E)AX, (E)AX.
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'éviter de décaler le restant du code, ou bien 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.
Drapeaux affectés
[modifier | modifier le code]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é).