Eninformática, unNOP,no-op oNOOP (pronunciado "no op"; abreviatura deno operation) es una instrucción decódigo máquina y su mnemotécnicolenguaje ensamblador, una declaración delenguaje de programación, o comando de unprotocolo de ordenador que no hace nada.
Algunosconjuntos de instrucciones de ordenador incluyen una instrucción cuyo propósito explícito es no cambiar el estado de ninguno de losregistros,indicadores de estado omemoria. A menudo se necesita un número bien definido deciclos de reloj para 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 memoria ofallo 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.[1]
| Arquitectura CPU | Instrucciónmnemotécnico | Bytes | Código de operación | Notas |
|---|---|---|---|---|
| Familiaintelx86CPU | NOP | 1; 1–9 para i686 y x86-64 | 0x90[2] | 0x90 se traduce comoxchg eax, eax en todos los modos excepto enlong mode, donde el código de operación 0x90 todavía no tiene efecto. Las codificaciones más largas se describen en el manual de Intel. |
| FamiliaIntel8051 /MCS-51 | NOP | 1 | 0x00 | |
| ARM A32 | NOP | 4 | 0x00000000 | Esto se traduce comoandeq r0, r0, r0. La instrucción de ensambladonop probablemente se expandirá amov r0, r0 que está codificada 0xE1A00000 (arquitectura little-endian).[3] |
| ARM T32 (16 bit) | NOP | 2 | 0xb000 | Código de operación paraADD SP, #0: se añade cero al puntero de pila (sin operación). La instrucción de ensambladonop probablemente se expandirá amov r8, r8 que está codificada como 0x46C0.[4] |
| ARM T32 (32 bit) | NOP | 4 | 0xF3AF 8000 | |
| ARM A64 (64 bit) | NOP | 4 | 0xD503201F | |
| AVR | NOP | 2 | 0x0000 | un ciclo de reloj |
| IBM System/360,IBM System/370,IBM System/390,z/Architecture,UNIVAC Series 90 | NOP | 4 | 0x47000000 o 0x470nnnnn o 0x47n0nnnn donde "n" es cualquier valor de 4-bit. | NOP ("No-Op") y NOPR ("No-Op Register") son un subconjunto de las instrucciones "Branch on Condition" o "Branch on Condition Register", respectivamente; ambas versiones tienen dos opciones para generar un NO-OP. En el caso de las instrucciones NOP y NOPR, el primer 0 en el segundo byte es el valor de "máscara", la condición para probar como igual, no igual, alto, bajo, etc. Si la máscara es 0, no se produce bifurcación. En el caso de la instrucción NOPR, el segundo valor en el segundo byte es el registro en el que se bifurca. Si se elige el registro 0, no se produce ninguna bifurcación independientemente del valor de la máscara. Por lo tanto, si cualquiera de los dos valores en el segundo byte es 0, la bifurcación no ocurrirá. En el caso de la instrucción NOP, el segundo valor en el segundo byte es el registro "base" de una combinación de registro base, registro de desplazamiento y dirección de desplazamiento. Si el registro base también es 0, la bifurcación no se toma independientemente del valor del registro de desplazamiento o de la dirección de desplazamiento. |
NOPR | 2 | 0x0700 o 0x070n o 0x07n0 donde "n" es cualquier valor de 4-bit. | ||
| SuperH | NOP | 2 | 0x0009 | |
| MIPS | NOP | 4 | 0x00000000 | Se traduce comosll r0,r0,0, que significa: Desplazamiento lógico de los bits cero del registro 0 a la izquierda y almacena el resultado en el registro 0. Las escrituras en el registro 0 se ignoran; siempre contiene 0. |
| MIPS-X | NOP | 4 | 0x60000019 | (opcode extendido paraadd r0,r0,r0) |
| MIX | NOP | 1 palabra | ± * * * * 0 | Los * los bytes son arbitrarios y pueden ser desde 0 hasta el byte máximo (se requiere que esté en el rango 63-99). MIX usa representación de magnitud-signo. |
| MMIX | SWYM | 4 | 0xFD****** | SWYM se traduce como "Sympathize with your machinery". Los * dígitos pueden ser elegidos arbitrariamente. |
| Familia Motorola 68000 | NOP | 2 | 0x4E71 | Esto sincroniza elpipeline y evita la superposición de instrucciones.[1] |
| Motorola 6809 | NOP | 1 | 0x12 | |
| Familia MOS Technology 65xx (e.g.6502) | NOP | 1 | 0xEA | NOP consume dos ciclos de reloj. Loscódigos de operación no definidos en las versiones deNMOS de la familia 65xx se convirtieron en NOP de diferentes longitudes de instrucción y tiempos de ciclo en el65C02. |
| PowerPC | NOP | 4 | 0x60000000 | (opcode extendido paraori r0,r0,0) |
| Microcontrolador PIC | NOP | 12 bits | 0b000000000000 | MOVW 0,W |
| RISC-V | NOP | 4 | 0x00000013 | ADDI x0, x0, 0 |
| SPARC | NOP | 4 | 0x01000000 | Se traduce comosethi 0, %g0 que pone a cero el registro de ceros%g0 register[5] |
| Z80 | NOP | 1 | 0x00 | Hay algunas otras instrucciones sin ningún efecto (y en el mismo tiempo):LD A, A,LD B, B etc. |
| PDP-10 | JFCL 0, (conventional)JUMP, SETA, SETAI, CAI, TRN, TLN | 1 palabra | 25500******* (octal) | Nunca saltar Nunca saltar, no configurar nada |
| PDP-11 | NOP | 16 bits | 000240 (octal) | No borra ninguno de los códigos de condición |
| VAX | NOP | 1 | 0x01 | El retardo depende del tipo de procesador |
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 slide es 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 lasintaxis de algunos lenguajes en ciertos contextos.
EnAda, la instrucciónnull sirve como NOP.[6] Como la sintaxis prohíbe que las declaraciones o funciones de control estén vacías, la declaraciónnull debe 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:
while(getchar()!='\n'){}
alternativamente,
while(getchar()!='\n');
o concretamente:
while(getchar()!='\n');
(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ónCONTINUE se 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 lenguajeJavaScript no tiene una declaración NOP incorporada. Muchas implementaciones son posibles:
;declaración vacía[7] o la sentencia de bloque vacía{} de la misma forma que en los ejemplos deC y derivados;undefined onull como una declaración completa (unadeclaración de expresión) cuando la sintaxis no permita los métodos anteriores.Las alternativas, en situaciones donde se requiere una función, son:
Function.prototype(), que acepta cualquier argumento y devuelveundefined;[8]constnoop=()=>{};
El frameworkAngularJS proporciona la funciónangular.noop que no realiza operaciones.
La bibliotecajQuery proporciona una funciónjQuery.noop(), que no hace nada.[9]
La bibliotecaLodash proporciona una función_.noop(), que devuelve indefinido y no hace nada.[10]
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 de BEGIN 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ónPython tiene una declaraciónpass que 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ía de Python; por ejemplo, la sintaxis para la definición de unaclase requiere un bloque sangrado con la lógica de la clase, que debe expresarse comopass cuando 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).[11][12][13]
El lenguaje de macros del sistema tipográficoTeX tiene el comando\relax.[14] Este no hace nada por sí mismo, pero puede usarse para evitar lo inmediatamente anterior.[15]
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 servidorestelnet oFTP responden a un comando NOOP con "OK" o "+OK", algunos programadores han agregado respuestas peculiares al cliente. Por ejemplo, el demonioftpd deMINIX responde a NOOP con el mensaje:[16]
200 NOOP to you too!
Los NOP a menudo están involucrados en softwarecrackeado que verifica números de serie, requisitos específicos de hardware o software, presencia o ausencia dedongles de hardware, etc.[cita requerida] Este proceso se lleva a cabo modificandofunciones y subrutinas para 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) .
;) indicating that no statement will be executed, even if JavaScript syntax requires one."\relax. Actually,\relax may tell TeX, 'This is the end of what you've been doing'.» .p