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

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

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

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

次のプログラムでSTART命令の役割を考える。 =1


PGM START BEGIN LD GR1,A ADDA GR1,B ST GR1,C OUT D,E RET A DC 3 ;アドレスAに3を格納 B DC 5 ;アドレスBに5を格納 C DS 1 ;アドレスCから1語分の領域確保 D DC 'END' ;アドレスDから文字'END'を格納 E DC 3 ;アドレスEに3を格納 END
このプログラムをアセンブラー2が機 械語に変換すると、図1のようになる。STARTとEND命 令はアセンブラ命令であるため、マシン語に変換されない。他のアセンブラ命 令、DCDSは、それが示すデータに変換される。

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

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

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

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

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

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

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

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

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


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年9月7日


no counter