NOP

From Wikipedia, the free encyclopedia

In computer science NOP or NOOP (short for No OPeration) is an assembly language instruction, sequence of programming language statements, or computer protocol command that effectively does nothing at all.

Contents

[edit] NOP machine instruction

Some computer instruction sets include an instruction whose explicit purpose is not to change the state of any of the programmer accessible registers, status flags or memory, and which may require a specific number of clock cycles to execute. In other instruction sets a NOP has to be simulated by executing an instruction having operands that cause the same effect (e.g., on the SPARC processor the instruction sethi 0,%g0 is the recommended solution).

NOPs are most commonly used for timing purposes, to force memory alignment, to prevent hazards, to occupy a branch delay slot, or as a "place-holder" to be replaced by active instructions later on in program development (or to replace removed instructions when re-factoring would-be problematic or time-consuming code).

The characteristics of the NOP instruction for the Intel x86 CPU family are:

[edit] NOP code

NOP is sometimes used as a description for the action performed by a function or a sequence of programming language statements. If the function or code has no effect, then it is sometimes called a NOP or NOOP (it might also be called redundant code). A common compiler optimization is the detection and removal of this kind of code.

The following is an example of a single C statement that behaves like a NOP (the issue is whether the statement affects program output, not whether or not a compiler generates any code for this statement):

    i+1;

(This statement performs an addition and discards the result.)

The simplest possible statement in C that behaves like a NOP is the so called null statement; which is just a semi-colon in a context requiring a statement. (A compiler is not required to generate a NOP instruction in this case; typically no instructions whatsoever would be generated.)

  ;

The null statement is useless by itself, but can have a syntactic use in a wider context, e.g., within the context of a loop:

  while (ReadChar() != '\n') ;

The above code continues calling the function ReadChar until it returns a \n (newline) character.

[edit] 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 (this is a partial list):

Note that unlike the other protocols listed, the IMAP4 NOP command has a specific purpose which is to allow the client to request that the server send unsolicited information reflecting the actions of other clients.

While most telnet servers respond to a NOOP command with "OK" or "+OK", some programmers have added quirky responses to noop. Some examples:

noop : OK, but why? :)
noop : Well, noop to you too!

[edit] Cracking

NOPs are often involved when cracking software that checks for serial numbers, specific hardware or software requirements, presence or absence of hardware dongles, etc. This is accomplished by altering functions and subroutines to by-pass security checks and instead simply return the expected value being checked for.

[edit] See also

[edit] References