<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=NOP</id>
	<title>NOP - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=NOP"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=NOP&amp;action=history"/>
	<updated>2026-07-15T19:09:20Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=NOP&amp;diff=713268&amp;oldid=prev</id>
		<title>imported&gt;Cewbot：​修正失效的章節標題：2013-01-21T03:40:31Z #縮進→Python#縮排</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=NOP&amp;diff=713268&amp;oldid=prev"/>
		<updated>2020-11-01T15:54:53Z</updated>

		<summary type="html">&lt;p&gt;修正失效的章節標題：&lt;a href=&quot;/wiki/Special:%E5%B7%AE%E5%BC%82/24634260&quot; title=&quot;Special:差异/24634260&quot;&gt;2013-01-21T03:40:31Z&lt;/a&gt; #縮進→&lt;a href=&quot;/wiki/Python#縮排&quot; title=&quot;Python&quot;&gt;Python#縮排&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
[[计算机科学]]中，&amp;#039;&amp;#039;&amp;#039;NOP&amp;#039;&amp;#039;&amp;#039;或&amp;#039;&amp;#039;&amp;#039;NOOP&amp;#039;&amp;#039;&amp;#039;（&amp;#039;&amp;#039;&amp;#039;No Operation&amp;#039;&amp;#039;&amp;#039;或&amp;#039;&amp;#039;&amp;#039;No Operation Performed&amp;#039;&amp;#039;&amp;#039;的缩写，意为&amp;#039;&amp;#039;&amp;#039;无操作&amp;#039;&amp;#039;&amp;#039;）是[[汇编语言]]的一个[[指令]]，一系列编程语句，或[[网络传输协议]]中的表示不做任何有效操作的命令。&lt;br /&gt;
&lt;br /&gt;
==NOP机器指令==&lt;br /&gt;
有的计算机[[指令集]]包含一条指令，其主要目的是不改变任何程序可访问的[[寄存器]]，[[处理器状态标志]]或[[主存]]，而且可能需要特定的时钟周期来执行。在其它指令集中，NOP是用执行一条具有操作数，具有相同效果的指令来模拟的（例如[[SPARC]]处理器推荐使用&amp;lt;code&amp;gt;sethi 0, %g0&amp;lt;/code&amp;gt;模拟NOP）。&lt;br /&gt;
&lt;br /&gt;
NOP指令通常用于控制时序的目的，强制[[内存对齐]]，防止[[流水线灾难]]，占据[[分支指令延迟]]），或是作为占位符以供程序的改善（或替代被移除的指令）。在某些情况中，NOP指令会产生副作用；例如在[[摩托罗拉 68000]]处理器中，NOP操作码会产生[[流水线]]同步&amp;lt;ref&amp;gt;{{cite web|url=http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf|title=Motorola 68000 Programmer&amp;#039;s Reference Manual|accessdate=2010-09-18|archive-date=2015-09-24|archive-url=https://web.archive.org/web/20150924015505/http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
下表显示了部分CPU架构上NOP指令的特征：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! CPU架构&lt;br /&gt;
! [[助憶碼]]&lt;br /&gt;
! [[字节|字长]]&lt;br /&gt;
! [[操作码]]&lt;br /&gt;
! 备注&lt;br /&gt;
|-&lt;br /&gt;
| [[Intel]][[x86]]系列[[CPU]]&lt;br /&gt;
| &amp;lt;code&amp;gt;NOP&amp;lt;/code&amp;gt;&lt;br /&gt;
| 1; i686中为1–9&lt;br /&gt;
| [[十六进制|0x]]90; 0x0f 0x1f &amp;lt;ref&amp;gt;{{cite web|url=http://developer.intel.com/design/pentiumii/manuals/243191.htm|title=Intel Architecture Software Developer&amp;#039;s Manual, Volume 2: Instruction Set Reference Manual|accessdate=2007-07-13|archive-url=https://web.archive.org/web/20070702003233/http://developer.intel.com/design/PentiumII/manuals/243191.htm|archive-date=2007-07-02|dead-url=yes}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| x86 CPU上的NOP指令实质上是&amp;#039;&amp;#039;XCHG EAX, EAX&amp;#039;&amp;#039;（操作码同为0x90）--无任何作用的指令。&lt;br /&gt;
|-&lt;br /&gt;
| [[Intel]] [[8051]] / [[MCS-51]]系列&lt;br /&gt;
| &amp;lt;code&amp;gt;NOP&amp;lt;/code&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
| 0x00&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[MIPS]]&lt;br /&gt;
| &amp;lt;code&amp;gt;NOP&amp;lt;/code&amp;gt;&lt;br /&gt;
| 4&lt;br /&gt;
| 0x00000000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[MOS科技 65xx]]&lt;br /&gt;
| &amp;lt;code&amp;gt;NOP&amp;lt;/code&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
| 0xea&lt;br /&gt;
| [[65C02]]处理器发布时，之前多数的[[无效指令]]都被定义成了具有不同字长和需时的NOP指令。&lt;br /&gt;
|-&lt;br /&gt;
| [[PowerPC]]&lt;br /&gt;
| &amp;lt;code&amp;gt;NOP&amp;lt;/code&amp;gt;&lt;br /&gt;
| 4&lt;br /&gt;
| 0x60000000 (&amp;lt;code&amp;gt;ori r0,r0,0&amp;lt;/code&amp;gt;的扩展操作码)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==NOP代码==&lt;br /&gt;
NOP有时可以描述函数或一系列编程语句的作用，若部分没有作用（也可以称为[[冗余代码]]）。常见的[[编译器优化]]的作用就包括检测和去除这样的代码。&lt;br /&gt;
&lt;br /&gt;
下面是一个起NOP作用的C语言语句的例子（评判标准在于语句是否影响程序输出，而非[[编译器]]是否为语句产生代码）：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
     i+1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
（该语句执行了一个加法，但结果被丢弃。）&lt;br /&gt;
&lt;br /&gt;
C语言中最简单的NOP块被称为&amp;#039;&amp;#039;空语句&amp;#039;&amp;#039;；其只包括一个分号。（标准没有要求编译器在这个例子中生成NOP指令；通常这个语句会直接为编译器所忽略。）&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
   ;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
虽然空语句自身没有用处，但在某些情况下可以启动占位符的作用，例如在循环中：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
   while (ReadChar() != &amp;#039;\n&amp;#039;)&lt;br /&gt;
      ;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上代码一直调用&amp;lt;code&amp;gt;ReadChar&amp;lt;/code&amp;gt;函数，直到函数返回一个\n（NL，新行）字符。&lt;br /&gt;
&lt;br /&gt;
[[Python]]中的&amp;lt;code&amp;gt;pass&amp;lt;/code&amp;gt;语句不会产生作用，可以作为NOP使用。它的主要目的是保证语法正确，由于Python的[[Python#縮排|缩进敏感语法]]。&lt;br /&gt;
&lt;br /&gt;
==NOP协议命令==&lt;br /&gt;
许多[[网络传输协议|协议]]，比如[[telnet]]，包含NOP指令，该指令允许客户端可以在不会引起其它操作的情况下向服务器请求回应。NOP指令可以用于检测连接是否断开，或服务器是否可以响应操作。下列协议中包含NOOP指令（&amp;#039;&amp;#039;不完全列表&amp;#039;&amp;#039;）：&lt;br /&gt;
*[[telnet]]&lt;br /&gt;
*[[FTP]]&lt;br /&gt;
*[[SMTP]]&lt;br /&gt;
*[[X Window核心协议|X11]]&lt;br /&gt;
*[[POP3]]&lt;br /&gt;
*[[NNTP]]&lt;br /&gt;
*[[finger]]&lt;br /&gt;
*[[IMAP4]]&lt;br /&gt;
*[[BitTorrent]]&lt;br /&gt;
注意：与其它协议不同，IMAP4的NOP命令允许客户端响应服务器发送由其它客户端反应的操作信息。&lt;br /&gt;
&lt;br /&gt;
虽然大多数telnet和FTP服务器用&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;或&amp;#039;&amp;#039;+OK&amp;#039;&amp;#039;回应NOOP指令，有的程序员在对客户端的回应中加入了特别的内容。例如[[MINIX]]的&amp;lt;code&amp;gt;ftpd&amp;lt;/code&amp;gt;[[守护进程]]会以以下消息回应NOOP：&amp;lt;ref name=&amp;quot;minix_ftpd&amp;quot;&amp;gt;{{cite web|url=http://www.google.com/codesearch/p?hl=en#EhJUfTR8NNs/src/commands/ftpd/ftpd.c&amp;amp;q=%22NOOP%20to%20you%20too!%22%20lang:C&amp;amp;exact_package=http://www.minix3.org/previous-versions/Intel-1.7.3/new34.tar|title=ftpd.c|accessdate=2009-01-22|archive-date=2009-01-16|archive-url=https://web.archive.org/web/20090116193049/http://google.com/codesearch/p?hl=en#EhJUfTR8NNs/src/commands/ftpd/ftpd.c&amp;amp;q=%22NOOP%20to%20you%20too!%22%20lang:C&amp;amp;exact_package=http://www.minix3.org/previous-versions/Intel-1.7.3/new34.tar|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
 [[FTP|200]] NOOP to you too!&lt;br /&gt;
&lt;br /&gt;
==破解==&lt;br /&gt;
NOP通常在[[软件破解|破解]]软件时有特殊用途，例如检查序列号，特定硬件或软件需求，[[加密狗]]等的软件。这是通过更改函数和/或[[子程序]]以跳过安全检查，直接返回期望的检测值实现的。由于大多数安全检查子程序中的指令会被废弃，它们会被NOP所代替。&lt;br /&gt;
&lt;br /&gt;
==安全问题==&lt;br /&gt;
NOP操作码可以被用于组成一个[[NOP slide]]，允许在指令指针值未定义时执行代码，例如[[缓存溢出]]导致栈上的函数返回地址被更改。&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[[计算机系统结构]]&lt;br /&gt;
*[[HLT]]&lt;br /&gt;
*[[指令集]]&lt;br /&gt;
*[[x86]]&lt;br /&gt;
*[[恒等函数]]，[[函数式编程语言]]中NOOP的等效函数&lt;br /&gt;
*[[xyzzy]]，一个有时用来代替NOOP的命令&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:机器码]]&lt;br /&gt;
[[Category:X86架構]]&lt;br /&gt;
[[Category:无]]&lt;br /&gt;
[[Category:X86指令]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Cewbot</name></author>
	</entry>
</feed>