NOP

Eninformática, unNOP,no-opoNOOP(pronunciado "no op"; abreviatura deno operation) es una instrucción decódigo máquinay su mnemotécnicolenguaje ensamblador, una declaración delenguaje de programación, o comando de unprotocolo de ordenadorque no hace nada.
Algunosconjuntos de instruccionesde ordenador incluyen una instrucción cuyo propósito explícito es no cambiar el estado de ninguno de losregistros,indicadores de estadoomemoria. A menudo se necesita un número bien definido deciclos de relojpara ejecutarse. En otros conjuntos de instrucciones, no hay una instrucción NOP explícita, pero el mnemotécnico NOP del lenguaje ensamblador representa una instrucción que actúa como NOP; por ejemplo, en elSPARC,sethi 0, %g0.
Un NOP no debe acceder a la memoria, ya que eso podría causar unafallo de memoriaofallo de página.
Un NOP se usa más comúnmente con fines de temporización, para forzar laalineación de memoria, para evitarpeligro, para ocupar unhueco de retardo, para invalidar una instrucción existente, como un salto, como objetivo de unainstrucción de ejecución, o como marcador de posición para ser reemplazada por instrucciones activas más adelante en el desarrollo del programa (o para reemplazar las instrucciones eliminadas cuando la reorganización sería problemática o requiere mucho tiempo). En algunos casos, un NOP puede tener efectos secundarios menores; por ejemplo, en la serie de procesadoresMotorola 68000, el código de operación NOP provoca una sincronización delpipeline.​
Desde el punto de vista del diseño de hardware, las áreas no mapeadas de un bus a menudo están diseñadas para devolver ceros; dado que el comportamiento deNOP slidees a menudo deseable, da un sesgo para codificarlo con el código de operación de ceros.
Una función o una secuencia de declaraciones de lenguaje de programación es una declaración NOP o nula si no tiene ningún efecto. Las declaraciones nulas pueden ser requeridas por lasintaxisde algunos lenguajes en ciertos contextos.
EnAda, la instrucciónnullsirve como NOP.​ Como la sintaxis prohíbe que las declaraciones o funciones de control estén vacías, la declaraciónnulldebe usarse para especificar que no se requiere ninguna acción. (Por lo tanto, si el programador se olvida de escribir una secuencia de sentencias, el programa no podrá compilar).
La declaración NOP más simple en C es ladeclaración nula, que es solo un punto y coma en un contexto que requiere una declaración.
Un bloque vacío (sentencia compuesta) también es un NOP y puede ser más legible:
En algunos casos, como en el cuerpo de una función, se debe usar un bloque, pero este puede estar vacío. En C, las declaraciones no pueden estar vacías; las declaraciones simples deben terminar con ; (punto y coma) mientras que las sentencias compuestas están encerradas entre {} (llaves), que no necesita un punto y coma a continuación. Por lo tanto, en contextos donde se requiere una declaración gramaticalmente, se puede usar alguna de estas declaraciones nulas.
La declaración nula es inútil por sí misma, pero puede tener un uso sintáctico en un contexto más amplio, por ejemplo, dentro del contexto de un bucle:
alternativamente,
o concretamente:
(Téngase en cuenta que la última forma puede ser confusa y, como tal, genera una advertencia en algunos compiladores u opciones del compilador, ya que el punto y coma generalmente indica una instrucción de llamada de fin de función cuando se coloca después de un paréntesis al final de la línea).
El código anterior continúa llamando a la funcióngetchar()hasta que devuelve un carácter \n (nueva línea), esencialmente avanzando rápidamente la ubicación de lectura actual de la entrada estándar al comienzo de la siguiente línea.
EnFortran, la declaraciónCONTINUEse usa en algunos contextos, como la última declaración en un bucle DO, aunque se puede usar en cualquier lugar y no tiene ninguna funcionalidad.
El lenguajeJavaScriptno tiene una declaración NOP incorporada. Muchas implementaciones son posibles:
Las alternativas, en situaciones donde se requiere una función, son:
El frameworkAngularJSproporciona la funciónangular.noopque no realiza operaciones.
La bibliotecajQueryproporciona una funciónjQuery.noop(), que no hace nada.​
La bibliotecaLodashproporciona una función_.noop(), que devuelve indefinido y no hace nada.​
Al igual que con C, el ; usado por sí mismo se puede usar como una declaración nula enPascal. De hecho, debido a la especificación del idioma, en un bloque BEGIN / END, el punto y coma es opcional antes de la instrucción END, por lo que el punto y coma utilizado utilizado ahí es superfluo.
Además, un bloque que consta deBEGIN END;se puede usar como marcador de posición para indicar que no se realiza ninguna acción, incluso si se coloca dentro de otro bloque BEGIN/END.
El lenguaje de programaciónPythontiene una declaraciónpassque no tiene efecto cuando se ejecuta y, por lo tanto, sirve como un NOP. Se utiliza principalmente para garantizar la sintaxis correcta debido a lasintaxis sensible a la sangríade Python; por ejemplo, la sintaxis para la definición de unaclaserequiere un bloque sangrado con la lógica de la clase, que debe expresarse comopasscuando debería estar vacío.
El comando ':' [dos puntos] es un comando integrado de shell que tiene un efecto similar a un "NOP" (una operación de no hacer nada). No es técnicamente un NOP, ya que cambia el parámetro especial $? (estado de salida del último comando) a 0. Se puede considerar un sinónimo del shell incorporado 'verdadero', y su estado de salida es verdadero (0).​​​
El lenguaje de macros del sistema tipográficoTeXtiene el comando\relax.​ Este no hace nada por sí mismo, pero puede usarse para evitar lo inmediatamente anterior.​
Muchosprotocolos de comunicaciones, comotelnet, incluyen un comando NOP que un cliente puede emitir para solicitar una respuesta del servidor sin solicitar ninguna otra acción. Dicho comando se puede usar para unkeepalive(asegurarse de que la conexión aún esté activa) o que el servidor responda. Un comando NOOP es parte de los siguientes protocolos ("esta es una lista parcial"):
Tenga en cuenta que, a diferencia de los otros protocolos enumerados, el comando IMAP4 NOOP tiene un propósito específico: permite que el servidor envíe cualquier notificación pendiente al cliente.
Si bien la mayoría de los servidorestelnetoFTPresponden a un comando NOOP con "OK" o "+OK", algunos programadores han agregado respuestas peculiares al cliente. Por ejemplo, el demonioftpddeMINIXresponde a NOOP con el mensaje:​
Los NOP a menudo están involucrados en softwarecrackeadoque verifica números de serie, requisitos específicos de hardware o software, presencia o ausencia dedonglesde hardware, etc.Este proceso se lleva a cabo modificandofunciones y subrutinaspara omitir las comprobaciones de seguridad y, en su lugar, simplemente devolver el valor esperado que se está comprobando. Debido a que la mayoría de las instrucciones en la rutina de verificación de seguridad no se usarán, estas se reemplazarán con NOP, eliminando así la funcionalidad de seguridad del software sin alterar el posicionamiento de todo lo que sigue en el binario.
El código de operación NOP se puede usar para formar unaslice NOP, que permite que el código se ejecute cuando el valor exacto del puntero de instrucción es indeterminado (por ejemplo, cuando un desbordamiento de búfer hace que se sobrescriba la dirección de retorno de una función en la pila) .
.p