Subsections

3 プログラムの開始と終了

3.1 プログラムの始まり(START)

書式
ラベル欄  命令コード欄 オペランド欄
label START [実行開始番地]

この命令の役割は,プログラムの実行開始番地(アドレス)をアセンブラーに対して指示す ることである.プログラムの先頭に必ず書く必要があり,これが無いと,どこからプログ ラムを実行するか分からない.プログラム実行時に,このSTART命令が示すアドレス が最初のPR(プログラムレジスタ)の値になる.これが実行開始番地である.

リスト1のプログラムでSTART命令の役割を考える.このプログラムを アセンブラーが機械語に変換すると,図2のようになる.START とEND命令はアセンブラ命令であるため,マシン語に変換されない.他のアセンブラ命令, DCDSは,それが示すデータに変換される. [caption=CASL IIのプログラム例.3+5を計算する,label=prog:add] program/add.cas

START命令はマシン語に変換されないが,プログラマーはアセンブラーに,このプロ グラムはラベルBEGINから実行すると言うことを伝えなくてはならない.ラベル BEGINは,最初に実行する命令

LD GR1,A
の先頭番地が格納されているアドレスを示す.そのアドレスがプログラム実行開始時にプ ログラムレジスターPRにセットされる.それを確実にするために,START命令がある. この命令で,最初に実行させる命令を示すのである.CPUは,その番地に書かれた0と1の 集まりは命令と解釈する.

START命令など無くして,最初の行から実行するように約束することも出来るであろ う.こうすると,いつも先頭の行から実行することになり,実際プログラムを書く場合不 便なことがある.START命令が有った方が,便利なのである.

もし,オペランド欄に記述が無い場合,START命令の次の行からプログラムの実行は 開始することになっている.START命令のラベルは,そのプログラム自身で参照されるこ とはないが,絶対に必要である.ほかのプログラム,たとえばOSがプログラムの実行を指 示する場合,このラベルが使われる.そしてこのラベルが示すアドレスは,このプログラ ムの実行開始番地になる.したがって,図1のラベルPGMBEGINは同じアドレ ス#0020である.

図 2: メモリーの内容と命令の種類
\includegraphics[keepaspectratio, scale=1.0]{figure/program_memory.eps}

3.2 プログラムの終わり(END)

書式
ラベル欄  命令コード欄 オペランド欄
  END  

この命令の役割は,プログラムの終わりをアセンブラーに対して知らせることである.プ ログラムの最後に必ず書く必要があり,これが無いと,どこでプログラムが終わったのか 分からない.プログラムの実行が終わったところではなく,プログラマーが記述したソー スコードの終わりを示す.

END文はラベルをつけることはできない.この命令は,主記憶装置に格納されないの で,対応するアドレスが無いからである.また,処理の対象となるオペランドも無いので, 書くことはできない.しかし,END文の後に注釈は許される.アセンブラーは,これ は無視する3



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2005-12-21


no counter