「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで

セサミアン3人組

tag: 組み込み

技術解説 2003年5月14日

●スタックへのアクセスにはフレーム・ポインタを利用

 では,変数部をスタックに確保しながら具体的にどのようにプログラムが動いていくかを説明します.

 ここで関数factの引き数は,この変数部に格納されて呼び出されることとします(関数の引き数をどう渡すかはコンパイラに依存する).さて,プログラムがこの関数factの計算を行うには,引き数のほかにどのような情報が必要でしょうか?

 プログラムは,fact(1)の計算をするためにfact(1)の変数部に着目して動きますが,fact(1)の計算が終わったら,fact(1)を呼び出したfact(2)の変数部に着目して動く必要があります.そのための情報,つまり,fact(2)の変数部の始まる場所(これをベース・アドレスと呼ぶ)を知っている必要があります.スタックの場合はデータを0番地方向に(図1-3で言えば上方向に)積んでいくのが習わしなので,具体的にはfact(2)の変数部のうちのいちばん下のアドレスを知っておく必要があります.

 この切り替えを統一的に取り扱うために,今着目している変数部のいちばん下の番地を格納するポインタ(これをフレーム・ポインタと呼ぶ)を作っておきます.プログラムのコードは変数部のデータにアクセスする際に,このフレーム・ポインタからの相対位置(フレーム・ポインタからデータまでのオフセット)を利用してアクセスするようにします.これにより,フレーム・ポインタの内容を切り替えることによって着目する計算を切り替えられます.

f01_03.gif
〔図1-3〕fact(1)計算中のスタックとフレーム・ポインタ
fact(1)を計算するための変数部には,fact(1)を呼び出したfact(2)の変数部のベース・アドレスを格納しておく必要がある.なお,fact(1)の計算中は,フレーム・ポインタにはfact(1)のベース・アドレスを格納し,計算が終わったら,次の計算のためにfact(2)のベース・アドレスを格納する.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日