【サブルーチンとは何?】
サブルーチンという言い方は、プログラムを作る時それぞれの機能の
固まりを「ルーチン」(ルーチンワークと同じような意味合い)といいます。
そのルーチンの中でも、いくつかのルーチンで同じ機能を使う時、全く同じ
プログラムを何回も書くのはメモリを無駄に消費するし、第一作る手間が
もったいないことになります。
そこで、ルーチンの一部を別に取り出して独立に作り、いくつかのルーチン
から呼び出して使うようにすれば、1回だけ作れば良いので無駄を省くこと
ができます。
このような部分的に取り出した独立のルーチンを「サブルーチン」と呼び
ます。
【どうやって作る?】
まずは、どの部分をサブルーチンにするかを決める必要があります。
基本的には、2回以上使う全く同じ処理の部分をサブルーチン化する
のですが、全く同じには出来ないけれど、パラメータとして変数を使えば
それによって処理をサブルーチン側で分けられる様な時にも、それらを
加えてサブルーチン化してしてしまいます。
実際の作りには、サブルーチンを作るための特別な命令が用意されて
います。
「CALL」と「RETURN」命令がそれで、命令の使い方は下図の様にします。
即ち、プリンタへの印刷をするルーチンをサブルーチンとする様な場合
には、印刷するデータの格納位置をパラメータで渡すことにして、サブル
ーチン化します。
まずメインとなるルーチンから「CALL」命令を使ってサブルーチンを呼び
出します。
呼び出しの仕方は、単にサブルーチンの入り口となる場所に付けた
ラベル名がサブルーチン名となりますので、それをCALLするだけです。
下図では、「CALL PRINT」がそれに相当します。
そしてサブルーチン側では、パラメータである変数を見て、そこで指定
された場所からデータを取り出してプリンタへ送って印刷を実行します。
そして処理の最後に「RETURN」命令を置きます。これでサブルーチンの
処理が完了すると、自動的に呼び出し元のメインルーチンに戻ることに
なります。
【サブルーチンの動作詳細は?】
上図でサブルーチンの動作を説明します。
まず、CALL命令が実行されると、コンピュータ内部で、CALL命令の次の
命令のあるアドレスが「戻り番地」としてスタックメモリに保存されたあと、
CALLされたラベルへジャンプして処理がサブルーチンに移ります。
サブルーチンでは、一定の処理を実行し、完了したら「RETURN」命令を
最後に実行します。
すると、コンピュータ内部で自動的にスタックメモリから「戻り番地」を取り
出してそこにジャンプします。
これで処理がCALL命令の次の命令に戻ることになり、メインルーチンに
戻って次の処理に流れが移ることになります。
サブルーチンに処理が一度移ると、RETURN命令で戻るまでメインルー
チンが実行されることは無いので、一定時間内で処理するようなことが
必要な場合など、サブルーチンでかかる時間も考慮しておくような注意が
必要です。