2013-07-05 4 views
0

그냥 빨리 x86을 떠나야하는 동반자가없는 이유는 무엇입니까? 그런 식으로,왜 떠나야하는 동반자의 지시가 없습니까?

pushl %ebp 
movl %esp,%ebp 
pushl $3 
leave 
ret 

이 될 수 :

enter #or something 
pushl $3 
leave 
ret 

이 그 일반적으로 단지 빨리 아닌가요?

+1

첫 번째 코드가 빠릅니다. http://stackoverflow.com/questions/5959890/enter-vs-push-ebp-mov-ebp-esp-sub-esp-imm-and-leave-vs-mov-esp-ebp – qwr

답변

3

사실, 이고 enter instruction입니다.

조립/컴파일러 코딩 규칙 32 (MH에 미치는 영향, M의 일반성) 함수가 호출 사이에 push/pop 스택 공간과 주소 조정을 관리하기 위해 사용/반환 : 훨씬 사용하기가 표시되지 왜에 관해서는, "Intel® 64 and IA-32 Architectures Optimization Reference Manual"는 힌트를 제공합니다 enter/leave 대신. 0이 아닌 immediates와 함께 enter 명령어를 사용하면 예측 오류 외에도 파이프 라인에 상당한 지연이 발생할 수 있습니다.

1

일부 프로세서의 경우 enter입니다.

+1

IIRC를 참조하십시오. x86에서 80186/80188 프로세서 사용. –

3

실제로 일치하는 ENTER (어셈블리 언어 아트) 명령이 있습니다. 그러나 링크에서 설명한 것처럼 매우 느리기 때문에 거의 사용되지 않습니다.