プロセッサによるメモリ操作に関するいくつかの基本的な記事を読んでいましたが、プロセッサが次に来るものをどのように処理するかについて混乱していました。
コール スタックの概念は明確ですが、式スタック/レジスタ スタック (計算を行うために使用される) が同じスタックなのか、それともサブルーチン (関数) のローカル変数のスタックがprogram は同じコール スタックです。
スタックに関してプロセッサがどのように動作するかを誰かが説明できれば、それは私を大いに助けてくれます。
プロセッサによるメモリ操作に関するいくつかの基本的な記事を読んでいましたが、プロセッサが次に来るものをどのように処理するかについて混乱していました。
コール スタックの概念は明確ですが、式スタック/レジスタ スタック (計算を行うために使用される) が同じスタックなのか、それともサブルーチン (関数) のローカル変数のスタックがprogram は同じコール スタックです。
スタックに関してプロセッサがどのように動作するかを誰かが説明できれば、それは私を大いに助けてくれます。
私が取り組んできたすべてのプロセッサは、これらに 1 つのスタックを使用しただけです。
プロセッサが何をしているのかを考えると、必要なスタックは 1 つだけです。計算中は、呼び出しスタックと同じスタックを使用できます。計算が完了すると、スタックは再び「クリーン」になります。ローカル変数の場合も同様です。ローカル変数のスコープから出る直前に、スタックがクリーンになり、呼び出しが正しく返されるようになります。
SS:SP セグメントとポインタ レジスタを設定するだけでスタックを変更できます (現在の値を保存するだけです)。プロシージャ コール パラメータとローカル変数はスタック内で実行されます。また、動的に作成されたオブジェクトはヒープ (DS:DI) で発生します。SS:SP レジスタ ペアは、プロシージャ コールで必要なメモリを確保するために、正しいバイト数だけシフトされます。そして戻ると、SS:SP は呼び出し前の状態に戻ります。