すでにポインタがある場合は、次の命令を簡単に指すことができ、前の関数に戻るために簡単に指すことができるので、私はそれと混同しています。それでは、なぜ前の関数またはモジュールに戻るために別のスタックポインタレジスタが必要なのですか?
12884 次
3 に答える
18
プログラムカウンターはCPUにそれがどこにあるかを伝えます。スタックは、(とりわけ)それがどこにあったかを記録するために使用されます。
関数が呼び出された場合、その関数は、関数が終了したらどこに戻るかを知る必要があります。これは実際に渡されたアドレスである可能性がありますが、その関数自体が他の関数を呼び出す場合、または再帰的に呼び出す場合でも、このアドレスが失われたり上書きされたりしないようにする必要があります。そのため、保存する必要があります。これを行う自然な方法は、アドレスをスタックにプッシュし、必要に応じて再びポップオフすることです。
もちろん、関数のローカル状態も格納します。これは、プログラムが関数に降りるとき、または関数から戻るときに、それもプッシュおよびポップする必要があるためです。
すべてのプロセッサが必ずしもスタックを持っているわけではありませんが、1つでリモートで複雑なことを行う場合は、必然的に1つを実装します。
于 2012-12-24T13:56:26.250 に答える