Objaśnienie wskaźnika ramki


28

W zespole MIPS istnieje rejestr wskaźnika stosu i kolejny rejestr wskaźnika ramki. Co to jest wskaźnik ramki i do czego służy? Czym różni się od wskaźnika stosu?


1
Jakie badania już przeprowadziłeś - i jaka jest twoja znajomość warunków? Dla jakiego to systemu (różne systemy mają inną terminologię)?

Chcę tylko zapoznać się ze wskaźnikiem ramki (montaż mipsowy). Nie rozumiem, jak to pomaga, dlaczego go potrzebujemy?
Wielkie

Odpowiedzi:


44

W zespole MIPS wskaźnik stosu wskazuje na górę stosu. Podczas przydzielania miejsca 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 były niekonwencjonalne), zapisuje się parametry na stosie, a następnie przesuwa wskaźnik stosu.

Gdy metoda się rozpoczyna, parametr może znajdować się z przesunięciem wynoszącym 16($sp). Ponieważ jednak zmienne są umieszczane na stosie, wskaźnik stosu przesuwa się i zamiast tego można teraz znaleźć ten sam parametr24($sp) . Może to sprawić, że kod będzie nieco mylący.

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.

Należy zdawać sobie sprawę, że wskaźnik ramki będzie musiał być przechowywany i odtwarzany za pomocą wywołań podprogramów, które go modyfikują.

Dalsza lektura:


Nie wiem, co należy rozumieć przez „rejestry były w tamtych czasach na wagę złota - parametry oparte na rejestrach, gdzie niekonwencjonalne”, ale parametry można również umieścić na stosie, gdy liczba rejestrów jest ograniczona. Jeśli masz na przykład 35 parametrów (uważam, że MIPS ma 32 reg.), Musisz umieścić 3 ostatnie parametry na stosie. Bardziej specyficzne dla implementacji, FP będzie pod adresem w pamięci, w którym znajduje się adres zwrotny.
Jonathan

1
@Jathanathan MIPS Z tych 32 rejestrów, 0 $ było 0. $ było zarezerwowane, $ v0 i $ v1 służyły do ​​zwracania wartości wywołań funkcji, $ a0 - $ a3 były parametrami funkcji, $ t0 - $ t9 były tymczasowe (zachowanie rozmówcy) , $ s0 - $ s7 zostały zapisane, a sam system wykorzystał $ gp, $ sp, $ fp i $ ra. Podsumowując, istniały tylko 24 rejestry ogólnego przeznaczenia, a niektóre z nich poniosły koszty ogólne, jeśli chcesz użyć. Zasadniczo korzystałeś tylko z rejestrów $ t (10). Porównaj to z Itanium, który ma 128 rejestrów. Wywołanie funkcji w MIPS z 35 parametrami, prawdopodobnie umieściłbyś je wszystkie na stosie.

@Jonathan Wskażę też ten komentarz : „Buldożer AMD: 96 fizycznych GPR, Intel Sandy Bridge: 160 fizycznych GPR, Intel Haswell: 168 fizycznych GPR”. Rzeczy stają się zabawne z wieloma podstawowymi maszynami. SPARC miał 160 rejestrów . Zwracam również uwagę na okno rejestracji, które wpisało się w filozofię projektowania MIPS z połową liczby rejestrów równą liczbie współczesnych.

Czy to jest to samo, co konwencjonalne użycie %ebprejestru „wskaźnika podstawowego” w konwencji wywoływania x86? (Jestem nowy w tym wszystkim, ale brzmi to tak samo, jak używanie czegoś takiego MOV 8(%ebp), %eaxczy czegoś takiego?)
ELLIOTTCABLE

Linia Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.nie jest do końca jasna, co to znaczy
zadane
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.