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?
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?
Odpowiedzi:
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:
%ebp
rejestru „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), %eax
czy czegoś takiego?)
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