MIPS-kokoonpanossa pinon osoittimelle on rekisteri, ja toinen rekisteri kehysosoittimelle. Mikä on kehyksen osoitin ja mikä on sen tarkoitus? Kuinka se eroaa pinon osoittimesta?

Kommentit

  • Mitä tutkimuksia olet jo tehnyt – ja mikä on sinulle tuttu termi? Mille järjestelmälle tämä sopii (eri järjestelmillä on erilainen terminologia)?
  • Haluan vain tutustua kehysosoittimeen (mips-kokoonpano). En ymmärrä ' en ymmärrä miten se auttaa, miksi me sitä tarvitsemme? Paljon kiitoksia

Vastaus

MIPS-kokoonpanossa pinon osoitin osoittaa pinon yläosaan. Kun varaat pinolle tilaa, pinon osoitin ($ sp) siirtyy osoittamaan vapaata muistia.

Kun kutsut aliohjelmaa MIPS-kokoonpanossa (rekisterit olivat tuolloin korkealla – rekisteripohjaiset parametrit jos epätavallista), parametrit kirjoitetaan pinoon ja siirretään sitten pinon osoitinta eteenpäin.

Kun menetelmä käynnistyy, parametri voi olla 16($sp). Kun muuttujat sijoitetaan pinoon, pinon osoitin liikkuu ja sama parametri voi nyt sijaita kohdassa 24($sp). Tämä voi tehdä koodista hieman hämmentävän.

Kehysosoitin ($ fp) osoittaa pinokehyksen alkuun eikä liiku aliohjelmakutsun ajan. Tämä osoittaa pinokehyksen pohjaan, ja alirutiiniin välitetyt parametrit pysyvät vakiona pisteessä kehysosoittimeen nähden.

Ymmärrä, että kehysosoitin on tallennettava ja palautettava aliohjelmakutsuilla, jotka muuttavat sitä.

Lisätietoja:

Kommentit

  • En halua ' ei tiedä, mitä " -rekisterit tarkoittavat noina päivinä – rekisteripohjaiset parametrit, joissa epätavanomaiset " mutta parametrit voidaan laittaa myös pinoon, kun regi # on rajoitettu. Jos sinulla on esimerkiksi 35 parametria (mielestäni MIPS: llä on 32 regs.), Sinun on laitettava viimeiset 3 parametria pinoon. FP on myös tarkemmin toteutukseen, FP olisi muistissa olevassa osoitteessa, jossa paluuosoite on.
  • @Jonathan MIPS Näistä 32 rekisteristä $ 0 oli 0. $ at varattiin, $ v0 ja $ v1 olivat funktiokutsujen palautusarvoa varten, $ a0 – $ a3 olivat toimintoparametreja, $ t0 – $ t9 olivat väliaikaisia (soittajan säilytykset), $ s0 – $ s7 tallennettiin ja järjestelmä itse käytti dollareita $ gp, $ sp, $ fp ja $ ra. Kaiken kaikkiaan yleiskäyttöisiä rekistereitä oli vain 24 ja jotkut niistä aiheutuvat yleiskustannuksista, jos haluat käyttää. Käytit yleensä vain $ t -rekistereitä (10). Vertaa tätä Itaniumiin, jolla on 128 rekisteriä. Kutsuen 35 parametrin sisältävän MIPS-funktion, todennäköisesti laitat ne kaikki pinoon.
  • @Jonathan I ' ll osoittaa myös kohtaan tämä kommentti : " AMD-puskutraktori: 96 fyysistä GPR, Intel Sandy Bridge: 160 fyysistä GPR, Intel Haswell: 168 fyysistä GPR ". Asiat ovat hauskoja useilla ytimillä varustetuilla koneilla. SPARC: lla oli 160 rekisteriä . Kohdistan sinut myös rekisteri-ikkunaan , joka sisältyi joihinkin MIPS: n suunnittelufilosofioihin, joissa on puolet enemmän rekistereitä kuin sen aikakaudilla.
  • Joten , onko tämä sama asia kuin %ebp base pointer -rekisterin tavanomainen käyttö x86-kutsukäytännössä? (Olen ' m uusi tälle kaikelle, mutta se kuulostaa samalta perusasialta kuin sth: n käyttö kuten MOV 8(%ebp), %eax tai vastaava?)
  • Rivi Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it. ei ole aivan selvää, mitä se tarkoittaa

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *