Dans l' assemblage MIPS , il existe 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?
28
Dans l' assemblage MIPS , il existe 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?
Réponses:
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 un assemblage MIPS (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 à la24($sp)
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:
la source
%ebp
registre «pointeur de base» dans la convention d'appel x86? (Je suis nouveau dans tout cela, mais cela ressemble à la même chose que d'utiliser quelque chose comme çaMOV 8(%ebp), %eax
?)Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
n'est pas tout à fait claire de ce que cela signifie