Egy funkció B
Az alábbiakban a viselkedését a hívási verem függvényében si. Részletek igazak gcc fordítóval az Intel Pentium platform. Nagyon sok módja van, és megállapodások létrehozása és töltse ki a keretet: a különböző processzorok, az operációs rendszerek és fordítóprogramok tudja csinálni különböző módon.
függvényhívás
Ha a hívott függvénynek nyilvántartások EAX, ECX és EDX, a hívó kell menteni őket valamilyen módon a veremben, mielőtt hívja az alprogramot. Másrészt, a hívott függvény visszaállítani az értékek e nyilvántartások. Ha a hívott függvény módosítja az állam az EAX regiszter, az ECX és az EDX, először meg kell menteni a korábbi állapotot a köteget, mielőtt azokat visszaállítani az eredeti értékükre.
Átadott paramétereknek az ize függvényben helyezzük a verem jobbról balra: az első, az utolsó érv, hogy a végén a legelső. A lokális változók, valamint az idő, tárolja a verem.
Tekintsünk egy lépcsőzetes folyamat hívó és nézni a változások a verem.
Hozzászólások a hívó a hívás előtt
Ebben a példában a hívó függvény fő, és az úgynevezett ize. Mielőtt hívja a fő funkciója használja az ESP és EBP regisztrálja dolgozni saját keretet.
1. A fő funkciója helyezi a verem tartalmát a nyilvántartások EAX, ECX és EDX. Ez egy opcionális akció fordul elő, hogy ha az állam a nyilvántartások kell menteni.
2. A fő funkciója helyezi az érveket verem, kezdve az utolsóig. Például, ha a hívás az űrlap
a = ize (12, 15, 18);
szerelő nézhet ki:
3. fő kéri az alprogramot hívás
Ábra. 2 Állapot keret hívás után hívástA 2. ábra mutatja a tartalmát a keret hívás utáni funkciót teljesülnek. A piros vonal ezen és a következő számokat választja el a tartalmát a verem, amely azért jött létre függvényhívás a többi tartalom. A funkció meghívása után a verem tetején ismét lesz ebben a helyzetben.
Hozzászólások hívó függvény a hívás befejezése után
W tyúk a function ize átveszi az irányítást, azt kell 3 dolog: beállítani a keret, kiosztani tér helyi tárolására, a fenntartásához szükséges az állam a EBX, ESI és EDI.
Így ize első beállítja a saját keretet. Több EBP pozícióját jelzi a keret fő. Ezt az értéket meg kell őrizni, így kerül a verem. A tartalma átkerül a ESP EBP. Ez lehetővé teszi, hogy a fogantyút az érveket funkciók, mint például a váltás EBP és ingyenes ESP stack pointer további intézkedés céljából. Ezért szinte valamennyi funkcióját B kezdődik az utasításokat
Ábra. 3 keret hívása után: A hívott függvény tartotta értékét a bázis fő funkciója pointerLokális változók és az átmeneti tárolás már elérhető egy eltolva EBP. Összefoglalva, ize kell menteni a tartalmát a EBX, ESI és EDI a verem. ha használják őket.
Ábra. 4. Most ize funkciót tudja teljesíteni a szervezetMost lehet alakítani szervezet funkcióit. Ebben az esetben az új adatokat lehet helyezni és el kell távolítani a stack. Ezért ESP verem mutatót lehet változtatni, de EBP marad és az első érv lehet elérni [EBP + 8], függetlenül attól, hogy hány push and pop műveletek volt köszönhető. A function ize viszont is vezethet más funkciót hívások vagy rekurzív hívást. Azonban, mivel EBP visszaáll után visszatért ilyen beágyazott hívások hivatkozásokat érveket, a helyi változókat és az átmeneti tárolás a dolgokat is el lehet végezni azáltal képest EBP.
Hozzászólások hívott függvény, mielőtt visszatérne
N Mielőtt a visszatérő vezérlést a hívó, ize kell meghatározni oly módon, hogy vissza értéket, mint már említettük. Az eredmény kerül nyilvántartásba EAX, vagy egy további paraméter a funkció, és a függvény nem ad vissza értéket.
Másodszor, ize vissza kell állítania az érték a EBX, ESI és EDI. Elején a hívást, akkor tegyen egy értéket a verem nyilvántartások (például a függvény megváltoztatni őket), és most már tudja, hogy távolítsa el ezeket az értékeket onnan, de csak akkor, ha az ESP tartja a helyes értéket, vagyis az összeg push és pop működését egyensúlyban kell lennie.
Miután ezt a két lépést a helyi változók és ideiglenes tárolása már nem szükséges, és a keret eltávolítható utasításokat követve
Ábra. 5 Office visszatért a fő funkciójaHozzászólások hívó függvény után visszatért
Fter hogy vyzyvayuscheo ellenőrzés átadását a függvénynek (ebben a példában, fő), az argumentumokat a függvény általában nincs szükség. Mi lehet elállni a verem, mindhárom értéket egyszerre egyszerű hozzáadásával 12 (3 × 4 bájt), hogy a stack pointer.
A végén, ha a tartalom az EAX regiszterben, az ECX és EDX lett mentve a verem, akkor vissza lehet állítani. Így a verem ismét az állapot, amelyben a hívás működni.
ru-Cyrl 18- bemutató Sypachev S. S. 1989/04/14 [email protected] Stepan Sypachev diákok
Még mindig nem világos? - írási kérdésre a dobozban