I MIPS-samling er der et register til stakmarkøren, og et andet register til rammemarkøren. Hvad er rammemarkøren, og hvad er dens formål? Hvordan adskiller det sig fra stakmarkøren?

Kommentarer

  • Hvilken forskning har du allerede foretaget – og hvad er din fortrolighed med vilkårene? Hvilket system er dette til (forskellige systemer har forskellige terminologier)?
  • Jeg vil bare blive fortrolig med rammemarkøren (mips-samling). Jeg forstår ikke ' hvordan det hjælper, hvorfor har vi brug for det? Mange tak

Svar

I MIPS-samling peger stakemarkøren på toppen af stakken. Når du tildeler plads på stakken, bevæger stakemarkøren ($ sp) sig for at pege på den ledige hukommelse.

Når du kalder på en underrutine i MIPS-samling (registre var på det højeste i disse dage – registerbaserede parametre hvor ukonventionel), skriver man parametrene til stakken og fremfører derefter stakemarkøren.

Når metoden starter, kan en parameter være forskudt på 16($sp). Da variabler placeres på stakken, flyttes stakmarkøren, og den samme parameter kan nu muligvis være placeret i stedet for 24($sp). Dette kan gøre koden lidt forvirrende.

Rammemarkøren ($ fp) peger på starten af stakrammen og bevæger sig ikke i løbet af underrutinen. Dette peger på bunden af stabelrammen, og de parametre, der sendes til underrutinen, forbliver på et konstant sted i forhold til rammemarkøren.

Indse, at rammemarkøren skal gemmes og gendannes med underrutineopkald, der ændrer det.

Yderligere læsning:

Kommentarer

  • Jeg don ' ved ikke, hvad der menes med " registre var på en præmie i disse dage – registerbaserede parametre, hvor ukonventionelle " men parametre kan også sættes på stakken, når # af regi sters er begrænset. Hvis du f.eks. Har 35 parametre (jeg tror, at MIPS har 32 regs.), Skal du placere de sidste 3 parametre på stakken. Også mere specifikt for implementering vil FP være på adressen i hukommelsen, hvor returadressen er.
  • @Jonathan MIPS Af disse 32 registre var $ 0 0. $ at var reserveret, $ v0 og $ v1 var til returværdi af funktionsopkald, $ a0 – $ a3 var funktionsparametre, $ t0 – $ t9 var midlertidige (opkaldsbevarelser), $ s0 – $ s7 blev gemt, og $ gp, $ sp, $ fp og $ ra blev brugt af selve systemet. Alt i alt var der kun 24 generelle formålsregistre, og nogle af dem afholdt overhead, hvis du ville bruge. Du brugte normalt kun $ t-registre (10). Sammenlign dette med Itanium, som har 128 registre. Når du kalder en funktion i MIPS med 35 parametre, vil du sandsynligvis lægge dem alle på stakken.
  • @Jonathan I ' Peger også på denne kommentar : " AMD Bulldozer: 96 fysiske GPRer, Intel Sandy Bridge: 160 fysiske GPRer, Intel Haswell: 168 fysiske GPRer ". Ting bliver sjove med flere kernemaskiner. SPARC havde 160 registre . Jeg peger også på registervindue , der gik ind i nogle af MIPSs designfilosofi med halvt så mange registre som dets samtidige.
  • Så , dette er den samme som den konventionelle brug af %ebp base pointer registeret i x86-opkaldskonventionen? (Jeg ' er ny for alt dette, men det lyder som den samme grundlæggende ting som at bruge sth som MOV 8(%ebp), %eax eller sådan?)
  • Linjen Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it. er ikke helt klar over, hvad det betyder

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *