enter

push ebp
mov  ebp, esp
sub  esp, imm

指示?有性能差异吗?如果是这样,哪个更快?为什么编译器总是使用后者?

leave
mov  esp, ebp
pop  ebp

说明。

最佳答案

在性能上存在差异,尤其是对于enter。在现代处理器上,这会解码到大约10到20 µopop,而三个指令序列大约是4到6,具体取决于架构。有关详细信息,请查询Agner Fog's指令表。

另外,与三个指令序列的3个时钟相关性链相比,enter指令通常具有相当高的延迟,例如core2上有8个时钟。

此外,这三个指令序列可以由编译器扩展,以用于调度目的,这当然取决于周围的代码,以允许指令的更多并行执行。

关于assembly - “enter” vs “push ebp; mov ebp, esp; sub esp, imm”和“leave” vs “mov esp, ebp; pop ebp”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5959890/

10-12 04:31