Параметрлерді стек арқылы тасымалдау
Параметрлерді стек арқылы тасымалдау, параметрлерді тасымалдаудың бірғана әдісі емес, бірақ стек арқылы параметрлер АРІ функцияларға беріледі, сондықтан көңіл бөлген жөн. Процедураны шақырудан бұрынғы және шақырудан кейінгі стектің күйі 9 суретте көрсетілген.
Суретте көрсетілгендей: процедураға стандартты кіруді орындау, Паскаль және Си сияқты жоғарға деңгейлі тілде орындалады.
Процедураға кіру кезінде стандартты командалар тізбегі орындалады:
PUSH EBP
MOV EBP,ESP
SUB ESP,N ; N- локалды айнымалылар үшін байттар саны.
Бірінші параметрдің адресі [EBP+8h] деп анықталады. Бірінші локалды айнымалының адресі, егер ол сақталынған болса [EBP-4] –мен анықталады (DWORD типіндегі айнымалы). Ассемблерде локалды айнымалыларды пайдалану ыңғайлы емес, сондықтан біз оларға орын сақтап қоямыз.
Процедура соңында мына командалар орындалады:
Mov ESP, EBP
POP EBP
RET M
Мұндағы М- стектен параметрлерді тасымалдау үшін алынған көлем.
Осындай нәтижені ENTER N,0 (PUSH EBP\MOV EBP, ESP\SUB ESP) командаларын процедура басында және LEAVE (MOV ESP, EBP\POP EBP) командаларын процедура соңында қолдану арқылы алуға болады.
Бұл командалар 286-шы процессорларда пайда болды және ары қарай трансляцияланатын программа кодын оптимизациялауға болады, әсіресе көлемі үлкен жоғарғы деңгейлі тілде жазылған модулдермен жұмыс жасаған кезде қолданылады.
Процедураның құрылымымен және оның шақырылуымен байланысты екі негізгі түрі бар. Шарттытүрде бірншісін Си-түрі, ал екіншісін – Паскаль-түрі деп атаймыз.
1). Процедура стекте қанша параметрдің бар екенін “білмейді”. Бұл жағдайда стектің параметрлерден босатылуы процедураны шақыру командасынан кейін POP немесе ADD ESP, N (N-параметрлердегі байт саны) командалары көмегімен жүзеге асырылады.
2). Параметрлер саны тіркелген, ал стекті процедураның өзінде босатуға болады. Бұл RET N (N- параметрлердегі байт саны) командасын орындаумен жүзеге асырылады. АРІ функциясын шақыру екінші сұлба бойынша жүзеге асырылады.
Негізгі әдебиеттер: 2[12-20]; 3[10-43]
Бақылау сұрақтары:
1. Windows-тағы программаның классикалық құрылымы қандай?
2. Windows операциялық жүйесі қандай жады моделін пайдаланады?
3. MessageBoxA API-функциясының қызметі.
4. Хабарлама кезегін өңдеу циклының қызметі және қандай API-функциялар қолданады?
5.Қандай параметрлер стек арқылы негізгі терезе процедурасына беріледі?
Дата добавления: 2015-10-26; просмотров: 1161;