lea 0x0(%esi),%esi是什么意思

时间:2012-05-08 20:05:34

标签: assembly disassembly

lea    0x0(%esi),%esi

我相信它没有结果,只是填补空间。是这种情况吗?

1 个答案:

答案 0 :(得分:17)

它是一个NOP。它添加了%esi和0x0的内容,并将结果放在%esi中。有人要么拥有笨拙的代码生成器,要么需要填充N个字节,其中该指令的大小正确。

LEA指令执行速度非常快(通常为1个时钟),所以这比N nops好很多。

x86虽然古怪,却有各种各样的指令,除了填充不同的字节数外,它们实际上没有做任何事情。您可能会发现其他不同长度的无用指令。您倾向于找到长但在1个时钟或更短时间内执行的指令。

AMD x86-64手册对于NOP应该使用什么有一些建议;他们建议其中一个前缀操作码在实际的NOP IIRC之前重复多次。这种前缀操作码被指令获取引擎非常快地消耗;主要是它们的成本隐藏在指令预取中,而不是指令执行时间。