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:

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 jak MOV 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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *