【发布时间】:2014-06-23 06:27:23
【问题描述】:
我从http://en.wikipedia.org/wiki/NOP 中重新定义了定义,但我仍然需要一个更简单的定义。
我偶然发现了一段代码,但我不知道它到底是做什么的:
switch (Something)
{
case this_one:
asm ("nop");
break;
case other_one:
asm ("nop");
break;
default:
asm ("nop");
break;
}
【问题讨论】:
-
asm插入内联汇编,nop是一个什么都不做的指令。代码示例没有任何用处。你对哪一部分有困难? -
您的代码在技术上“什么都不做”,如果不将其与其他代码位放在上下文中,就很难说出它为什么存在。但是,它可能被用于优化目的——例如保持内存对齐。当内存“对齐”为 2 个块大小的幂时,某些处理器的性能会更好。
-
形而上学没有“无”这样的东西。 NOP 或无操作意味着 CPU(最终)会浪费时钟周期。它至少必须对操作进行解码并注意到它必须获取一条新指令。上下文中的 Nothing 表示“程序计数器”寄存器已更改; 可能没有其他副作用发生。
-
@AlexandruCimpanu 有几个目的,下面的答案中提到了一些。还有一个没有提到的是在连续指令之间插入延迟 > epsilon(如果代码与硬件一起使用,可能需要)
-
我个人经常使用 asm NOP 来调试代码,当代码中有一个地方我想放置一个断点时。