V sestavení MIPS je registr ukazatele zásobníku, a další registr pro ukazatel rámce. Co je ukazatel rámce a jaký je jeho účel? Jak se liší od ukazatele zásobníku?
Komentáře
- Jaký výzkum jste již provedli – a jaká je vaše znalost těchto pojmů? Pro jaký systém to je (různé systémy mají odlišnou terminologii)?
- Chci se jen seznámit s ukazatelem rámce (sestava mips). Nechápu ', jak to pomáhá, proč to potřebujeme? Děkuji
Odpověď
V sestavení MIPS ukazuje ukazatel zásobníku na horní část zásobníku. Když přidělíte místo na zásobníku, ukazatel zásobníku ($ sp) se přesune tak, aby ukazoval na volnou paměť.
Při volání podprogramu v sestavě MIPS (registry byly v té době prémiové – parametry založené na registrech kde je to neobvyklé), zapíše se parametry do zásobníku a poté se posune ukazatel zásobníku.
Když metoda začne, může být parametr na offsetu 16($sp)
. Protože se však do zásobníku umisťují proměnné, pohybuje se ukazatel zásobníku a stejný parametr nyní může být místo toho umístěn na 24($sp)
. Díky tomu může být kód trochu matoucí.
Ukazatel rámce ($ fp) ukazuje na začátek rámce zásobníku a nepohybuje se po dobu trvání volání podprogramu. To ukazuje na základ rámce zásobníku a parametry, které jsou předány podprogramu, zůstávají na konstantním místě vzhledem k ukazateli rámce.
Uvědomte si, že ukazatel rámce bude nutné uložit a obnovit s voláními podprogramů, které jej upravují.
Další čtení:
- UWisc Madison CS 354 konvence MIPS
- Kapitola 3 Jazyk sestavení MIPS
- UMD CS 311 Porozumění Stack
- UWash Seattle CSE 410 Shrnutí konvence volání MIPS
- Wikipedia Ukazatel rámce
Komentáře
- Nemám ' Nevím, co se myslí " registry byly v té době prémiové – parametry založené na registrech, kde nekonvenční " ale parametry lze také vložit do zásobníku, když je číslo regionu Sters je omezený. Pokud máte například 35 parametrů (domnívám se, že MIPS má 32 reg.), Pak byste museli na zásobník umístit poslední 3 parametry. Specifičtější pro implementaci by byl FP na adrese v paměti, kde je zpáteční adresa.
- @Jonathan MIPS Z těchto 32 registrů bylo 0 $ 0. $ at bylo rezervováno, $ v0 a $ v1 byly pro návratovou hodnotu volání funkce, $ a0 – $ a3 byly funkční parametry, $ t0 – $ t9 byly dočasné (uchování volajícího), $ s0 – $ s7 byly uloženy a $ gp, $ sp, $ fp a $ ra byly použity samotným systémem. Celkově bylo k dispozici pouze 24 registrů pro všeobecné účely a některé z nich vznikly režijní náklady, pokud jste je chtěli použít. Obecně jste používali pouze registry $ t (10). Porovnejte to s Itanium, které má 128 registrů. Voláním funkce v MIPS s 35 parametry byste pravděpodobně umístili všechny do zásobníku.
- @Jonathan I ' také ukážu na tento komentář : " AMD Bulldozer: 96 fyzických GPR, Intel Sandy Bridge: 160 fyzických GPR, Intel Haswell: 168 fyzických GPR ". S více jádrovými stroji se věci stanou zábavnými. SPARC měl 160 registrů . Rovněž vás upozorňuji na registrační okno , které se dostalo do některé filozofie designu MIPS s polovičním počtem registrů než jeho současníci.
- Takže , jedná se o stejnou věc jako konvenční použití
%ebp
registru „základního ukazatele“ v konvenci volání x86? (Jsem ' m k tomu všemu nový, ale zní to jako stejná základní věc jako používat něco jakoMOV 8(%ebp), %eax
nebo něco podobného?) - Řádek
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
není zcela jasný, co to znamená