(57)【要約】【課題】コンピュータにおける処理の実行順序が狂った場合でも、好ましくない命令が無際限に実行されることを防止できるプログラムを提供する。【解決手段】呼び出し元のプログラムにおいて、メモリ消去処理プログラムを呼び出す前に、アドレスＡ１の記憶データが作業レジスタＲ４に格納される（ステップＳＴ１０１，ＳＴ１０２）。そして、メモリ消去処理プログラムでは、メモリ消去の命令（ステップＳＴ２０６）を実行する前に、アドレスＡ２および作業レジスタＲ４の記憶データが互いに等しいか否かの判定が行われる（ステップＳＴ２０５）。この判定の結果、これらの記憶データが互いに等しいと判定された場合、メモリ消去の命令が実行され（ステップＳＴ２０６）、これらの記憶データが互いに等しくないと判定された場合は、メモリ消去の命令を実行しないまま呼び出し元のプログラムへ処理が戻される（ステップＳＴ２０９）。【選択図】      図４
2005242857.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶部を有するコンピュータ上で実行されるコンピュータプログラムであって、
第１のプログラムと、
該第１のプログラムから呼び出される第２のプログラムとを有し、
上記第１のプログラムは、
上記第２のプログラムを呼び出す前に、上記コンピュータの第１の記憶部の記憶データを読み出して、上記コンピュータの第２の記憶部に格納する第１のステップを含み、
上記第２のプログラムは、
上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいか否か判定する第２のステップと、
上記第２のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいと判定された場合、上記第２のプログラムの命令を実行し、前記記憶データが互いに等しくないと判定された場合、上記第２のプログラムの命令を実行せずに上記第１のプログラムへ戻る第３のステップと、を含む
ことを特徴とするコンピュータプログラム。
【請求項２】
上記コンピュータの第３の記憶部に記憶されており、上記第２のプログラムの命令によって変更される記憶データを、上記第３のステップにおいて上記第２のプログラムの命令が実行される前に、上記第２のプログラムの命令によって記憶データが変更されない上記コンピュータの第４の記憶部に格納する第４のステップを有し、
上記第２のプログラムは、
上記第３のステップにおいて上記第２のプログラムの命令が実行された後、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいか否か判定する第５のステップと、
上記第５のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しくないと判定された場合、上記第４の記憶部の記憶データを読み出して上記第３の記憶部に格納する第６のステップとを含む
ことを特徴とする、請求項１に記載のコンピュータプログラム。
【請求項３】
上記コンピュータが実行できない状態で上記コンピュータの第５の記憶部に記憶されており、上記第２のプログラムによって呼び出される第３のプログラムを有し、
上記第２のプログラムは、
上記第３のプログラムを呼び出す前に、上記コンピュータの第６の記憶部の記憶データを読み出して、上記コンピュータの第７の記憶部に格納する第７のステップと、
上記第２のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいと判定された場合、上記第３のプログラムを上記第５の記憶部から読み出して、上記コンピュータが実行可能な状態に変更して呼び出す第８のステップと、を含み、
上記第３のプログラムは、
上記第６の記憶部および上記第７の記憶部の記憶データが互いに等しいか否か判定する第９のステップと、
上記第９のステップにおいて、上記第６の記憶部および上記第７の記憶部の記憶データが互いに等しいと判定された場合、上記第３のプログラムの命令を実行し、該記憶データが互いに等しくないと判定された場合、上記第３のプログラムの命令を実行せずに上記第２のプログラムへ戻る第１０のステップと、を含む
ことを特徴とする、請求項１に記載のコンピュータプログラム。
【請求項４】
上記第２のプログラムは、
上記第３のプログラムの処理が終了した後、上記コンピュータの記憶部に格納されている実行可能な状態の上記第３のプログラムを消去する第１１のステップを含む、
ことを特徴とする、請求項３に記載のコンピュータプログラム。
【請求項５】
上記第１の記憶部の記憶データは、上記第２のプログラムに割り当てられた固有の識別データであることを特徴とする、請求項１に記載のコンピュータプログラム。
【請求項６】
上記第６の記憶部の記憶データは、上記第３のプログラムに割り当てられた固有の識別データであることを特徴とする、請求項３に記載のコンピュータプログラム。
【請求項７】
上記第８のステップにおいて、上記コンピュータが実行不能な形式の上記第３のプログラムを上記第５の記憶部から読み出して、上記コンピュータが実行可能な形式に変換する
ことを特徴とする請求項３に記載のコンピュータプログラム。
【請求項８】
上記第８のステップにおいて、上記コンピュータによるプログラムの実行が禁止された上記第５の記憶部から上記第３のプログラムを読み出して、上記コンピュータによるプログラムの実行が許可された上記コンピュータの他の記憶部に格納する
ことを特徴とする、請求項３に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で実行されるプログラムに関するものである。
【背景技術】
【０００２】
一般にコンピュータは、プログラムの実行順序を管理するためのレジスタ（以降、プログラムカウンタと呼ぶ）を有している。コンピュータは、プログラムカウンタの値をインクリメントさせながら、この値に対応するプログラムコードを記憶装置に記憶されているメモリアドレスから順に読み出して実行する。
【０００３】
また、一般に、あるプログラムから別のプログラムを呼び出して実行する場合（例えばメインルーチンからサブルーチンを呼び出す場合）、呼び出し時のコンピュータの状態に関連する情報として、上述したプログラムカウンタやその他のレジスタの値を、スタックと称される後入れ先出し型の記憶領域に退避させる処理が行われる。そして、呼び出し先のプログラムの処理が終わると、スタックに退避された値が各レジスタに再び書き戻され、コンピュータが元の状態に戻る。これにより、あるプログラムから別のプログラムを呼び出した後、再び元のプログラムに戻って処理を続行することが可能になる。
【０００４】
下記の特許文献１には、スタックを利用したサブルーチンの実行方法に関連する技術が記載されている。
【特許文献１】特開平２−３９２３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述のように、プログラムカウンタは、プログラムの実行順序を保つ役割を有しているため、その値が何らかの異常によって書き換えられてしまうと、コンピュータが誤動作を起こしてしまう。プログラムカウンタを狂わせる原因には、静電気放電によるノイズの混入や、テレビ、電子レンジ等の機器で発生する電磁波の干渉などがある。
【０００６】
特に、記憶データを消去するプログラムや人の安全性に関わる処理を実行するプログラムなど、取り返しのつかない結果を招くプログラムが、上述のようなプログラムカウンタの異常によって意図せずに実行されると、ユーザに大きな損害を与える恐れがある。
【０００７】
以下では、所定のアドレス範囲の記憶データを消去する従来のメモリ消去処理プログラムの具体例を挙げて、上述したコンピュータの誤動作を説明する。なお、末尾に記号‘Ｈ’を付された数値は１６進数である。
【０００８】
図１２は、従来のメモリ消去処理プログラムの機械語による記述例を示す図である。
【０００９】
行Ｌ１の‘ＯＢＪ  ＄０１００，＄０１５０’は、プログラムが格納される記憶領域のアドレスを‘０１００Ｈ’〜‘０１５０Ｈ’の範囲に指定する命令を示す。
【００１０】
行Ｌ２の‘ＦＲＥ  ＄１０００，＄１ＦＦＦ’は、‘１０００Ｈ’〜‘１ＦＦＦＨ’のアドレス範囲において書き込みを許可する命令を示す。
【００１１】
行Ｌ３の‘ＣＡＬＬ  ＴＥＳＴ’は、ラベル‘ＴＥＳＴ’が付された行Ｌ５に続くサブルーチンを呼び出す命令を示す。
【００１２】
行Ｌ４の‘ＲＥＴ’は、メモリ消去処理プログラムの終了命令を示す。
【００１３】
行Ｌ６の‘ＬＤ  ＨＬ，＄１０００’は、レジスタ‘ＨＬ’に値‘１０００Ｈ’のデータを代入する命令を示す。
【００１４】
行Ｌ７の‘ＬＤ  Ａ，＄００’は、レジスタ‘Ａ’に値‘００Ｈ’のデータを代入する命令を示す。
【００１５】
行Ｌ８の‘ＬＤ  Ｂ，３２’は、レジスタ‘Ｂ’に値‘３２’のデータを代入する命令を示す。
【００１６】
行Ｌ１０の‘ＬＤ  （ＨＬ），Ａ’は、レジスタ‘ＨＬ’の格納データの値で示されるアドレスに、レジスタ‘Ａ’のデータを代入する命令を示す。
【００１７】
行Ｌ１１の‘ＩＮＣ  ＨＬ’は、レジスタ‘ＨＬ’の格納データに値‘１’を加える命令を示す。
【００１８】
行Ｌ１２の‘ＤＦＣ  Ｂ’は、レジスタＢの格納データから値‘１’を減ずる命令を示す。
【００１９】
行Ｌ１３の‘ＪＰ  ＮＺ，Ｌ＿ＴＥＳＴ’は、行Ｌ１２の演算結果においてレジスタＢの格納データが‘０’でない場合、ラベル‘Ｌ＿ＴＥＳＴ’を付された行Ｌ９に続く処理にジャンプする命令を示す。
【００２０】
行Ｌ１４の‘ＲＥＴ’は、サブルーチンの終了命令を示す。
【００２１】
図１３は、上述したメモリ消去処理プログラムが格納される記憶領域の一例を示す図である。‘アドレス’欄および‘コード’欄の数値は１６進数である。
図１３の例によると、メモリ消去処理プログラムの本体（行Ｌ５〜Ｌ１４）に対応する機械語コードはアドレス‘０１５０Ｈ’以降の記憶領域に格納されている。
【００２２】
図１４および図１５は、上述したメモリ消去処理プログラムのフローチャートを示す図である。
呼び出し元のプログラムにおいてメモリ消去処理プログラムが呼び出されると（ステップＳＴ１）、アドレス‘０１５０Ｈ’より始まるメモリ消去処理プログラムが呼び出される。まず、レジスタ‘ＨＬ’にデータ‘１０００Ｈ’、レジスタ‘Ａ’にデータ‘００Ｈ’、レジスタ‘Ｂ’にデータ‘３２’がそれぞれ初期設定される（ステップＳＴ２〜ＳＴ４）。
初期設定の後、レジスタ‘Ａ’のデータ‘００Ｈ’が、レジスタ‘ＨＬ’のデータ‘１０００Ｈ’で示されるアドレスに格納される。すなわち、アドレス‘１０００Ｈ’にデータ‘００Ｈ’が書き込まれる。次いで、レジスタ‘ＨＬ’のデータがインクリメントされて‘１００１Ｈ’になり、レジスタ‘Ｂ’のデータがデクリメントされて‘３１’になる（ステップＳＴ６，ＳＴ７）。
このステップＳＴ５〜ＳＴ７の処理は、デクリメントされたレジスタ‘Ｂ’のデータ値が‘０’になるまで反復される。したがって、アドレス‘１０００Ｈ’から３２バイト分の記憶領域がデータ‘００Ｈ’で埋められる。
以上のメモリ消去処理が終了した後、呼び出し元のプログラムに処理が戻る。
【００２３】
このようなメモリ消去処理プログラムにおいて、プログラムカウンタの値がノイズ等により書き換えられて、偶然にアドレス‘０１５１Ｈ’を示す値になった場合、コンピュータはアドレス‘０１５１Ｈ’から機械語コードを読み取ろうとする。しかしながら、このアドレスに機械語コードは存在しないため、コンピュータは動作不定になる。
【００２４】
一方、プログラムカウンタの値がアドレス‘０１５０Ｈ’を示す値に偶然書き換えられた場合は、図１５のステップＳＴ２以降の処理が実行されてしまい、アドレス‘１０００Ｈ’から３２バイト分のデータが消去されてしまう。
また、プログラムカウンタの値がアドレス‘０１５３Ｈ’，‘０１５５Ｈ’，‘０１５７Ｈ’，‘０１５８Ｈ’，‘０１５９Ｈ’，‘０１５ＡＨ’を示す値に偶然書き換えられた場合は、図１５のステップＳＴ３以降の処理が実行されてしまい、予期せぬアドレスのデータが消去される可能性がある。
【００２５】
このように、従来のプログラムでは、プログラムカウンタの値が書き換えられる等の原因によってコンピュータにおける処理の実行順序が狂った場合に、メモリ消去等の好ましくない命令が際限なく実行されてしまうという課題がある。
【００２６】
本発明は上記課題に鑑みてなされたものであり、その目的は、コンピュータにおける処理の実行順序が狂った場合でも、好ましくない命令が際限なく実行されることを防止できるコンピュータのプログラムを提供することにある。
【課題を解決するための手段】
【００２７】
本発明のコンピュータプログラムは、第１のプログラムと、該第１のプログラムから呼び出される第２のプログラムとを有し、上記第１のプログラムは、上記第２のプログラムを呼び出す前に、上記コンピュータの第１の記憶部の記憶データを読み出して、上記コンピュータの第２の記憶部に格納する第１のステップを含み、上記第２のプログラムは、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいか否か判定する第２のステップと、上記第２のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいと判定された場合、上記第２のプログラムの命令を実行し、該記憶データが互いに等しくないと判定された場合、上記第２のプログラムの命令を実行せずに上記第１のプログラムへ戻る第３のステップと、を含むことを特徴とする。
【００２８】
上記本発明は、上記コンピュータの第３の記憶部に記憶されており、上記第２のプログラムの命令によって変更される記憶データを、上記第３のステップにおいて上記第２のプログラムの命令が実行される前に、上記第２のプログラムの命令によって記憶データが変更されない上記コンピュータの第４の記憶部に格納する第４のステップを有しても良く、上記第２のプログラムは、上記第３のステップにおいて上記第２のプログラムの命令が実行された後、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいか否か判定する第５のステップと、上記第５のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しくないと判定された場合、上記第４の記憶部の記憶データを読み出して上記第３の記憶部に格納する第６のステップとを含んでも良い。
【００２９】
上記本発明は、上記コンピュータが実行できない状態で上記コンピュータの第５の記憶部に記憶されており、上記第２のプログラムによって呼び出される第３のプログラムを有しても良く、上記第２のプログラムは、上記第３のプログラムを呼び出す前に、上記コンピュータの第６の記憶部の記憶データを読み出して、上記コンピュータの第７の記憶部に格納する第７のステップと、上記第２のステップにおいて、上記第１の記憶部および上記第２の記憶部の記憶データが互いに等しいと判定された場合、上記第３のプログラムを上記第５の記憶部から読み出して、上記コンピュータが実行可能な状態に変更して呼び出す第８のステップと、を含み、上記第３のプログラムは、上記第６の記憶部および上記第７の記憶部の記憶データが互いに等しいか否か判定する第９のステップと、上記第９のステップにおいて、上記第６の記憶部および上記第７の記憶部の記憶データが互いに等しいと判定された場合、上記第３のプログラムの命令を実行し、該記憶データが互いに等しくないと判定された場合、上記第３のプログラムの命令を実行せずに上記第２のプログラムへ戻る第１０のステップとを含んでも良い。
【００３０】
また、上記第２のプログラムは、上記第３のプログラムの処理が終了した後、上記コンピュータの記憶部に格納されている実行可能な状態の上記第３のプログラムを消去する第１１のステップを含んでも良い。
【００３１】
更に、上記第１の記憶部の記憶データは、上記第２のプログラムに割り当てられた固有の識別データであっても良い。
上記第６の記憶部の記憶データは、上記第３のプログラムに割り当てられた固有の識別データであっても良い。
【００３２】
また、上記本発明は、上記第８のステップにおいて、上記コンピュータが実行不能な形式の上記第３のプログラムを上記第５の記憶部から読み出して、上記コンピュータが実行可能な形式に変換しても良い。
あるいは、上記第８のステップにおいて、上記コンピュータによるプログラムの実行が禁止された上記第５の記憶部から上記第３のプログラムを読み出して、上記コンピュータによるプログラムの実行が許可された上記コンピュータの他の記憶部に格納しても良い。
【発明の効果】
【００３３】
本発明によれば、コンピュータにおける処理の実行順序が狂った場合でも、好ましくない命令が無際限に実行されることを防止できる。
【発明を実施するための最良の形態】
【００３４】
以下、本発明の３つの実施形態について、図面を参照して述べる。
【００３５】
＜第１の実施形態＞
【００３６】
図１は、本発明の実施形態に係るコンピュータの構成の一例を示す図である。
図１に示すコンピュータは、互いにバス４０を介して接続されたＣＰＵ１０、ＲＯＭ２０、およびＲＡＭ３０を有する。
【００３７】
ＣＰＵ１０は、起動時において、ＲＯＭ２０の所定の記憶領域に格納されるシステム制御用プログラムに従って、ＲＯＭ２０に格納される本体プログラムを読み出し、これをＲＡＭ３０にロードする。例えば、システム制御用プログラムにおいて割り当てられたＲＡＭ３０のプログラム領域３１に、ＲＯＭ２０の本体プログラムをロードする。そして、プログラム領域３１の先頭アドレスから順にコードを読み出して、これに応じた処理を実行する。本体プログラムでは、プログラム領域３１とは別にデータ領域３２がＲＡＭ３０上において確保されており、プログラムの実行過程で処理される各種のデータはデータ領域３２に格納される。
【００３８】
また、図１の例において、ＣＰＵ１０は、プログラムカウンタＰＣおよび作業レジスタＲ１〜Ｒ５を有する。
プログラムカウンタＰＣは、プログラムの実行アドレスを指示するデータを格納するレジスタである。コンピュータは、このプログラムカウンタＰＣによって指示されるアドレスからコードを読み出して実行する。また、コンピュータは、コードを読み出して実行するたびに、プログラムカウンタＰＣのデータ値をインクリメントさせて、実行アドレスを先に進ませる。
作業レジスタＲ１〜Ｒ５は、コンピュータの各種の処理に用いられるデータやアドレスを格納する。コンピュータは、コードをプログラム領域３１から読み出すと、そのコードに対して定められた作業レジスタのデータを利用して、種々の演算を行う。
【００３９】
ＲＯＭ２０は、ＣＰＵ１０において実行されるプログラム（システム制御用プログラムや本体プログラムなど）を記憶する。また、プログラムの処理過程で利用される定数のデータや後述するデータテーブルを記憶する。
【００４０】
ＲＡＭ３０は、ＣＰＵ１０において実行されるプログラム（本体プログラムなど）や、プログラムの処理過程で利用されるデータを記憶する。
【００４１】
図２は、本実施形態に係るプログラムにおいて参照されるデータテーブルの一例を示す図である。
【００４２】
本実施形態に係るプログラムでは、例えばプログラムカウンタＰＣのデータ値がノイズ等の影響によって書き換えられる場合のように、何らかの異常によってプログラムの実行順序が狂った場合に、意図せず呼び出されて実行されてしまうと好ましくない結果を招きかねない処理のプログラムに対して、図２に示すように、それぞれ所定のデータが割り当てられる。
例えば図２において、アドレスＡ１には初期化処理を行うプログラムに割り当てられるデータＤ１が格納され、アドレスＡ２にはメモリ消去処理を行うプログラムに割り当てられるデータＤ２が格納される。なお、これらのデータテーブルは、ＲＯＭ２０内に格納されている。
【００４３】
図３は、メモリ消去処理プログラムを呼び出すプログラムにおける処理の一例を示すフローチャートである。
【００４４】
メモリ消去処理プログラムを呼び出すプログラムでは、メモリ消去処理を呼び出す前に、図２に示すデータテーブルのアドレスＡ２（第１の記憶部）からデータＤ２が読み出されて（ステップＳＴ１０１）、作業レジスタＲ４（第２の記憶部）に格納される（ステップＳＴ１０２）。
メモリ消去処理プログラムは、作業レジスタＲ４にデータＤ２が格納された後で呼び出される（ステップＳＴ１０３）。
【００４５】
作業レジスタＲ４に格納されるデータは、後述するように、メモリ消去処理プログラムにおいて参照される。したがって、ステップＳＴ１０１およびＳＴ１０２においては、呼び出し元プログラムからメモリ消去処理プログラムに渡す引数として、図２に示すデータテーブルのデータＤ２を設定する処理が行われる。
【００４６】
図４は、本実施形態に係るメモリ消去処理プログラムにおける処理の一例を示すフローチャートである。
【００４７】
メモリ消去処理プログラムでは、まず、各レジスタに初期値が設定される（ステップＳＴ２０１〜ＳＴ２０３）。すなわち、作業レジスタＲ１にデータ‘１０００Ｈ’、作業レジスタＲ２にデータ‘００Ｈ’、作業レジスタＲ３にデータ‘３２’がそれぞれ初期設定される。
【００４８】
初期設定の後、図２に示すデータテーブルのアドレスＡ２よりデータＤ２が読み出され（ステップＳＴ２０４）、この読み出されたデータＤ２と作業レジスタＲ４に格納されるデータとが等しいか否かの判定が行われる（ステップＳＴ２０５）。すなわち、アドレスＡ２に記憶されるデータと作業レジスタＲ４に記憶されるデータとが互いに等しいか否か判定される。
【００４９】
ステップＳＴ２０５においてアドレスＡ２および作業レジスタＲ４の記憶データが互いに等しい判定された場合、メモリ消去の命令が実行される。すなわち、作業レジスタＲ２のデータ‘００Ｈ’が、作業レジスタＲ１のデータ‘１０００Ｈ’で示されるアドレスに書き込まれる。次いで、作業レジスタＲ１のデータがインクリメントされて‘１００１Ｈ’になり、作業レジスタＲ３のデータがデクリメントされて‘３１’になる（ステップＳＴ２０７，ＳＴ２０８）。
【００５０】
ステップＳＴ２０４〜ＳＴ２０８の処理は、ステップＳＴ２０５においてアドレスＡ２および作業レジスタＲ４の記憶データが互いに等しいと判定される限り、作業レジスタＲ３のデータ値が‘０’になるまで反復される。これにより、アドレス‘１０００Ｈ’から３２バイト分の記憶領域がデータ‘００Ｈ’で埋められる。
作業レジスタＲ３のデータ値が‘０’になると、メモリ消去処理プログラムは処理を終了して、呼び出し元のプログラムに戻る。
【００５１】
一方、ステップＳＴ２０５においてアドレスＡ２および作業レジスタＲ４の記憶データが互いに等しくないと判定された場合、メモリ消去処理プログラムは、メモリの消去を実行せずに、呼び出し元のプログラムに戻る。すなわち、ステップＳＴ２０６以降の処理をスキップして、呼び出し元のプログラムへの復帰命令を実行する。
【００５２】
以上説明したように、本実施形態に係るコンピュータのプログラムによれば、呼び出し元のプログラムにおいて、メモリ消去処理プログラムを呼び出す前に、アドレスＡ１の記憶データが読み出されて、作業レジスタＲ４に格納される（ステップＳＴ１０１，ＳＴ１０２）。そして、呼び出し先のプログラム（メモリ消去処理プログラム）では、メモリ消去の命令（ステップＳＴ２０６）を実行する前に、アドレスＡ２および作業レジスタＲ４の記憶データが互いに等しいか否かの判定が行われる（ステップＳＴ２０５）。この判定の結果、これらの記憶データが互いに等しいと判定された場合、メモリ消去の命令が実行され（ステップＳＴ２０６）、これらの記憶データが互いに等しくないと判定された場合は、メモリ消去の命令を実行しないまま呼び出し元のプログラムへ処理が戻される。
そのため、ノイズ等によるプログラムカウンタＰＣの異常や、不正なプログラムの実行によるプログラムカウンタＰＣの操作などによって、コンピュータにおける処理の実行順序に狂いが生じ、その結果として、図４に示すメモリ消去処理プログラムが呼び出されても、この呼び出しは、データＤ２を引数として渡す正規の手順を経た呼び出しではないことから、ステップＳＴ２０５では、アドレスＡ２および作業レジスタＲ４の記憶データが互いに異なるとの判定が下され、メモリ消去命令は実行されない。
すなわち、コンピュータにおける処理の実行順序に狂いが生じた結果として、正規な手順を経ずにプログラムが呼び出されても、該プログラムにおけるメモリ消去等の重大な結果をもたらす命令が意図せずに実行されることを効果的に防止できる。
【００５３】
また、仮に、コンピュータにおける処理の実行順序に狂いが生じた結果として、ステップＳＴ２０６の命令が直接実行されてしまい１バイト分の記憶データが消去されても、次のループ処理におけるステップＳＴ２０５の判定によって、更なるメモリ消去命令の実行は回避される。したがって、メモリ消去等の重大な結果をもたらす命令が無際限に実行されることを防止できる。
【００５４】
＜第２の実施形態＞
【００５５】
次に、本発明の第２の実施形態を述べる。
第２の実施形態では、メモリ消去等の記憶データに変更を生じ得る命令が実行される前に、記憶データのバックアップが行われる。
【００５６】
図５は、本発明の第２の実施形態に係るメモリ消去処理プログラムにおける処理の一例を示すフローチャートである。図４と図５における同一の符号は同一の処理を示す。
なお、このメモリ消去処理プログラムの呼び出し元のプログラムでは、既に述べた図３に示す処理が実行されるものとする。
【００５７】
図５に示すメモリ消去処理プログラムにおいても、図４に示すプログラムと同様に、作業レジスタＲ１〜Ｒ３への初期設定が行われる（ステップＳＴ２０１〜ＳＴ２０３）。そして、メモリ消去命令を反復実行するループ処理の先頭において、アドレスＡ２（第１の記憶部）から読み出したデータＤ２と作業レジスタＲ４（第２の記憶部）の記憶データとが等しいか否かの判定が行われ（ステップＳＴ２０４，ＳＴ２０５）、判定の結果、これらのデータが等しくないと判定された場合は、メモリ消去命令を実行せずに、呼び出し元のプログラムへ処理が戻される。
【００５８】
一方、ステップＳＴ２０５において、作業レジスタＲ４の記憶データがデータＤ２に等しいと判定された場合、図５に示すメモリ消去処理プログラムにおいては、ステップＳＴ２０６のメモリ消去を行う前に、消去の対象となる作業レジスタＲ１のデータ値で示されるアドレス（第３の記憶部）の記憶データが、作業レジスタＲ５（第４の記憶部）に格納される（ステップＳＴ２１０）。すなわち、メモリの消去を実行する前に、消去対象のアドレスの記憶データをバックアップする処理が行われる。
【００５９】
バックアップの後、ステップＳＴ２０６においてメモリの消去が行われると、続いて、作業レジスタＲ４の記憶データがデータＤ２に等しいか否かの判定が再び行われる（ステップＳＴ２１１）。
ステップＳＴ２１１の判定の結果、作業レジスタＲ４の記憶データがデータＤ２に等しい場合は、図４に示すプログラムと同様に、作業レジスタＲ１のデータのインクリメント（ステップＳＴ２０７）、作業レジスタＲ３のデータのデクリメント（ステップＳＴ２０８）が行われる。そして、作業レジスタＲ３のデータが‘０’でなければステップＳＴ２０４以降の処理が反復され、作業レジスタＲ３のデータが‘０’であれば呼び出し元プログラムへの復帰命令が実行される（ステップＳＴ２０９）。
また、ステップＳＴ２１１の判定の結果、作業レジスタＲ４の記憶データがデータＤ２に等しくない場合は、作業レジスタＲ５に格納されたデータが作業レジスタＲ１のデータ値で示されるアドレスに格納される（ステップＳＴ２１２）。すなわち、ステップＳＴ２１０においてバックアップされた記憶データが元のアドレスに書き戻される。
【００６０】
このように、本実施形態に係るコンピュータのプログラムによれば、メモリ消去処理プログラムにおいてメモリ消去の命令（ステップＳＴ２０６）が実行される前に、この命令によって変更され得るアドレスの記憶データが、この命令によって記憶データを変更されない作業レジスタＲ５に格納される。そして、メモリ消去の命令（ステップＳＴ２０６）が実行された後、アドレスＡ２の記憶データと作業レジスタＲ４の記憶データとが互いに等しいか否かの判定が行われ（ステップＳＴ２１１）、これらの記憶データが互いに等しくないと判定された場合、作業レジスタＲ５の記憶データが読み出されて、メモリ消去が行われたアドレスに格納される（ステップＳＴ２１２）。
これにより、種々の原因でコンピュータにおける処理の実行順序に狂いが生じ、その結果としてメモリ消去処理プログラムのステップＳＴ２１０が意図せず実行されてしまっても、ステップＳＴ２０６において消去されたデータを、作業レジスタＲ５にバックアップされたデータに基づいて復旧することが可能になる。したがって、意図せずにデータが消去される危険性を減らすことができる。
【００６１】
なお、上述した例では、ステップＳＴ２０６のメモリ消去命令の直前に消去対象のデータをバックアップしているため（ステップＳＴ２１０）、このバックアップ処理を飛ばしてステップＳＴ２０６，ＳＴ２１１，ＳＴ２１２が直接実行されると、記憶データが意図せずに消去されてしまう可能性がある。
このようなデータ消去の危険性を更に減らすためには、例えば、メモリ消去処理プログラムとは別の処理プログラムにおいて記憶データのバックアップを実行しても良い。例えば、別の処理プログラムにおいて、メモリ消去処理プログラムの消去対象のアドレスに新しくデータを書き込む際に、メモリ消去処理プログラムの消去対象ではない所定のアドレスにも、これと同じデータを書き込む処理を実行する。そして、ステップＳＴ２１２の処理においては、該所定のアドレスに書き込んだデータを、ステップＳＴ２０６で消去がなされたアドレスに書き戻す処理を行う。これにより、ステップＳＴ２１０のバックアップ処理を飛ばしてステップＳＴ２０６，ＳＴ２１１，ＳＴ２１２が直接実行される場合でも、消去されたデータをステップＳＴ２１２において確実に復旧することが可能になる。
【００６２】
＜第３の実施形態＞
次に、本発明の第３の実施形態を述べる。
第３の実施形態では、コンピュータが実行不能な状態でプログラムを記憶装置に格納することにより、プログラムの意図せぬ実行が防止される。
【００６３】
本実施形態では、コンピュータの処理順序が狂った場合に重大な結果をもたらす可能性のあるプログラムの一例として、Ｘ線発生装置を制御して人体にＸ線を照射させるプログラムを説明する。
まず、コンピュータの処理順序が狂った場合の対策をなんら講じていないプログラムについて述べ、その後で、本実施形態に係るプログラムについて述べる。
【００６４】
図６および図７は、コンピュータの処理順序が狂った場合の対策を講じていない、Ｘ線発生装置の制御用プログラムにおける処理の一例を示すフローチャートである。
【００６５】
ステップＳＴ３０１は、Ｘ線発生装置に対する各種の初期設定を行うステップである。このステップの後、Ｘ線の放射を実行するプログラム（以降、Ｘ線放射実行プログラムと呼ぶ）が呼び出される（ステップＳＴ３０２）。
【００６６】
Ｘ線放射実行プログラムにおいては、まず、放射時間に関連する設定値が作業レジスタＲ３に初期設定される。図７の例では、作業レジスタＲ３に値‘３’が初期設定される。
【００６７】
この初期値の設定がなされると、次に、Ｘ線発生装置においてＸ線を１秒間放射させる処理が実行され（ステップＳＴ３０４）、作業レジスタＲ３のデータ値がデクリメントされる（ステップＳＴ３０５）。
ステップＳＴ３０４およびＳＴ３０５の処理は、作業レジスタＲ３のデータ値が‘０’になるまで反復される。該データ値が‘０’になったところで、Ｘ線放射実行プログラムは終了し、呼び出し元のプログラムに処理が戻される（ステップＳＴ３０６）。
以上のプログラムによって、Ｘ線発生装置からＸ線が４秒間放射される。
【００６８】
上述したプログラムでは、コンピュータの処理順序が狂った結果としてステップＳＴ３０２を経ずにステップＳＴ３０３の処理が実行された場合、ユーザの意図しないタイミングでＸ線発生装置からＸ線が放射されるため、非常に危険である。また、ステップＳＴ３０４以降の処理が実行された場合は、作業レジスタＲ３のデータ値が不定なため、長時間に渡ってＸ線が放射され続ける恐れがある。
【００６９】
図８は、本実施形態に係るプログラムにおいて参照されるデータテーブルの一例を示す図である。
本実施形態に係るプログラムにおいては、Ｘ線放射実行プログラムと、このＸ線放射実行プログラムをプログラム領域３１に展開するための展開処理プログラムに対して、図８に示すように、それぞれ所定のデータが割り当てられる。
すなわち、アドレスＡ３（第１の記憶部）には展開処理プログラムに割り当てられるデータＤ３が格納され、アドレスＡ４（第６の記憶部）にはＸ線放射実行プログラムに割り当てられるデータＤ４が格納される。
【００７０】
図９〜図１１は、本実施形態に係るＸ線発生装置の制御用プログラムの処理例を示すフローチャートである。
【００７１】
本実施形態では、Ｘ線放射実行プログラムを呼び出す前に、そのプログラムをプログラム領域３１に展開するための展開処理プログラムが呼び出される。図９のフローチャートは、この展開処理プログラムの呼び出しを行うプログラムにおける処理例を示す。
展開処理プログラムの呼び出し元のプログラムでは、Ｘ線発生装置に対する初期設定が行われた後（ステップＳＴ４０１）、図８に示すデータテーブルのアドレスＡ３から展開処理プログラムに割り当てられているデータＤ３が読み出され（ステップＳＴ４０２）、作業レジスタＲ４（第２の記憶部）に格納される（ステップＳＴ４０３）。
作業レジスタＲ４にデータＤ３が格納された後、展開処理プログラムの呼び出しが実行される（ステップＳＴ４０４）。
【００７２】
作業レジスタＲ４に格納されるデータＤ３は、後述するように、展開処理プログラムにおいて参照される。したがって、ステップＳＴ４０２およびＳＴ４０３においては、呼び出し元プログラムから展開処理プログラムに渡す引数として、図８に示すデータテーブルのデータＤ３を設定する処理が行われる。
【００７３】
図１０のフローチャートは、展開処理プログラムにおける処理例を示す。
展開処理プログラムでは、まず、図８に示すデータテーブルのアドレスＡ３，Ａ４から、展開処理プログラムの割り当てデータＤ３およびＸ線放射実行プログラムの割り当てデータＤ４がそれぞれ読み出される（ステップＳＴ５０１，ＳＴ５０２）。
Ｘ線放射実行プログラムの割り当てデータＤ４は、作業レジスタＲ５（第７の記憶部）に格納される（ステップＳＴ５０３）。
【００７４】
次いで、アドレスＡ３から読み出された展開処理プログラムの割り当てデータＤ３と、作業レジスタＲ４に格納されているデータとが等しいか否か判定される（ステップＳＴ５０４）。これらのデータが等しいと判定された場合、Ｘ線放射実行プログラムをプログラム領域３１に展開する処理が実行される（ステップＳＴ５０５）。
【００７５】
Ｘ線放射実行プログラムは、ステップＳＴ５０５でプログラム領域３１に展開される前において、ＣＰＵ１０が実行することができない状態で、ＲＯＭ２０（第５の記憶部）に格納されている。ステップＳＴ５０５では、この実行不能な状態のＸ線放射実行プログラムを実行可能な状態に変更する処理が行われる。
例えば、圧縮等のデータ処理によってＣＰＵ１０では実行できない形式にされているＸ線放射実行プログラムをＲＯＭ２０から読み出して、ＣＰＵ１０が実行可能な形式に変換した上で、プログラム領域３１に展開する処理が行われる。
【００７６】
また、ＣＰＵ１０によるプログラムの実行を禁止された記憶領域がＲＯＭ２０やＲＡＭ３０に設けられている場合には、こうした実行禁止領域にＸ線放射実行プログラムを予め格納しても良い。この場合、ステップＳＴ５０５においては、実行禁止領域に格納されているＸ線放射実行プログラムをプログラム領域３１に展開することによって、Ｘ線放射実行プログラムを実行不能状態から実行可能状態へ変更することができる。Ｘ線放射実行プログラムが上述のような実行不能な形式で実行禁止領域に記憶されている場合は、実行禁止領域からプログラム領域３１へプログラムをロードする際に、Ｘ線放射実行プログラムを実行可能な形式に変換しても良い。
【００７７】
このようなステップＳＴ５０５の処理によって、Ｘ線放射実行プログラムが実行可能な状態に変更された後、後述するＸ線放射実行プログラムが呼び出される（ステップＳＴ５０６）。そして、このＸ線放射実行プログラムの終了後、プログラム領域３１に展開されたＸ線放射実行プログラムが消去され（ステップＳＴ５０７）、呼び出し元のプログラムに処理が戻される。
【００７８】
一方、ステップＳＴ５０４において、作業レジスタＲ４に格納されているデータがアドレスＡ３のデータＤ３に等しくないと判定された場合は、Ｘ線放射実行プログラムを実行しないまま、呼び出し元のプログラムへ処理が戻される。すなわち、ステップＳＴ５０５〜ＳＴ５０７の処理がスキップされて、呼び出し元のプログラムへの復帰命令が実行される。
【００７９】
作業レジスタＲ５に格納されるデータＤ４は、後述するように、Ｘ線放射実行プログラムにおいて参照される。したがって、ステップＳＴ５０２およびＳＴ５０３においては、展開処理プログラムからＸ線放射実行プログラムに渡す引数として、図８に示すデータテーブルのデータＤ４を設定する処理が行われる。
【００８０】
図１１のフローチャートは、Ｘ線放射実行プログラムにおける処理例を示す。
Ｘ線放射実行プログラムでは、まず図７に示すプログラムと同様に、放射時間の設定値として作業レジスタＲ３に値‘３’が設定される（ステップＳＴ６０１）。
【００８１】
次いで、図８に示すデータテーブルのアドレスＡ４からＸ線放射実行プログラムの割り当てデータＤ４が読み出され（ステップＳＴ６０２）、このデータＤ４と作業レジスタＲ５の記憶データとが等しいか否か判定される（ステップＳＴ６０３）。これらのデータが等しい場合は、図７に示すプログラムと同様に、Ｘ線の放射（ステップＳＴ６０４）、作業レジスタＲ３のデータ値のインクリメント（ステップＳＴ６０５）が行われる。そして、作業レジスタＲ３のデータ値が‘０’になるまで、ステップＳＴ６０２以降の処理が反復された後、呼び出し元の展開処理プログラムへ処理が戻される（ステップＳＴ６０６）。
【００８２】
これに対し、ステップＳＴ６０２において、作業レジスタＲ５の格納データとデータＤ４とが等しくないと判定された場合は、Ｘ線の放射命令が実行されないまま、呼び出し元の展開処理プログラムへ処理が戻される。すなわち、ステップＳＴ６０４以降の命令がスキップされ、展開処理プログラムへの復帰命令が実行される。
【００８３】
以上説明したように、本実施形態に係るプログラムによれば、呼び出し元のプログラムにおいて、展開処理プログラムを呼び出す前に、アドレスＡ３の記憶データが読み出されて、作業レジスタＲ４に格納される（ステップＳＴ４０２，ＳＴ４０３）。
展開処理プログラムでは、Ｘ線放射実行プログラムの呼び出し命令（ステップＳＴ５０６）を実行する前に、アドレスＡ４の記憶データが読み出されて作業レジスタＲ５に格納され（ステップＳＴ５０２，ＳＴ５０３）、更に、アドレスＡ３および作業レジスタＲ４の記憶データが互いに等しいか否かの判定が行われる（ステップＳＴ５０４）。判定の結果、これらの記憶データが互いに等しいと判定された場合、コンピュータにおいて実行することができない状態でＲＯＭ２０に記憶されているＸ線放射実行プログラムが、コンピュータにおいて実行可能な状態に変更されて（ステップＳＴ５０５）、その呼び出し命令が実行される（ステップＳＴ５０６）。一方、判定の結果、これらの記憶データが互いに等しくないと判定された場合は、Ｘ線放射実行プログラムを実行しないまま、呼び出し元のプログラムへ処理が戻される。
Ｘ線放射実行プログラムでは、Ｘ線の放射命令（ステップＳＴ６０５）が実行される前に、アドレスＡ４および作業レジスタＲ５の記憶データが互いに等しいか否かの判定が行われる（ステップＳＴ６０３）。これらの記憶データが等しいと判定された場合、Ｘ線の放射命令が実行され（ステップＳＴ６０４）、これらの記憶データが等しくないと判定された場合は、Ｘ線の放射命令を実行しないまま、呼び出し元の展開処理プログラムへ処理が戻される。
このように、意図せず実行された場合に取り返しのつかない結果を招く恐れがある命令を含んだプログラムは、コンピュータにおいて実行できない状態でＲＯＭ２０やＲＡＭ３０の記憶領域に格納されており、また、このプログラムをコンピュータにおいて実行可能な状態に変更するための展開処理プログラムは、所定のレジスタ（Ｒ４）に所定のデータ（Ｄ３）をセットした状態でなければ実行されない。更に、このプログラムがコンピュータにおいて実行可能な状態になっても、該プログラム中の重大な命令（Ｘ線の放射の実行命令等）は、所定のレジスタ（Ｒ５）に所定のデータ（Ｄ４）をセットした状態でなければ実行されない。したがって、展開処理プログラムを実行しない限りは、たとえコンピュータの処理順序に狂いが生じても、重大な命令を含むプログラムが実行不能であることから、こうしたプログラムが実行可能な状態のまま記憶装置に格納される場合に比べて、信頼性を大幅に向上させることができる。また、展開処理プログラムの実行、ならびに、展開後の該プログラム中の命令の実行が、所定のレジスタに所定のデータがセットされているか否かの条件判定によって二重に制限されるため、第１の実施形態および第２の実施形態に比べてより確実に重大な命令の誤動作を防止することができる。
【００８４】
更に、本実施形態に係るプログラムによれば、重大な命令を含むプログラムの処理が終了した後、プログラム領域３１に実行可能な状態で格納されている該プログラムが展開処理プログラムにおいて消去される。
そのため、該プログラムは、展開処理プログラムによって展開処理が実行されてから該プログラムの処理が終了するまでの期間を除いて、コンピュータに実行可能な状態で存在することができない。したがって、該プログラムの意図しない実行を、一層確実に防止することができる。
【００８５】
以上、本発明の好ましい幾つかの実施形態を述べたが、本発明はこれらの実施形態にのみ限定されるものではなく、例えば次に述べるように、種々の変更が可能である。
【００８６】
上述した実施形態においては、図２や図８に示すように、上位のプログラムから呼び出しを受けるプログラム毎に、それぞれ所定のデータが割り当てられている。このデータは、少なくとも、呼び出し元のプログラムから呼び出し先のプログラムへ正規の手順で処理が移行したか否かを判定することを可能とするものであれば良いため、必ずしもプログラム毎に異なる値を持つ必要はない。
【００８７】
しかしながら、仮に同一値のデータを割り当てられている２つのプログラムの一方を呼び出す際に、何らかの原因によって他方のプログラムが呼び出されてしまった場合、呼び出されたプログラムでは、これが正規の呼び出しと判定されて通常通り命令が実行されてしてしまう。したがって、このような判定の誤りを防止するためには、第１乃至第３の実施形態で示したように、呼び出しを受けるプログラム毎に固有の識別データを割り当てることがより望ましい。
【００８８】
また、この割り当てデータは、図２や図８に示すようなデータテーブルとして、記憶領域の連続したアドレス範囲に格納しても良いし、それぞれのデータを記憶領域の任意のアドレスに格納しても良い。
【００８９】
上述した実施形態では、呼び出し元のプログラムと、該プログラムに呼び出される下位プログラムとを有する例が示されているが、本発明はこれに限定されない。すなわち、更に多くのプログラムが多重に呼び出される構造を有する場合でも、各呼び出し先のプログラムにおいて、上述と同様な方法により、正規の呼び出しであるか否かの判定を行って、下位プログラムの呼び出しを制限しても良い。
【００９０】
図１に示すコンピュータの構成は説明上の一例であり、ＣＰＵの内部構成や記憶装置の構成などは任意である。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施形態に係るプログラムが実行されるコンピュータの構成の一例を示す図である。
【図２】第１の実施形態に係るプログラムにおいて参照されるデータテーブルの一例を示す図である。
【図３】第１の実施形態に係るプログラムにおける処理の一例を示す第１のフローチャートである。
【図４】第１の実施形態に係るプログラムにおける処理の一例を示す第２のフローチャートである。
【図５】第２の実施形態に係るプログラムにおける処理の一例を示すフローチャートである。
【図６】コンピュータの処理順序が狂った場合の対策を講じていないＸ線発生装置制御用プログラムにおける処理の一例を示す第１のフローチャートである。
【図７】コンピュータの処理順序が狂った場合の対策を講じていないＸ線発生装置制御用プログラムにおける処理の一例を示す第２のフローチャートである。
【図８】第３の実施形態に係るプログラムにおいて参照されるデータテーブルの一例を示す図である。
【図９】第３の実施形態に係るプログラムにおける処理の一例を示す第１のフローチャートである。
【図１０】第３の実施形態に係るプログラムにおける処理の一例を示す第２のフローチャートである。
【図１１】第３の実施形態に係るプログラムにおける処理の一例を示す第３のフローチャートである。
【図１２】従来のメモリ消去処理プログラムの機械語による記述例を示す図である。
【図１３】図１２に示すメモリ消去処理プログラムが格納される記憶領域の一例を示す図である。
【図１４】図１２に示すメモリ消去処理プログラムにおける処理の一例を示す第１のフローチャートである。
【図１５】図１２に示すメモリ消去処理プログラムにおける処理の一例を示す第２のフローチャートである。
【符号の説明】
【００９２】
１０…ＣＰＵ、２０…ＲＯＭ、３０…ＲＡＭ、３１…プログラム領域、３２…データ領域、４０…バス、ＰＣ…プログラムカウンタ、Ｒ１〜Ｒ５…作業レジスタ
【図１】
2005242857.tif 000003
【図２】
2005242857.tif 000004
【図３】
2005242857.tif 000005
【図４】
2005242857.tif 000006
【図５】
2005242857.tif 000007
【図６】
2005242857.tif 000008
【図７】
2005242857.tif 000009
【図８】
2005242857.tif 000010
【図９】
2005242857.tif 000011
【図１０】
2005242857.tif 000012
【図１１】
2005242857.tif 000013
【図１２】
2005242857.tif 000014
【図１３】
2005242857.tif 000015
【図１４】
2005242857.tif 000016
【図１５】
2005242857.tif 000017