nop

No Operation

NOP

Does nothing (alias for XCHG EAX, EAX).

Details

Performs no operation and consumes one clock cycle. The one-byte NOP (0x90) is functionally equivalent to XCHG EAX, EAX. Longer NOP sequences (multi-byte) are available on newer processors for code padding without pipeline stalls. No flags are modified.

Pseudocode Operation

// No operation (pipeline advance only)

Example

NOP

Encoding

Binary Layout
90
+0
 
Format Legacy
Opcode NP 90
Extension Base

Operands

Reference (Intel® SDM)

Instruction Forms

Opcode Instruction Op/En 64/32-bit Mode CPUID Description
NP 90 NOP ZO Valid Valid One byte no-operation instruction.
NP 0F 1F /0 NOP r/m16 M Valid Valid Multi-byte no-operation instruction.
NP 0F 1F /0 NOP r/m32 M Valid Valid Multi-byte no-operation instruction.

Description

This instruction performs no operation. It is a one-byte or multi-byte NOP that takes up space in the instruction stream but does not impact machine context, except for the EIP register. The multi-byte form of NOP is available on processors with model encoding: • CPUID.01H:EAX[Bytes 11:8] = 0110B or 1111B The multi-byte NOP instruction does not alter the content of a register and will not issue a memory operation. The instruction’s operation is the same in non-64-bit modes and 64-bit mode.

Operation

The one-byte NOP instruction is an alias mnemonic for the XCHG (E)AX, (E)AX instruction.
The multi-byte NOP instruction performs no operation on supported processors and generates undefined opcode
exception on processors that do not support the multi-byte NOP instruction.
The memory operand form of the instruction allows software to create a byte sequence of “no operation” as one
instruction. For situations where multiple-byte NOPs are needed, the recommended operations (32-bit mode and
64-bit mode) are:

Table 4-12. Recommended Multi-Byte Sequence of NOP Instruction

Length          Assembly                                               Byte Sequence
2 bytes         66 NOP                                             66 90H
3 bytes         NOP DWORD ptr [EAX]                                    0F 1F 00H
4 bytes         NOP DWORD ptr [EAX + 00H]                               0F 1F 40 00H
5 bytes         NOP DWORD ptr [EAX + EAX*1 + 00H]                        0F 1F 44 00 00H
6 bytes         66 NOP DWORD ptr [EAX + EAX*1 + 00H]                    66 0F 1F 44 00 00H
7 bytes         NOP DWORD ptr [EAX + 00000000H]                         0F 1F 80 00 00 00 00H
8 bytes         NOP DWORD ptr [EAX + EAX*1 + 00000000H]                  0F 1F 84 00 00 00 00 00H
9 bytes         66 NOP DWORD ptr [EAX + EAX*1 + 00000000H]              66 0F 1F 84 00 00 00 00 00H

Flags Affected

None. Exceptions (All Operating Modes) #UD If the LOCK prefix is used. NOP—No Operation Vol. 2B 4-160