web-dev-qa-db-fra.com

Explication du pointeur de cadre

Dans MIPS Assembly , il y a un registre pour le pointeur de pile et un autre registre pour le pointeur de trame. Qu'est-ce que le pointeur de cadre et quel est son objectif? En quoi diffère-t-il du pointeur de pile?

30

Dans l'assemblage MIPS, le pointeur de pile pointe vers le haut de la pile. Lorsque vous allouez de l'espace sur la pile, le pointeur de pile ($ sp) se déplace pour pointer vers la mémoire libre.

Lors de l'appel d'un sous-programme dans MIPS Assembly (les registres étaient à une prime à l'époque - les paramètres basés sur les registres n'étaient pas conventionnels), on écrit les paramètres dans la pile, puis fait avancer le pointeur de la pile.

Lorsque la méthode démarre, un paramètre peut être à un décalage de 16($sp). Cependant, comme les variables sont placées sur la pile, le pointeur de la pile se déplace et le même paramètre peut désormais se trouver à 24($sp) à la place. Cela peut rendre le code un peu déroutant.

Le pointeur de trame ($ fp) pointe vers le début de la trame de pile et ne se déplace pas pendant la durée de l'appel de sous-routine. Cela pointe vers la base du cadre de pile et les paramètres qui sont passés au sous-programme restent à un point constant par rapport au pointeur de cadre.

Sachez que le pointeur de trame devra être stocké et restauré avec des appels de sous-programme qui le modifient.

Lectures complémentaires:

45
user40980