2011-05-11 9 views
35

enter औरबनाम "दर्ज" "धक्का ईबीपी; mov ईबीपी, esp; उप esp, IMM" और बनाम "छोड़" "mov esp, ईबीपी; पॉप ईबीपी"

push ebp 
mov ebp, esp 
sub esp, imm 

बीच क्या अंतर है निर्देश? क्या कोई प्रदर्शन अंतर है? यदि ऐसा है, जो तेज़ है और कंपेलर हमेशा बाद वाले का उपयोग क्यों करते हैं? leave और

mov esp, ebp 
pop ebp 

निर्देश के साथ

इसी तरह।

+0

http://stackoverflow.com/questions/5474355/about-leave-in-x86-assembly?rq=1 –

उत्तर

31

वहाँ विशेष रूप से enter के लिए, एक प्रदर्शन का अंतर है। आधुनिक प्रोसेसर पर यह 10 से 20 माइक्रोन तक डीकोड करता है, जबकि आर्किटेक्चर के आधार पर तीन निर्देश अनुक्रम लगभग 4 से 6 है। विवरण के लिए Agner Fog's निर्देश तालिकाओं से परामर्श लें।

अतिरिक्त enter निर्देश आमतौर पर काफी उच्च विलंबता है, उदाहरण के लिए तीन निर्देश अनुक्रमों की 3 घड़ियों निर्भरता श्रृंखला की तुलना में कोर 2 पर 8 घड़ियों।

इसके अलावा निर्देशों के अधिक समान निष्पादन की अनुमति देने के लिए पाठ्यक्रम के आस-पास के कोड के आधार पर, तीन निर्देश अनुक्रम शेड्यूलिंग उद्देश्यों के लिए कंपाइलर द्वारा फैलाया जा सकता है।

+0

मैं पूछ सकता है जहाँ आप इस जानकारी को प्राप्त? और 'छुट्टी' के बारे में क्या? –

+4

विस्तृत निर्देश विलंबता के लिए प्रोसेसर कोड निष्पादित करता है और http://www.agner.org/optimize/instruction_tables.pdf को वैश्विक अवलोकन के लिए http://www.agner.org/optimize/microarchitecture.pdf देखें। 'छोड़' प्रदर्शन में बराबर कुछ आर्किटेक्चर पर है, लेकिन AFAIK किसी भी मामले में तेज़ नहीं है। यह निर्देश कैश में कम स्मृति का उपभोग करता है, हालांकि – hirschhornsalz

+1

यदि 3 निर्देश अनुक्रम 'एंटर' से तेज़ है, तो इसका क्या अर्थ है? –

3

उनमें से किसी का उपयोग करके कोई वास्तविक गति लाभ नहीं है, हालांकि लंबे समय तक संभवतः सीपीयू के दिनों के कारण लंबी विधि बेहतर हो जाएगी क्योंकि इन दिनों कम सामान्य निर्देशों के लिए अधिक 'अनुकूल' हैं जो उपयोग में अधिक सामान्य हैं (साथ ही यह अनुमति देता है यदि आपका भाग्यशाली हो तो निष्पादन बंदरगाहों की संतृप्ति)।

LEAVE का लाभ (जो अभी भी उपयोग किया जाता है, केवल विंडोज़ डीएलएस देखें) यह है कि मैन्युअल रूप से एक स्टैक फ्रेम को फाड़ने से छोटा है, इससे आपकी जगह सीमित होने पर बहुत मदद मिलती है।

इंटेल अनुदेश मैनुअल (मात्रा 2A सटीक होना करने के लिए) निर्देश के बारे में अधिक वास्ते विवरण होगा, इसलिए चाहिए Dr Agner Fogs Optimization manuals

2

80286 को डिजाइन करते समय, इंटेल के सीपीयू डिजाइनरों ने डिस्प्ले को बनाए रखने में मदद के लिए दो निर्देश जोड़ने का फैसला किया।

यहाँ CPU के अंदर सूक्ष्म कोड: प्रवेश करने के लिए

; ENTER Locals, LexLevel 

push bp    ;Save dynamic link. 
mov  tempreg, sp  ;Save for later. 
cmp  LexLevel, 0  ;Done if this is lex level zero. 
je  Lex0 

lp: 
dec  LexLevel 
jz  Done   ;Quit if at last lex level. 
sub  bp, 2   ;Index into display in prev act rec 
push [bp]   ; and push each element there. 
jmp  lp    ;Repeat for each entry. 

Done: 
push tempreg   ;Add entry for current lex level. 

Lex0: 
mov  bp, tempreg  ;Ptr to current act rec. 
sub  sp, Locals  ;Allocate local storage 

वैकल्पिक होगा:

; एन, 0; 14 चक्र 486

push bp    ;1 cycle on the 486 
sub  sp, n   ;1 cycle on the 486 

; प्रवेश एन, 1; 486

push bp    ;1 cycle on the 486 
push [bp-2]   ;4 cycles on the 486 
mov  bp, sp   ;1 cycle on the 486 
add  bp, 2   ;1 cycle on the 486 
sub  sp, n   ;1 cycle on the 486 

पर 17 चक्र; एन, 3; 23 चक्र 486

push bp    ;1 cycle on the 486 
push [bp-2]   ;4 cycles on the 486 
push [bp-4]   ;4 cycles on the 486 
push [bp-6]   ;4 cycles on the 486 
mov  bp, sp   ;1 cycle on the 486 
add  bp, 6   ;1 cycle on the 486 
sub  sp, n   ;1 cycle on the 486 

Ect पर दर्ज करें। लंबा रास्ता आपके फ़ाइल आकार को बढ़ा सकता है, लेकिन रास्ता तेज है।

अंतिम नोट पर, प्रोग्रामर वास्तव में अब प्रदर्शन का उपयोग नहीं करता है क्योंकि यह बहुत धीमा काम था, अब एंटर को बेकार बना रहा है।

स्रोत: https://courses.engr.illinois.edu/ece390/books/artofasm/CH12/CH12-3.html