lea 0x0(%esi),%esi
我相信它没有结果,只是在填补空间。是这样吗
最佳答案
它的NOP。它将%esi和0x0的内容相加,并将结果放入%esi中。有人要么笨拙的代码生成器,要么需要填充N个字节,而该指令的大小正确。
LEA指令的执行速度非常快(通常为1个时钟),因此这比N点更好。
x86是如此古怪,它具有各种指令,这些指令实际上除了填充不同数量的字节外什么也不做。您可能会发现其他长度不一的无用指令。您倾向于找到很长但在1个时钟或更短时间内执行的指令。
AMD x86-64手册对NOP应使用的内容提出了一些建议。他们建议其中一个前缀操作码在实际的NOP IIRC之前重复多次。这样的前缀操作码被指令提取引擎很快消耗掉了。大多数情况下,它们的成本隐藏在指令的预取中,而不隐藏在指令的执行时间中。
关于assembly - lea 0x0(%esi),%esi是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10505690/