为什么在 x86 上没有附带说明?那样,
pushl %ebp
movl %esp,%ebp
pushl $3
popl %eax
leave
ret
可能变成:
enter #or something
pushl $3
popl %eax
leave
ret
一般来说,这不是更快吗?
事实上,有一个enter
指令。至于为什么它没有得到太多使用,“英特尔® 64 和 IA-32 架构优化参考手册”提供了一个提示:
汇编/编译器编码规则 32。(MH 影响,M 通用性)使用
push
/pop
来管理堆栈空间和函数调用/返回之间的地址调整,而不是enter
/leave
。除了错误预测之外,使用enter
具有非零立即数的指令可能会在流水线中遇到明显的延迟。
确实有一个匹配的ENTER(汇编语言艺术)指令。但是,它很少使用,因为它非常慢,如链接中所述。
enter
对于某些处理器,有, 。