マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初級者の方からよく質問される「スタックの役割」です。
素朴な疑問から技術トラブルなどマイコンユーザーのあらゆる悩みに対し、マイコンメーカーのエンジニアが回答していく連載「Q&Aで学ぶマイコン講座」。
今回は、初級者から多く寄せられる質問です。
マイコンの説明書やカタログに「スタック」とか「スタックポインター」とか書かれていますが、そもそも「スタック」とは何ですか? マイコンの動作の中で、どのような役割を果たしているのですか。また、「スタックポインター」とは何を指すのでしょうか? 「スタック」との関係性も教えてください。
皆さんは、仕事をしている途中で急ぎの新しい仕事が入ったときに、それまでやっていた仕事の内容を一時的に別のところへ移して、新しい仕事を始めますよね。そして急ぎの新しい仕事が終わったら、先ほど中断した元の仕事を再開するでしょう。この時に「元の仕事の内容を一時的に移す場所」を、マイコンの場合は「スタック」と呼びます。
現在の仕事がメインルーティンで、新しい仕事は「例外処理(割り込みなど)」や「関数処理(サブルーティンなど)」になります。メインルーティンを実行中に「例外処理」などが発生すると、メインルーティンを中断しますが、その時のレジスターやプログラムカウンターの値などをメモリ領域(通常はRAM)に一時退避(PUSH/プッシュ)させます。このメモリ領域を「スタック」や「スタック領域」と呼びます。そして、メインルーティンに戻る際に、「スタック」の内容を元のレジスターに戻します(POP/ポップ)。
「スタック」がメモリ領域のどこにあるかを示すレジスターを「スタックポインター」と呼びます。通常、「スタックポインター」はRAM内の「スタック領域」のアドレスを示します(図1参照)。
Copyright © ITmedia, Inc. All Rights Reserved.