BRAS: link register et le pointeur de l'image

J'essaie de comprendre comment le lien s'inscrire et le pointeur de cadre de travail dans les BRAS. J'ai été à un couple de sites, et je voulais confirmer ma compréhension.

Supposons que j'ai eu le code suivant:

int foo(void)
{
    //..
    bar();
    //(A)
    //..
}

int bar(void)
{
    //(B)
    int b1;
    //..
    //(C)
    baz();
    //(D)
}

int baz(void)
{
    //(E)
    int a;
    int b;
    //(F)
}

et j'appelle foo(). Serait le lien registre contient l'adresse pour le code au point (A) et dans le cadre de pointeur contient l'adresse dans le code au point (B)? Et le pointeur de pile pourrait être n'importe où à l'intérieur de la barre(), après que tous les habitants ont été déclarées?

[edit] Ajout d'un autre appel de fonction baz()

  • Je ne suis pas sûr de ce que vous vouliez dire par "le pointeur de pile pourrait être n'importe où à l'intérieur de la barre()". Aussi, vous avez l'air de se demander ce que l'état de ces choses pourrait être quand foo() appels bar(), pas quand quelque chose d'appels foo() (mais je suis peut-être pas compris la question).
  • Oui, je voulais dire l'état des choses lorsque foo() appelle bar(). Ce que je voulais dire au sujet de la SP a été que les locaux ont été déclarés et mis sur la pile, le SP pointe sur le haut de la pile, où la dernière variable locale est déclarée.
  • double possible de Quels sont SP (stack) et LR dans le BRAS?
InformationsquelleAutor user2233706 | 2013-04-01