Subsections

3 サブルーチン関係

3.1 サブルーチンとは

大量のパーツからできている自動車も機能別の部品に分けることにより,その構造が分か りやすくなる.例えば,エンジン,トランスミッション,サスペンション等,機能毎に説 明されると分かりやすい.一つ一つの部品,例えば,ボルト,ベルト,シャフトの説明を されても自動車の全体は分からない.自動車の仕組みを分かるためには,機能毎に理解す る方が断然簡単である.

プログラムも一緒である.それを構成する機能の集まりで理解した方が簡単である. Windowsの4千万行もあるプログラムの各行を説明されても全く分からない.プログラムを 機能毎に分けたものがサブルーチンと呼ばれるものの本質である.要するにプログラムを 構成する機能単位の部品だと思えばよい.

23にサブルーチンを使ったプログラム とそうでないプログラムのイメージを示す.圧倒的に,サブルーチンを使った図 3の方が見通しがよい.実際に長いプログラムを書く場合,サ ブルーチンを使わないと不可能である.

具体的に,プログラムを機能別のサブルーチンに分けると,以下のようなメリットがあ る.

ちろんCASL IIにもこれが当てはまり,出来るだけ機能毎にプログラムを書くようにす べきである.要するにサブルーチンを使えということである.

図 2: メインルーチンだけのプログラム

\includegraphics[keepaspectratio, scale=1.0]{figure/only_main.eps}
図 3: 機能毎(サブルーチン)に分割されたプログラム.矢印は,デー タの流れをあらわす.

\includegraphics[keepaspectratio, scale=1.0]{figure/with_subroutine.eps}

3.2 サブルーチンを操作する命令

サブルーチンを呼び出す命令CALLとサブルーチンから戻る命令RETは,ペアで 使われる.アセンブラ命令STARTで指定される最初に実行されるルーチン2もOSがコールする.プログラム中ではあらわに現れないが,やはり CALLRETのペアになっているのである.

3.2.1 コール(CALL)

3.2.1.1 内容

命令語 CALL
語源 CALL (call:呼ぶ)
役割 サブルーチンへ制御を移す.
書式 [ラベル] CALL adr[,x]
動作 プログラムレジスタPRの値を指定のアドレスに変える.現 在のアドレスはスタック領域に待避させる.
フラグレジスタ 変化無し.

3.2.1.2 使用例

      CALL   KAKEZAN         ;アドレスKAKEZANを呼び出し

3.2.2 リターン(RET)

3.2.2.1 内容

命令語 RET
語源 RETurn (return:帰る,戻る)
役割 サブルーチンから呼び出し元へ制御が戻る.
書式 [ラベル] RET
動作 スタックポインター(SP)が示すアドレスの値をプログラム レジスター(PR)にセットする.そして,PRの値を,1増加させる.
フラグレジスタ 変化無し.

3.2.2.2 使用例

      RET         ;呼び出し元へ戻る

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2006-02-08


no counter