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:
- UWisc Madison CS 354 MIPS-konventioner
- Kapitel 3 MIPS Assembly Language
- UMD CS 311 Forståelse stakken
- UWash Seattle CSE 410 MIPS Opkaldskonferenceoversigt
- Wikipedia Rammemarkør
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 somMOV 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