NOP (code)
In computer science, a NOP, no-op, or NOOP is a machine language instruction and its assembly language mnemonic, programming language statement, or computer protocol command that does nothing.
Machine language instructions
Some computer instruction sets include an instruction whose purpose is to not change the state of any of the programmer-accessible registers, status flags, or memory. It often takes a well-defined number of clock cycles to execute. In other instruction sets, there is no explicit NOP instruction, but the assembly language mnemonic NOP represents an instruction which acts as a NOP; e.g., on the SPARC,sethi 0, %g0.A NOP must not access memory, as that could cause a memory fault or page fault.
A NOP is most commonly used for timing purposes, to force memory alignment, to prevent hazards, to occupy a branch delay slot, to render void an existing instruction such as a jump, as a target of an execute instruction, or as a place-holder to be replaced by active instructions later on in program development. In some cases, a NOP can have minor side effects; for example, on the Motorola 68000 series of processors, the NOP opcode causes a synchronization of the pipeline.
Listed below are the NOP instruction for some CPU architectures:
From a hardware design point of view, unmapped areas of a bus are often designed to return zeroes; since the NOP slide behavior is often desirable, it gives a bias to coding it with the all-zeroes opcode.
Code
A function or a sequence of programming language statements is a NOP or null statement if it has no effect. Null statements may be required by the syntax of some languages in certain contexts.Ada
In Ada, thenull statement serves as a NOP. As the syntax forbids that control statements or functions be empty, the null statement must be used to specify that no action is required.C and derivatives
The simplest NOP statement in C is the null statement, which is just a semi-colon in a context requiring a statement.Most C compilers generate no code for null statements, which has historical and performance reasons.
;
An empty block is also a NOP, and may be more legible, but will still have no code generated for it by the compiler.
In some cases, such as the body of a function, a block must be used, but this can be empty. In C, statements cannot be empty—simple statements must end with a
; while compound statements are enclosed in , which does not itself need a following semicolon. Thus in contexts where a statement is grammatically required, some such null statement can be used.The null statement is useless by itself, but it can have a syntactic use in a wider context, e.g., within the context of a loop:
while
alternatively,
while
;
or more tersely:
while ;
The last form might generate a warning with some compilers or compiler options, as a semicolon placed after a parenthesis at the end of a line usually indicates the end of a function call expression.
The above code continues calling the function
getchar until it returns a \n character, essentially fast-forwarding the current reading location of standard input to the beginning of next line.Fortran
In Fortran, theCONTINUE statement is used in some contexts such as the last statement in a DO loop, although it can be used anywhere, and does not have any functionality.JavaScript
The JavaScript language does not have a built-in NOP statement. Many implementations are possible:- Use the
;empty statement or theempty block statement the same way as in the C and derivatives examples; - Use the
undefinedor thenullexpression as a complete statement when the previous methods are not allowed by the syntax.
- Use the
Function.prototypebuilt-in function, that accepts any arguments and returnsundefined; - Use a NOP function available in a third-party library —see below;
- Define a custom NOP function, as in the following example :
AngularJS
The AngularJS framework provides function that performs no operations.jQuery
The jQuery library provides a functionjQuery.noop, which does nothing.Lodash
The Lodash library provides a function_.noop, which returns undefined and does nothing.Pascal
As with C, the ; used by itself can be used as a null statement in Pascal. In fact, due to the specification of the language, in a BEGIN / END block, the semicolon is optional before the END statement, thus a semicolon used there is superfluous.Also, a block consisting of
BEGIN END; may be used as a placeholder to indicate no action, even if placed inside another BEGIN / END block.Python
The Python programming language has apass statement which has no effect when executed and thus serves as a NOP. It is primarily used to ensure correct syntax due to Python's indentation-sensitive syntax; for example the syntax for definition of a class requires an indented block with the class logic, which has to be expressed as pass when it should be empty.Shell scripting (bash, zsh, etc.)
The ':' command is a shell builtin that has similar effect to a "NOP". It is not technically an NOP, as it changes the special parameter $? to 0. It may be considered a synonym for the shell builtin 'true', and its exit status is true.TeX macro language (ConTeXt, LaTeX, etc.)
The TeX typographical system's macro language has the\relax command. It does nothing by itself, but may be used to prevent the immediately preceding command from parsing any subsequent tokens.NOP protocol commands
Many computer protocols, such as telnet, include a NOP command that a client can issue to request a response from the server without requesting any other actions. Such a command can be used to ensure the connection is still alive or that the server is responsive. A NOOP command is part of the following protocols :Unlike the other protocols listed, the IMAP4 NOOP command has a specific purpose—it allows the server to send any pending notifications to the client.
While most telnet or FTP servers respond to a NOOP command with "OK" or "+OK", some programmers have added quirky responses to the client. For example, the
ftpd daemon of MINIX responds to NOOP with the message:200 NOOP to you too!