Dans lassemblage MIPS , il y a un registre pour le pointeur de pile, et un autre registre pour le pointeur de trame. Quest-ce que le pointeur dimage et à quoi sert-il? En quoi diffère-t-il du pointeur de pile?
Commentaires
- Quelles recherches avez-vous déjà effectuées – et quelle est votre connaissance des termes? À quel système sagit-il (différents systèmes ont une terminologie différente)?
- Je veux juste me familiariser avec le pointeur de cadre (assemblage mips). Je ' ne comprends pas comment cela aide, pourquoi en avons-nous besoin? Merci beaucoup
Réponse
Dans lassemblage MIPS, le pointeur de pile pointe vers le haut de la pile. Lorsque vous allouez de lespace sur la pile, le pointeur de pile ($ sp) se déplace pour pointer vers la mémoire libre.
Lors de lappel dun sous-programme dans lassemblage MIPS (les registres étaient à une prime à lépoque – paramètres basés sur les registres où non conventionnel), on écrit les paramètres dans la pile puis on avance le pointeur de pile.
Au démarrage de la méthode, un paramètre peut être à un offset de 16($sp)
. Cependant, au fur et à mesure que les variables sont placées sur la pile, le pointeur de pile se déplace et le même paramètre peut maintenant être situé à 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 la pile et ne bouge pas pendant la durée de lappel du sous-programme. Cela pointe vers la base du cadre de la pile, et les paramètres qui sont passés au sous-programme restent à un endroit constant par rapport au pointeur de cadre.
Réalisez que le pointeur de cadre devra être stocké et restauré avec des appels de sous-programmes qui le modifient.
Lectures complémentaires:
- UWisc Madison CS 354 Conventions MIPS
- Chapitre 3 MIPS Assembly Language
- UMD CS 311 Compréhension the Stack
- UWash Seattle CSE 410 Résumé des conventions dappel MIPS
- Wikipédia Pointeur de cadre
Commentaires
- I don ' Je ne sais pas ce que signifie " les registres étaient à une prime à cette époque – paramètres basés sur les registres où non conventionnels " mais paramètres peut également être mis sur la pile lorsque le # de regi sters est limité. Si vous avez 35 paramètres par exemple (je crois que MIPS a 32 regs.) Alors vous devrez mettre les 3 derniers paramètres sur la pile. Aussi plus spécifique à limplémentation, le FP serait à ladresse en mémoire où se trouve ladresse de retour.
- @Jonathan MIPS Sur ces 32 registres, $ 0 était égal à 0. $ at était réservé, $ v0 et $ v1 étaient pour la valeur de retour des appels de fonction, $ a0 – $ a3 étaient des paramètres de fonction, $ t0 – $ t9 étaient temporaires (conservés par lappelant), $ s0 – $ s7 étaient sauvegardés et $ gp, $ sp, $ fp et $ ra étaient utilisés par le système lui-même. Au total, il ny avait que 24 registres à usage général et certains dentre eux entraînaient des frais généraux si vous vouliez les utiliser. Vous navez généralement utilisé que les registres $ t (10). Comparez cela avec lItanium qui a 128 registres. En appelant une fonction dans MIPS avec 35 paramètres, vous les mettriez probablement tous sur la pile.
- @Jonathan I ' ll pointera également sur ce commentaire : " Bulldozer AMD: 96 GPR physiques, Intel Sandy Bridge: 160 GPR physiques, Intel Haswell: 168 GPR physiques ". Les choses deviennent amusantes avec plusieurs machines principales. SPARC avait 160 registres . Je vous indique également la fenêtre de registre qui est entrée dans une partie de la philosophie de conception de MIPS avec deux fois moins de registres que ses contemporains.
- Donc , cest la même chose que lutilisation conventionnelle du registre de
%ebp
pointeur de base dans la convention dappel x86? (Je ' je suis nouveau dans tout cela, mais cela ressemble à la même chose de base que dutiliser qc commeMOV 8(%ebp), %eax
ou autre?) - La ligne
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
nest pas tout à fait claire ce que cela signifie