A MIPS összeállításban van egy regisztráció a veremmutatóhoz, és egy másik regiszter a keretmutatóhoz. Mi a keretmutató és mi a célja? Miben különbözik a verem mutatójától?
Megjegyzések
- Milyen kutatásokat végzett már – és mennyire ismeri a kifejezéseket? Milyen rendszerre való ez (a különböző rendszerek eltérő terminológiával rendelkeznek)?
- Csak meg szeretnék ismerkedni a keretmutatóval (mips assembly). Nem értem ', hogy hogyan segít, miért van szükségünk rá? Nagyon köszönöm
Válasz
A MIPS-összeállításban a veremmutató a verem tetejére mutat. Ahogy kiosztja a helyet a veremben, a verem mutató ($ sp) a szabad memóriára mutat.
Amikor egy szubrutint hív meg a MIPS-összeállításban (a regiszterek azokban a napokban prémium értékben voltak – regiszteralapú paraméterek) ahol nem szokványos), az egyik megírja a paramétereket a veremben, majd előre lép a verem mutatóra.
Amikor a módszer elindul, egy paraméter a 16($sp)
. Amint azonban a változók a veremre kerülnek, a veremmutató elmozdul, és az ugyanaz a paraméter most az 24($sp)
helyen lehet. Ez kissé zavaróvá teheti a kódot.
A keretmutató ($ fp) a veremkeret kezdetére mutat, és nem mozog a szubrutin hívás ideje alatt. Ez a veremkeret aljára mutat, és az alprogramba továbbított paraméterek a keretmutatóhoz képest állandó helyen maradnak.
Tisztázza, hogy a keretmutatót el kell tárolni és vissza kell állítani szubrutin hívásokkal, amelyek módosítják.
További olvasmány:
- UWisc Madison CS 354 MIPS konvenciók
- 3. fejezet MIPS-összeállítási nyelv
- UMD CS 311 Megértés a verem
- UWash Seattle CSE 410 MIPS hívási egyezmények összefoglalása
- Wikipédia Keretmutató
Megjegyzések
- Nem ' nem tudom, mit jelent a " regiszterek azokban a napokban prémium értékben voltak – regiszter alapú paraméterek, ahol nem konvencionális " akkor is felrakható a veremre, amikor a regi # korlátozott. Ha például 35 paramétere van (úgy gondolom, hogy a MIPS-nek 32 regje van), akkor az utolsó 3 paramétert fel kell tennie a veremre. A megvalósításra is specifikusabban az FP azon a címen lenne, ahol a visszatérési cím található.
- @Jonathan MIPS Ebből a 32 regiszterből $ 0 0 volt. $ at fenntartva, $ v0 és $ v1 a függvényhívások visszatérési értékét jelentette, $ a0 – $ a3 függvényparamétereket, $ t0 – $ A t9 ideiglenes volt (a hívó fél megőrzi), a $ s0 – $ s7 fájl mentése megtörtént, a $ gp, $ sp, $ fp és $ ra értékeket pedig maga a rendszer használta. Összességében csak 24 általános célú nyilvántartás létezett, és ezek egy része a rezsi felett merült fel, ha használni kívánta. Általában csak a $ t regisztereket használta (10). Hasonlítsa ezt össze az Itanium-nal, amely 128 regisztert tartalmaz. Ha egy MIPS-ben 35 paraméterrel meghív egy függvényt, akkor valószínűleg mindet a verembe rakja.
- @Jonathan I ' ll is a ez a megjegyzés : " AMD buldózer: 96 fizikai GPR, Intel Sandy Bridge: 160 fizikai GPR, Intel Haswell: 168 fizikai GPR ". A dolgok mulatságossá válnak több magos gépekkel. A SPARC 160 regiszterrel rendelkezett . Ezenkívül a regisztráció ablakra is felhívom önt, amely a MIPS tervezési filozófiájába került, feleannyi regiszterrel, mint kortársai.
- Tehát , ez ugyanaz, mint a
%ebp
alapmutató regiszter hagyományos használata az x86-os hívási egyezményben? (Én ' m mindez új, de ugyanúgy hangzik, mint az sth használata, mintMOV 8(%ebp), %eax
vagy ilyesmi?) - Az
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
sor nem egészen világos, mit jelent ez