W zestawie MIPS znajduje się rejestr wskaźnika stosu, i inny rejestr wskaźnika ramki. Co to jest wskaźnik ramki i jaki jest jego cel? Czym różni się od wskaźnika stosu?
Komentarze
- Jakie badania już przeprowadziłeś – i jaka jest Twoja znajomość terminów? Do czego to służy (różne systemy mają różną terminologię)?
- Chcę tylko zapoznać się ze wskaźnikiem ramki (montaż mips). Nie ' nie rozumiem, jak to pomaga, dlaczego tego potrzebujemy? Wielkie dzięki
Odpowiedź
W zespole MIPS wskaźnik stosu wskazuje na szczyt stosu. Gdy alokujesz miejsce na stosie, wskaźnik stosu ($ sp) przesuwa się, aby wskazywać wolną pamięć.
Podczas wywoływania podprogramu w zestawie MIPS (rejestry były w tamtych czasach na wagę złota – parametry oparte na rejestrach gdzie niekonwencjonalne), zapisuje się parametry na stosie, a następnie przesuwa wskaźnik stosu do przodu.
Na początku metody parametr może mieć przesunięcie 16($sp)
. Jednak gdy zmienne są umieszczane na stosie, wskaźnik stosu przesuwa się i ten sam parametr może teraz znajdować się w 24($sp)
. Może to trochę zagmatwać kod.
Wskaźnik ramki ($ fp) wskazuje początek ramki stosu i nie porusza się przez czas trwania wywołania podprogramu. Wskazuje to na podstawę ramki stosu, a parametry przekazywane do podprogramu pozostają w stałym miejscu względem wskaźnika ramki.
Uświadom sobie, że wskaźnik ramki będzie musiał zostać zapisany i odtworzony z wywołaniami podprogramów, które go modyfikują.
Więcej informacji:
- UWisc Madison CS 354 Konwencje MIPS
- Rozdział 3 Język asemblera MIPS
- UMD CS 311 Zrozumienie stos
- UWash Seattle CSE 410 Podsumowanie konwencji wywołań MIPS
- Wikipedia Wskaźnik ramki
Komentarze
- Nie ' nie wiem, co oznacza " rejestry w tamtych czasach na wagę złota – parametry oparte na rejestrach, gdzie niekonwencjonalne ", ale parametry można również umieścić na stosie, gdy # z regi sters jest ograniczona. Jeśli masz na przykład 35 parametrów (uważam, że MIPS ma 32 reg.), To musisz umieścić na stosie ostatnie 3 parametry. Również bardziej specyficzne dla implementacji, FP będzie pod adresem w pamięci, gdzie znajduje się adres zwrotny.
- @Jonathan MIPS Spośród tych 32 rejestrów, $ 0 było 0. $ at było zarezerwowane, $ v0 i $ v1 były dla wartości zwracanej wywołań funkcji, $ a0 – $ a3 były parametrami funkcji, $ t0 – $ t9 były tymczasowe (zachowuje rozmówcę), $ s0 – $ s7 zostały zapisane, a $ gp, $ sp, $ fp i $ ra były używane przez sam system. W sumie były tylko 24 rejestry ogólnego przeznaczenia, a niektóre z nich były generowane, gdybyś chciał z nich skorzystać. Zwykle używałeś tylko rejestrów $ t (10). Porównaj to z Itanium, który ma 128 rejestrów. Wywołując funkcję w MIPS z 35 parametrami, prawdopodobnie umieścisz je wszystkie na stosie.
- @Jonathan I ' wskażemy również na ten komentarz : " AMD Bulldozer: 96 fizycznych GPR, Intel Sandy Bridge: 160 fizycznych GPR, Intel Haswell: 168 fizycznych GPR ". Sprawy stają się zabawne na wielu maszynach podstawowych. SPARC miał 160 rejestrów . Wskazuję również na okno rejestru , które weszło w część filozofii projektowania MIPS z połową mniejszą liczbą rejestrów niż jego współczesnych.
- Więc , to jest to samo, co konwencjonalne użycie rejestru
%ebp
base pointer w konwencji wywoływania x86? (Jestem ' nowy w tym wszystkim, ale brzmi to tak samo, jak używanie czegoś takiego jakMOV 8(%ebp), %eax
lub coś takiego?) - Wiersz
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
nie jest do końca jasny, co to znaczy