为什么没有同伴指示离开?

Kee*_*oek 1 x86 assembly cdecl

为什么在 x86 上没有伴随指令离开?那样,

pushl   %ebp
movl    %esp,%ebp
pushl   $3
popl    %eax
leave
ret
Run Code Online (Sandbox Code Playgroud)

可以变成:

enter #or something
pushl   $3
popl    %eax
leave
ret
Run Code Online (Sandbox Code Playgroud)

一般来说,这不是更快吗?

NPE*_*NPE 5

事实上,一个enter指令。至于为什么它没有多少用处,“英特尔® 64 位和 IA-32 架构优化参考手册”提供了一个提示:

汇编/编译器编码规则 32。(MH 影响,M 通用性)使用push/pop来管理函数调用/返回之间的堆栈空间和地址调整,而不是enter/ leaveenter除了错误预测之外,使用具有非零立即数的指令可能会在流水线中遇到明显的延迟。