71 votes

Quelles sont SP (stack) et LR dans le BRAS?

Je suis à la lecture des définitions maintes et maintes fois et je n'ai toujours pas obtenir ce que sont le PS et LR dans le BRAS? Je comprends PC (il montre la prochaine instruction de l'adresse), le PS et LR sont probablement similaires, mais je ne vois pas ce que c'est. Pourriez-vous m'aider?

edit: si vous pouviez expliquer avec des exemples, ce serait superbe.

edit: enfin compris ce que LR est pour, toujours pas obtenir ce que le PS est pour.

86voto

Guy Sirton Points 5092

LR est le lien s'inscrire utilisé pour contenir l'adresse de retour d'un appel de fonction.

SP est le pointeur de pile. La pile est généralement utilisé pour hold "automatique", les variables et le contexte/les paramètres à travers des appels de fonction. Sur le plan conceptuel que vous pouvez penser de la "pile" comme un lieu où l'on "tas" de vos données. Vous garder "l'empilage" un morceau de données sur les autres et le pointeur de pile, vous indique le "haut" de votre "pile" de données. Vous pouvez supprimer les données du "haut" de la "pile" et de le rendre plus court.

À partir du BRAS de référence de l'architecture:

SP, le Pointeur de Pile

Registre R13 est utilisé comme un pointeur à l'actif de la pile.

Dans la barre de code, la plupart des instructions ne peut pas accéder à la SP. La seule les instructions qui peuvent accéder à la SP sont ceux qui sont conçus pour l'utilisation de la SP comme un pointeur de pile. L'utilisation de la SP pour des fins autres que comme une pile pointeur est obsolète. Remarque l'Utilisation de la SP pour toute autre fin que comme un pointeur de pile est possible de casser les exigences de l'exploitation des systèmes, des débogueurs, et d'autres systèmes logiciels, les obligeant à dysfonctionnement.

LR, le Lien s'Inscrire

Registre R14 est utilisé pour stocker l'adresse de retour d'un sous programme. Au d'autres fois, LR peut être utilisé à d'autres fins.

Lorsqu'un BL ou BLX instruction effectue un appel de sous-routine, LR est fixé à la sous-routine d'adresse de retour. Pour exécuter un sous-programme de retour, copie LR de retour pour le compteur de programme. Cela se fait habituellement dans l'un des deux façons, après la saisie de la sous-routine avec un BL ou BLX instruction:

• De retour avec une BX LR instruction.

• Sur la sous-routine d'entrée, store LR pour la pile avec une instruction de la forme: PUSH {,LR} et utiliser un correspondant de l'instruction de retour: POP {PC} ...

Ce lien donne un exemple d'un trivial sous-routine.

Voici un exemple de la façon dont les registres sont sauvegardés sur la pile avant l'appel, puis a sauté en arrière pour restaurer leur contenu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X