(57)【要約】  【課題】  ユーザプログラムによって特権プログラムが不正に実行されることを防ぎセキュリティを確保すると共に、ユーザプログラムから特権プログラムへの正当な分岐の場合のリアルタイム性を向上させるプロセッサを提供する。  【解決手段】  ＣＰＵ４０１と、プログラムを格納するためのフラッシュメモリ４０４とを備えたプロセッサにおいて、フラッシュメモリ４０４に格納されているプログラムによって、動作モードを異なる動作モードへ変更する分岐命令が実行された際、不正分岐検出回路４０９が、分岐先アドレスに分岐許可命令が存在するか否かを判断し、前記分岐許可命令が存在しない場合は不正分岐検出信号を出力することにより、ユーザプログラムによって特権プログラムが不正に実行されることを防止する。【選択図】  図１
2004280801.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
プログラムを格納するための命令メモリと、
前記命令メモリに格納されているプログラムによって、動作モードを異なる動作モードへ変更する分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在するか否かを判断し、前記分岐許可命令が存在する場合は動作モードの変更を許可する一方、前記分岐許可命令が存在しない場合は不正分岐検出信号を出力する不正分岐検出部とを備えたことを特徴とするプロセッサ。
【請求項２】
前記ＣＰＵが実行している命令のプログラムカウンタの値によって実行領域を判定する実行領域判定部と、
前記実行領域判定部の判定結果によって、実行中の動作モードを決定する実行動作モード決定部と、
前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスの値によって分岐先領域を判定する分岐先領域判定部と、
前記分岐先領域判定部の判定結果によって、前記分岐命令による移行先の動作モードを決定する分岐先動作モード決定部と、
前記実行動作モード決定部によって決定された実行動作モードと、前記分岐先動作モード決定部によって決定された移行先動作モードとを比較することによって動作モードが変更されたか否かを検出する動作モード変更検出部とをさらに備え、
前記不正分岐検出部が、前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在しない場合は、前記動作モード変更検出部によって動作モードの変更が検出されたことを条件として前記不正分岐検出信号を出力する、請求項１に記載のプロセッサ。
【請求項３】
前記不正分岐検出部が、前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在しない場合は、前記動作モード変更検出部によって動作モードの変更が検出され、かつ、前記動作モード変更検出部によって検出された動作モードの変更と分岐許可命令が指定する動作モードの変更とが一致しないことを条件として、前記不正分岐検出信号を出力する、請求項２に記載のプロセッサ。
【請求項４】
前記分岐許可命令に、他の命令と重複しない特定の命令コードが割り当てられた、請求項１に記載のプロセッサ。
【請求項５】
前記分岐許可命令に、１つまたは複数の他の命令に対応する命令コードが重複して割り当てられた、請求項３に記載のプロセッサ。
【請求項６】
分岐許可命令が検出された際、当該命令コードを他の命令に対応する命令コードに変換する分岐許可命令コード変換部をさらに備えた、請求項３に記載のプロセッサ。
【請求項７】
前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、前記ＣＰＵに対して割り込み要求を出力する割り込み出力部をさらに備えた、請求項１に記載のプロセッサ。
【請求項８】
前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、前記ＣＰＵに対してリセット信号を出力するリセット出力部をさらに備えた、請求項１に記載のプロセッサ。
【請求項９】
前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、分岐先アドレスの命令を未定義命令に置き換える命令変換部をさらに備えた、請求項１に記載のプロセッサ。
【請求項１０】
請求項１〜９のいずれかに記載のプロセッサ用のプログラムを生成するコンパイラ装置であって、
ソースプログラムをコンパイルしアセンブラに変換する際に、ソースプログラム内の関数構造と動作モードとを判定することにより、特権領域のプログラムの所定位置に前記分岐許可命令を挿入することを特徴とするコンパイラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令メモリに対して外部からプログラムを追加できるプロセッサにおける命令実行保護に関するものである。
【背景技術】
【０００２】
通常、プロセッサは、命令メモリに格納されたプログラムに従って、データ処理、演算処理などの各種処理を実行する。
【０００３】
以上のような従来のプロセッサについて、図面を参考にしながら以下に説明する。
【０００４】
図６は、従来の技術によって開発されたプロセッサを用いたＩＣカードシステムを表すブロック図である。
【０００５】
従来の技術によって開発されたプロセッサを用いたＩＣカードシステムは、図６に示すように、ＣＰＵ１０１と、命令ＲＯＭ１０２と、ＲＡＭ１０３と、フラッシュメモリ１０４と、外部Ｉ／Ｆ１０５と、アンテナコイル１０６と、アドレスバス１０７ａと、データバス１０７ｄと、割り込み制御回路１０８と、分岐許可アドレス判定回路１０９によって構成される。
【０００６】
ＣＰＵ１０１は、命令フェッチ部１０１１と、命令解読部１０１２と、命令実行部１０１３と、プログラムカウンタ１０１４と、メモリアクセス制御回路１０１５とによって構成される。
【０００７】
ＣＰＵ１０１は、命令ＲＯＭ１０２またはフラッシュメモリ１０４に格納された命令を読み出し実行していく。フラッシュメモリ１０４に対しては、アンテナコイル１０６および外部Ｉ／Ｆ１０５を介して、外部からプログラムデータを追加することが可能である。
【０００８】
図７は、従来の技術によって開発されたプロセッサを用いたメモリ空間の領域区分の概念図である。
【０００９】
図７において、２００は全論理アドレス空間を表す。全論理アドレス空間２００は、外部Ｉ／Ｆ１０５、命令ＲＯＭ１０２、ＲＡＭ１０３、および、フラッシュメモリ１０４に割り当てられている。全論理アドレス空間２００のうち、命令ＲＯＭ空間は特権領域２１１とＡＰＩ領域２１２に、ＲＡＭ領域は特権領域２２１とＡＰＩ領域２２２とユーザ領域２２３に、フラッシュメモリはユーザ領域２３１に、外部Ｉ／Ｆはユーザ領域２４１に、それぞれ区分されている。
【００１０】
図８は、従来の技術によって開発されたプロセッサ用のプログラム概念図である。図８において、ユーザプログラム３０２における命令群３０２１は、ユーザプログラム３０２から特権プログラム３０１（命令群３０１１）への実行の移行を行うための処理を記述したものであり、ユーザプログラム３０２における命令群３０２２は、ユーザプログラム３０２から特権プログラム３０１（命令群３０１２）への実行の移行を行うための処理を記述したものである。特権プログラム３０１における命令群３０１１は、その処理内容の詳細な図示は省略してあるが、ユーザプログラム３０２から命令群３０１２または命令群３０１３への実行の移行を行うための処理を記述したものである。
【００１１】
従来の技術によって開発された上記ＩＣカードシステムにおいては、ユーザプログラムによって特権プログラムおよびＡＰＩプログラムが不正に実行されることを防ぎ、セキュリティを確保するために、動作モードの移行を伴う分岐が発生した場合は、以下に示す方法がとられる(例えば特許文献１を参照。)。
【００１２】
第一に、ユーザプログラム上で実行を希望する特権プログラムまたはＡＰＩプログラムが格納されているアドレスを、演算用レジスタに設定する。第二に、分岐許可アドレス判定回路１０９によって定められた特定の分岐許可アドレスに対して分岐命令を実行する。第三に、分岐許可アドレス上に格納されている条件判定プログラムによって、演算用レジスタに設定されたアドレスの正当性が判定され、正当であれば、ユーザプログラムが実行を希望する特権プログラムまたはＡＰＩプログラムが格納されているアドレスに対し、再度分岐命令が実行される。
【００１３】
また、ユーザプログラムから、分岐許可アドレス判定回路１０９に定められていない特権プログラムまたはＡＰＩプログラム中のアドレスに対して分岐命令を実行した場合は、分岐許可アドレス判定回路１０９によって割り込み要求が出力されるため、セキュリティが確保される。
【特許文献１】特開２００２−１８２９３１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、上記のようなプロセッサを用いたＩＣカードシステムにおいては、ユーザプログラムから特権プログラムに実行が移行する際に条件判定プログラムの実行が発生するため、リアルタイム性が低下するという問題がある。
【００１５】
本発明は、上記従来の問題点を解決するためのものであり、例えばユーザプログラムから特権プログラムへ実行が移行する際のセキュリティを確保しつつ、リアルタイム性向上が可能なプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記の目的を達成するために、本発明のプロセッサは、ＣＰＵと、プログラムを格納するための命令メモリと、前記命令メモリに格納されているプログラムによって、動作モードを異なる動作モードへ変更する分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在するか否かを判断し、前記分岐許可命令が存在する場合は動作モードの変更を許可する一方、前記分岐許可命令が存在しない場合は不正分岐検出信号を出力する不正分岐検出部とを備えたことを特徴とする。
【００１７】
上述の構成にかかる本発明のプロセッサに関して、動作モードの変更とは、例えば、ある動作モードから、当該動作モードよりも高い権限を必要とする動作モードへの変更を言う。
【発明の効果】
【００１８】
上記の構成を備えたことにより、本発明のプロセッサは、ユーザプログラムから例えば特権プログラムまたはＡＰＩプログラム中のアドレスに対して分岐命令が実行された際、分岐先アドレス上に分岐許可命令が格納されていない場合は不正分岐検出部が不正分岐検出信号を出力するため、ユーザプログラムによって特権プログラム等が不正に実行されることを防ぎ、セキュリティを確保できる。またユーザプログラム上から、特権プログラムまたはＡＰＩプログラムを正当に実行する際、ユーザプログラム上で実行を希望する特権プログラムまたはＡＰＩプログラムが格納されているアドレスに対して、分岐命令を直接実行することができるため、動作モードの移行に伴う処理時間が削減され、リアルタイム性が向上する。
【発明を実施するための最良の形態】
【００１９】
本発明のプロセッサは、前記ＣＰＵが実行している命令のプログラムカウンタの値によって実行領域を判定する実行領域判定部と、前記実行領域判定部の判定結果によって、実行中の動作モードを決定する実行動作モード決定部と、前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスの値によって分岐先領域を判定する分岐先領域判定部と、前記分岐先領域判定部の判定結果によって、前記分岐命令による移行先の動作モードを決定する分岐先動作モード決定部と、前記実行動作モード決定部によって決定された実行動作モードと、前記分岐先動作モードによって決定された移行先動作モードとを比較することによって動作モードが変更されたか否かを検出する動作モード変更検出部とをさらに備え、前記不正分岐検出部が、前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在しない場合は、前記動作モード変更検出部によって動作モードの変更が検出されたことを条件として前記不正分岐検出信号を出力することが好ましい。
【００２０】
前記の構成において、分岐許可命令には、他の命令と重複しない特定の命令コードを割り当てることが好ましい。これにより、他の命令を処理するための資源に影響を与えることがなく、リアルタイム性を向上させることができる。
【００２１】
また、本発明のプロセッサは、前記不正分岐検出部が、前記命令メモリに格納されているプログラムによって分岐命令が実行された際、分岐先アドレスに分岐許可命令が存在しない場合は、前記動作モード変更検出部によって動作モードの変更が検出され、かつ、前記動作モード変更検出部によって検出された動作モードの変更と分岐許可命令が指定する動作モードの変更とが一致しないことを条件として、不正分岐検出信号を出力することがさらに好ましい。また、この構成において、前記分岐許可命令には、１つまたは複数の他の命令に対応する命令コードを重複して割り当てることが好ましい。あるいは、分岐許可命令が検出された際、当該命令コードを他の命令に対応する命令コードに変換する分岐許可命令コード変換部をさらに備えた構成とすることも好ましい。
【００２２】
また、本発明のプロセッサは、前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、前記ＣＰＵに対して割り込み要求を出力する割り込み出力部をさらに備えた構成とすることが好ましい。
【００２３】
あるいは、本発明のプロセッサは、前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、前記ＣＰＵに対してリセット信号を出力するリセット出力部をさらに備えた構成としても良い。
【００２４】
また、本発明のプロセッサは、前記不正分岐検出部より前記不正分岐検出信号が出力されたことを検知すると、分岐先アドレスの命令を未定義命令に置き換える命令変換部をさらに備えた構成としても良い。
【００２５】
また、上記の目的を達成するために、本発明にかかるコンパイラ装置は、上述のいずれかの構成にかかるプロセッサ用のプログラムを生成するコンパイラ装置であって、ソースプログラムをコンパイルしアセンブラに変換する際に、ソースプログラム内の関数構造と動作モードとを判定することにより、特権領域のプログラムの所定位置に前記分岐許可命令を挿入することを特徴とする。
【００２６】
以下、本発明のプロセッサおよびコンパイラ装置の具体例について、図面を参照しながら説明する。
【００２７】
（実施の形態１）
本発明のプロセッサの一実施形態について、図１を参照しながら説明する。
【００２８】
図１は、本実施形態のプロセッサ４００を用いたＩＣカードシステムを表すブロック図である。
【００２９】
本実施形態のプロセッサ４００を用いたＩＣカードシステムは、図１に示すように、ＣＰＵ４０１と、命令ＲＯＭ４０２と、ＲＡＭ４０３と、フラッシュメモリ４０４と、外部Ｉ／Ｆ４０５と、アンテナコイル４０６と、アドレスバス４０７ａと、データバス４０７ｄと、割り込み制御回路４０８と、不正分岐検出回路４０９と、実行領域判定回路４１０と、実行動作モード決定回路４１１と、分岐先領域判定回路４１２と、分岐先動作モード決定回路４１３と、動作モード変更検出回路４１４とによって構成される。
【００３０】
更に、ＣＰＵ４０１は、命令フェッチ部４０１１と、命令解読部４０１２と、命令実行部４０１３と、プログラムカウンタ４０１４と、メモリアクセス制御回路４０１５とによって構成される。
【００３１】
ＣＰＵ４０１は、命令ＲＯＭ４０２またはフラッシュメモリ４０４に格納された命令を読み出し実行していく。フラッシュメモリ４０４に対しては、アンテナコイル４０６および外部Ｉ／Ｆ４０５を介して、外部からプログラムデータを追加することが可能である。
【００３２】
図７は、本実施形態のプロセッサ４００を用いたメモリ空間の領域区分の概念図である。
【００３３】
図７において、２００は全論理アドレス空間を表し、命令ＲＯＭ空間は特権領域２１１とＡＰＩ領域２１２に、ＲＡＭ領域は特権領域２２１とＡＰＩ領域２２２とユーザ領域２２３に、フラッシュメモリはユーザ領域２３１に、外部Ｉ／Ｆはユーザ領域２４１に、それぞれ区分されている。
【００３４】
図２は、本実施形態のプロセッサ４００用のプログラム概念図である。
【００３５】
図２に示すように、特権領域中の特権プログラム５０１およびＡＰＩ領域中のＡＰＩプログラム５０２のそれぞれには、ユーザ領域中のユーザプログラム５０３から、分岐命令(ｊｍｐ)によって、特権領域中の特権プログラム５０１またはＡＰＩ領域中のＡＰＩプログラム５０２に実行が移行する際に、分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ）を記述する。ここで、分岐許可命令（ａｃｃｅｐｔ）は、既存命令の命令コードと一致しない特別の命令コードを持つ。
【００３６】
実行領域判定回路４１０は、実行プログラムカウンタ値ｓ４０１８から、図７に示したメモリ空間の領域区分に従い、現在実行されている命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定する。判定結果は、実行領域判定信号ｓ４１０として実行動作モード決定回路４１１へ出力される。実行動作モード決定回路４１１は、実行領域判定信号ｓ４１０の値に従い、実行動作モードを、特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、実行動作モード決定信号ｓ４１１として出力される。
【００３７】
ＣＰＵ４０１は、命令フェッチプログラムカウンタ値ｓ４０１５または分岐先アドレス値ｓ４０１４のいずれかをメモリアクセス制御回路４０１５によって選択して、メモリアクセスアドレス信号ｓ４０１６として出力する。
【００３８】
分岐先領域判定回路４１２は、メモリアクセスアドレス信号ｓ４０１６から、図７に示したメモリ空間の領域区分に従い、分岐先命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として分岐先領域判定信号ｓ４１２を出力する。分岐先動作モード決定回路４１３は、分岐先領域判定信号ｓ４１２の値に従い、動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定し、決定結果として分岐先動作モード決定信号ｓ４１３を出力する。
【００３９】
動作モード変更検出回路４１４は、実行動作モード決定信号ｓ４１１と分岐先動作モード決定信号ｓ４１３から動作モードの変化を検出し、動作モード変更検出信号ｓ４１４を出力する。
【００４０】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４と命令フェッチデータｓ４０７ｄとに従い、以下の処理を行う。
【００４１】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって、ユーザプログラムからＡＰＩプログラム、または、ユーザプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したと判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ）でない場合は、不正分岐検出信号ｓ４０９をアクティブとする。
【００４２】
なお、不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって動作モードが変更しないと判定した場合、あるいは、動作モードが変更する場合であっても、その動作モードの変更が、ユーザプログラムからＡＰＩプログラムへの変更、または、ユーザプログラムから特権プログラムへの変更のいずれでもないと判定した場合は、不正分岐検出信号ｓ４０９を非アクティブとする。
【００４３】
ＣＰＵ４０１内部での分岐許可命令（ａｃｃｅｐｔ）に対する処理は、命令解読部４０１２を機能拡張し、命令実行部４０１３の制御をノーオペレーション命令と同一とすることで、ＣＰＵ４０１内部のデータ・演算処理用の資源に影響を与えることなく、最短実行処理サイクルで実行される。
【００４４】
以上により、動作モードの移行を伴う分岐命令が実行された際、分岐先アドレス上にその分岐命令の実行を許可する分岐許可命令が格納されていない場合は、不正分岐検出回路４０９が不正分岐検出信号ｓ４０９を出力する。不正分岐検出信号ｓ４０９は、ＯＲ回路４１５へ与えられる。ＯＲ回路４１５には、割り込み制御回路４０８から割り込み信号ｓ４０８１も与えられており、不正分岐検出信号ｓ４０９がアクティブである場合に、割り込み要求ｓ４０８１２がＣＰＵ４０１へ出力される。
【００４５】
これにより、例えばフラッシュメモリ４０４に外部から追加されたユーザプログラム等によって命令ＲＯＭ４０２に格納された特権プログラムが不正に実行されることを防ぎ、セキュリティを確保できる。また、正当な処理の場合、実行を希望するプログラムが格納されているアドレスに対して直接分岐命令を実行できるので、動作モードの移行を最短実行処理サイクルで処理でき、リアルタイム性が向上する。
【００４６】
なお、本実施形態では、不正分岐検出信号ｓ４０９がアクティブである場合にＣＰＵ４０１へ割り込み要求を出力する構成を例示したが、図１に示す割り込み制御回路４０８の代わりに、ＣＰＵ４０１に対するリセット信号を出力するリセット制御回路を備えた構成としても良い。この場合、不正分岐検出信号ｓ４０９がアクティブである場合に、ＣＰＵ４０１へリセット信号ｓ４０８１２が出力されることとなり、上述の構成と同様に、特権プログラムが不正に実行されることを防ぐという効果が得られる。
【００４７】
（実施の形態２）
本発明の実施の形態２にかかるプロセッサ４００を用いたＩＣカードシステムについて、以下に説明する。
【００４８】
本実施形態のプロセッサ４００を用いたＩＣカードシステムのハードウェア構成は、実施の形態１のＩＣカードシステムと同様である（図１参照）。また、本実施形態のプロセッサ４００を用いたメモリ空間の領域区分も、実施の形態１と同様である（図７参照）。
【００４９】
図３は、本実施形態のプロセッサ４００用のプログラム概念図である。
【００５０】
ＡＰＩ領域中のＡＰＩプログラム６０２には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によってＡＰＩ領域中のＡＰＩプログラム６０２に実行が移行する際に、ＡＰＩ領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００５１】
特権領域中の特権プログラム６０１には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００５２】
また、特権領域中の特権プログラム６０１には、ＡＰＩ領域中のＡＰＩプログラム６０２から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ａｐｉ）を記述する。
【００５３】
ここで、分岐許可命令（ａｃｃｅｐｔ）は既存命令の命令コードと一致しない特別の命令コードを持つ。
【００５４】
実行領域判定回路４１０は、実行プログラムカウンタ値ｓ４０１８から、図７に示したメモリ空間の領域区分に従い、現在実行されている命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として実行領域判定信号ｓ４１０を出力する。実行動作モード決定回路４１１は、実行領域判定信号ｓ４１０の値に従い、実行動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、実行動作モード決定信号ｓ４１１として出力される。
【００５５】
ＣＰＵ４０１は、命令フェッチプログラムカウンタ値ｓ４０１５または分岐先アドレス値ｓ４０１４いずれかをメモリアクセス制御回路４０１５によって選択し、メモリアクセスアドレス信号ｓ４０１６として出力する。
【００５６】
分岐先領域判定回路４１２は、メモリアクセスアドレス信号ｓ４０１６から、図７に示したメモリ空間の領域区分に従い、分岐先の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として分岐先領域判定信号ｓ４１２を出力する。分岐先動作モード決定回路４１３は分岐先領域判定信号ｓ４１２の値に従い動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、分岐先動作モード決定信号ｓ４１３として出力される。
【００５７】
動作モード変更検出回路４１４は、実行動作モード決定信号ｓ４１１と分岐先動作モード決定信号ｓ４１３から動作モードの変化を検出し、動作モード変更検出信号ｓ４１４を出力する。
【００５８】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４と、命令フェッチデータｓ４０７ｄに従い、以下の処理を行う。
【００５９】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によってユーザプログラムからＡＰＩプログラムまたはユーザプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）でない場合は、不正分岐検出信号ｓ４０９をアクティブとする。
【００６０】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によってＡＰＩプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）またはＡＰＩプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ａｐｉ）でない場合は、不正分岐検出信号ｓ４０９をアクティブとする。
【００６１】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって、動作モードが変更しないと判定した場合、あるいは、動作モードが変更する場合であっても、その動作モードの変更が、ユーザプログラムからＡＰＩプログラムへの変更、ユーザプログラムから特権プログラム、または、ＡＰＩプログラムから特権プログラムへの変更のいずれでもないと判定した場合は、不正分岐検出信号ｓ４０９を非アクティブとする。
【００６２】
ＣＰＵ４０１内部の分岐許可命令（ａｃｃｅｐｔ）に対する処理は、命令解読部４０１２を機能拡張し、命令実行部４０１３の制御をノーオペレーション命令と同一にすることで、ＣＰＵ４０１内部のデータ・演算処理用の資源に影響を与えることなく、最短実行処理サイクルで実行される。
【００６３】
以上により、動作モードの移行を伴う分岐命令が実行された際、分岐先アドレス上にその分岐命令の実行を許可する分岐許可命令が格納されていない場合は、不正分岐検出回路４０９が不正分岐検出信号ｓ４０９を出力する。
【００６４】
不正分岐検出信号ｓ４０９は、ＯＲ回路４１５へ与えられる。ＯＲ回路４１５には、割り込み制御回路４０８から割り込み信号ｓ４０８１も与えられており、不正分岐検出信号ｓ４０９がアクティブである場合に、割り込み要求ｓ４０８１２がＣＰＵ４０１へ出力される。これにより、フラッシュメモリ４０４に外部から追加されたユーザプログラム等によって命令ＲＯＭ４０２に格納された特権プログラムが不正に実行されることを防ぎ、セキュリティを確保できる。正当な処理の場合、実行を希望するプログラムが格納されているアドレスに対して直接分岐命令を実行できるので、動作モードの移行を最短実行処理サイクルで処理でき、リアルタイム性が向上する。
【００６５】
なお、本実施形態では、不正分岐検出信号ｓ４０９がアクティブである場合にＣＰＵ４０１へ割り込み要求を出力する構成を例示したが、図１に示す割り込み制御回路４０８の代わりに、ＣＰＵ４０１に対するリセット信号を出力するリセット制御回路を備えた構成としても良い。この場合、不正分岐検出信号ｓ４０９がアクティブである場合に、ＣＰＵ４０１へリセット信号ｓ４０８１２が出力されることとなり、上述の構成と同様に、特権プログラムが不正に実行されることを防ぐという効果が得られる。
【００６６】
（実施の形態３）
本発明の実施の形態３にかかるプロセッサ４００を用いたＩＣカードシステムについて、以下に説明する。
【００６７】
本実施形態のプロセッサ４００を用いたＩＣカードシステムのハードウェア構成は、実施の形態１のＩＣカードシステムと同様である（図１参照）。また、本実施形態のプロセッサ４００を用いたメモリ空間の領域区分も、実施の形態１と同様である（図７参照）。
【００６８】
図３は、本実施形態のプロセッサ４００用のプログラム概念図である。
【００６９】
ＡＰＩ領域中のＡＰＩプログラム６０２には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によってＡＰＩ領域中のＡＰＩプログラム６０２に実行が移行する際に、ＡＰＩ領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００７０】
特権領域中の特権プログラム６０１には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００７１】
また特権領域中の特権プログラム６０１には、ＡＰＩ領域中のＡＰＩプログラム６０２から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ａｐｉ）を記述する。
【００７２】
上述のように、本実施形態のプロセッサ４００用のプログラム記述方法は、実施の形態２と同じである。しかし、本実施形態のプロセッサ４００は、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）およびＡＰＩプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ａｐｉ）に、それぞれ特殊な命令コードを割り当てず、実プログラム上での使用頻度が低く、かつ、ＣＰＵ４０１のデータ・演算処理用の資源に影響を与えることのない、既存命令のいずれかと同じ命令コードを重複して割り当てる点において、実施の形態２と異なっている。
【００７３】
実行領域判定回路４１０は、実行プログラムカウンタ値ｓ４０１８から、図７に示したメモリ空間の領域区分に従い、現在実行されている命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として実行領域判定信号ｓ４１０を出力する。実行動作モード決定回路４１１は、実行領域判定信号ｓ４１０の値に従い、実行動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、実行動作モード決定信号ｓ４１１として出力される。
【００７４】
ＣＰＵ４０１は、命令フェッチプログラムカウンタ値ｓ４０１５または分岐先アドレス値ｓ４０１４いずれかをメモリアクセス制御回路４０１５によって選択し、メモリアクセスアドレス信号ｓ４０１６として出力する。
【００７５】
分岐先領域判定回路４１２は、メモリアクセスアドレス信号ｓ４０１６から、図７に示したメモリ空間の領域区分に従い、分岐先命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として分岐先領域判定信号ｓ４１２を出力する。分岐先動作モード決定回路４１３は、分岐先領域判定信号ｓ４１２の値に従い、動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、分岐先動作モード決定信号ｓ４１３として出力される。
【００７６】
動作モード変更検出回路４１４は、実行動作モード決定信号ｓ４１１と分岐先動作モード決定信号ｓ４１３から動作モードの変化を検出し、動作モード変更検出信号ｓ４１４を出力する。
【００７７】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４と、命令フェッチデータｓ４０７ｄに従い、以下の処理を行う。
【００７８】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって、ユーザプログラムからＡＰＩプログラムへ、または、ユーザプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）でない場合は、不正分岐検出信号ｓ４０９をアクティブとする。
【００７９】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって、ＡＰＩプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）またはＡＰＩプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ａｐｉ）でない場合は、不正分岐検出信号ｓ４０９をアクティブとする。
【００８０】
不正分岐検出回路４０９は、動作モード変更検出信号ｓ４１４によって、動作モードが変更しないと判定した場合、あるいは、動作モードが変更する場合であっても、その動作モードの変更が、ユーザプログラムからＡＰＩプログラムへの変更、ユーザプログラムから特権プログラム、またはＡＰＩプログラムから特権プログラムへの変更のいずれでもないと判定した場合は、不正分岐検出信号ｓ４０９を非アクティブとする。
【００８１】
分岐許可命令（ａｃｃｅｐｔ）は既存命令と同一の命令コードに割り当てられているため、命令解読部４０１２は既存のものを使用できる。また、ＣＰＵ４０１内部の分岐許可命令（ａｃｃｅｐｔ）に対する処理は、割り当てられた既存命令と同一の実行処理内容、実行処理サイクルで実行される。
【００８２】
以上により、動作モードの移行を伴う分岐命令が実行された際、分岐先アドレス上にその分岐命令の実行を許可する分岐許可命令が格納されていない場合は、不正分岐検出回路４０９が不正分岐検出信号ｓ４０９を出力する。
【００８３】
不正分岐検出信号ｓ４０９は、ＯＲ回路４１５へ与えられる。ＯＲ回路４１５には、割り込み制御回路４０８から割り込み信号ｓ４０８１も与えられており、不正分岐検出信号ｓ４０９がアクティブである場合に、割り込み要求ｓ４０８１２がＣＰＵ４０１へ出力される。例えばフラッシュメモリ４０４に外部から追加されたユーザプログラム等によって命令ＲＯＭ４０２に格納された特権プログラムが不正に実行されることを防ぎ、セキュリティを確保できる。
【００８４】
正当な処理の場合、実行を希望するプログラムが格納されているアドレスに対して直接分岐命令を実行できるので、動作モードの移行を分岐許可命令に割り当てられた既存命令１命令分と同一の実行処理サイクルで処理でき、リアルタイム性が向上する。また、ＣＰＵ４０１に関しては既存のものを流用できるため設計容易性が高い。
【００８５】
なお、本実施形態では、不正分岐検出信号ｓ４０９がアクティブである場合にＣＰＵ４０１へ割り込み要求を出力する構成を例示したが、図１に示す割り込み制御回路４０８の代わりに、ＣＰＵ４０１に対するリセット信号を出力するリセット制御回路を備えた構成としても良い。この場合、不正分岐検出信号ｓ４０９がアクティブである場合に、ＣＰＵ４０１へリセット信号ｓ４０８１２が出力されることとなり、上述の構成と同様に、特権プログラムが不正に実行されることを防ぐという効果が得られる。
【００８６】
（実施の形態４）
図４は、実施の形態４にかかるプロセッサ７００を用いたＩＣカードシステムを表すブロック図である。
【００８７】
本実施形態のプロセッサ７００を用いたＩＣカードシステムは、図４に示すように、ＣＰＵ７０１と、命令ＲＯＭ７０２と、ＲＡＭ７０３と、フラッシュメモリ７０４と、外部Ｉ／Ｆ７０５と、アンテナコイル７０６と、アドレスバス７０７ａと、データバス７０７ｄと、割り込み制御回路７０８と、不正分岐検出回路７０９と、実行領域判定回路７１０と、実行動作モード決定回路７１１と、分岐先領域判定回路７１２と、分岐先動作モード決定回路７１３と、動作モード変更検出回路７１４と、分岐許可命令コード変換回路７１５とによって構成される。
【００８８】
更に、ＣＰＵ７０１は、命令フェッチ部７０１１と、命令解読部７０１２と、命令実行部７０１３と、プログラムカウンタ７０１４と、メモリアクセス制御回路７０１５とによって構成される。
【００８９】
ＣＰＵ７０１は、命令ＲＯＭ７０２またはフラッシュメモリ７０４に格納された命令を読み出し実行していく。フラッシュメモリ７０４に対しては、アンテナコイル７０６および外部Ｉ／Ｆ７０５を介して、外部からプログラムデータを追加することが可能である。
【００９０】
本実施形態のプロセッサ７００を用いたメモリ空間の領域区分の概念図は、実施の形態１で説明した図７のとおりである。
【００９１】
図３は、実施の形態４のプロセッサ７００用のプログラム概念図である。
【００９２】
ＡＰＩ領域中のＡＰＩプログラム６０２には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によってＡＰＩ領域中のＡＰＩプログラム６０２に実行が移行する際に、ＡＰＩ領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００９３】
特権領域中の特権プログラム６０１には、ユーザ領域中のユーザプログラム６０３から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）を記述する。
【００９４】
また特権領域中の特権プログラム６０１には、ＡＰＩ領域中のＡＰＩプログラム６０２から分岐命令(ｊｍｐ)によって特権領域中の特権プログラム６０１に実行が移行する際に、特権領域中の分岐先アドレスが正当なアドレスかどうかを指定するための分岐許可命令（ａｃｃｅｐｔ ａｐｉ）を記述する。
【００９５】
すなわち、本実施形態のプロセッサ７００用のプログラム記述は、前述の実施の形態３と同様である。ただし、本実施形態では、分岐許可命令（ａｃｃｅｐｔ）は、既存命令の命令コードと一致しない特別の命令コードを持つ。
【００９６】
実行領域判定回路７１０は、実行プログラムカウンタ値ｓ７０１８から、図７に示したメモリ空間の領域区分に従い、現在実行されている命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として実行領域判定信号ｓ７１０を出力する。実行動作モード決定回路７１１は、実行領域判定信号ｓ７１０の値に従い、実行動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、実行動作モード決定信号ｓ７１１として出力される。
【００９７】
ＣＰＵ７０１は、命令フェッチプログラムカウンタ値ｓ７０１５または分岐先アドレス値ｓ７０１４いずれかをメモリアクセス制御回路７０１５によって選択し、メモリアクセスアドレス信号ｓ７０１６として出力する。
【００９８】
分岐先領域判定回路７１２は、メモリアクセスアドレス信号ｓ７０１６から、図７に示したメモリ空間の領域区分に従い、分岐先命令の領域が特権領域、ＡＰＩ領域、ユーザ領域のいずれであるかを判定し、判定結果として分岐先領域判定信号ｓ７１２を出力する。分岐先動作モード決定回路７１３は、分岐先領域判定信号ｓ７１２の値に従い、動作モードを特権モード、ＡＰＩモード、ユーザモードのいずれかに決定する。決定結果は、分岐先動作モード決定信号ｓ７１３として出力される。
【００９９】
動作モード変更検出回路７１４は、実行動作モード決定信号ｓ７１１と分岐先動作モード決定信号ｓ７１３から動作モードの変化を検出し、動作モード変更検出信号ｓ７１４を出力する。
【０１００】
不正分岐検出回路７０９は、動作モード変更検出信号ｓ７１４と、命令フェッチデータｓ７０７ｄに従い、以下の処理を行う。
【０１０１】
不正分岐検出回路７０９は、動作モード変更検出信号ｓ７１４によって、ユーザプログラムからＡＰＩプログラム、または、ユーザプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）でない場合は、不正分岐検出信号ｓ７０９をアクティブとする。
【０１０２】
不正分岐検出回路７０９は、動作モード変更検出信号ｓ７１４によって、ＡＰＩプログラムから特権プログラムへの実行の移行を伴う分岐命令が発生したことを判定した場合は、分岐先アドレスに格納されている命令コードを解読し、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）またはＡＰＩプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ａｐｉ）でない場合は、不正分岐検出信号ｓ７０９をアクティブとする。
【０１０３】
不正分岐検出回路７０９は、動作モード変更検出信号ｓ７１４によって、動作モードが変更しないと判定した場合、あるいは、動作モードが変更する場合であっても、その動作モードの変更が、ユーザプログラムからＡＰＩプログラムへの変更、ユーザプログラムから特権プログラム、またはＡＰＩプログラムから特権プログラムへの変更のいずれでもないと判定した場合は、不正分岐検出信号ｓ７０９を非アクティブとする。
【０１０４】
分岐許可命令コード変換回路７１５は、不正分岐検出信号ｓ７０９が非アクティブな場合は、ユーザプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ｕｓｒ）の命令コードまたはＡＰＩプログラムからの分岐を許可する分岐許可命令（ａｃｃｅｐｔ ａｐｉ）からノーオペレーション命令へ、不正分岐検出信号ｓ７０９がアクティブな場合は、すべての命令コードから未定義命令へ、命令フェッチデータｓ７０７ｄのデータ変換を行い、ＣＰＵ７０１に対し、命令フェッチデータ信号ｓ７０１１を出力する。
【０１０５】
分岐許可命令をＣＰＵ７０１が持っている既存命令に変換することで、命令解読部７０１２は既存のものを使用できる。また、ＣＰＵ７０１内部での処理は、割り当てられた既存命令と同一の実行処理内容、実行処理サイクルで実行される。
【０１０６】
以上により、動作モードの移行を伴う分岐命令が実行された際、分岐先アドレス上にその分岐命令の実行を許可する分岐許可命令が格納されていない場合は、不正分岐検出回路７０９が割り込み要求信号ｓ７０９を出力するため、例えばフラッシュメモリ４０４に外部から追加されたユーザプログラム等によって命令ＲＯＭ４０２に格納された特権プログラムが不正に実行されることを防ぎ、セキュリティを確保できる。
【０１０７】
また、分岐許可命令コード変換回路７１５が、ＣＰＵ７０１に対し、未定義命令に変換された命令フェッチデータ信号ｓ７０１１を出力することによって、ＣＰＵ７０１に対し未定義命令による例外処理を発生させる。これにより、以降の命令実行が妨げられ、セキュリティを確保できる。
【０１０８】
正当な処理の場合、実行を希望するプログラムが格納されているアドレスに対して直接分岐命令を実行できるので、動作モードの移行を最短実行処理サイクルで処理でき、リアルタイム性が向上する。また、ＣＰＵ７０１に関しては既存のものを流用できるため設計容易性が高い。
【０１０９】
なお、上述の実施の形態１〜４では、不正分岐検出部、実行領域判定部、実行動作モード決定部等のそれぞれを別個独立した回路として形成したが、これらの各部ブロックをどのように実装するかは任意である。すなわち、例えば、実行領域判定部と実行動作モード決定部のような複数のブロックを一つの回路で実現した構成も、本発明の技術的範囲に属する。
【０１１０】
また、実施の形態１〜４では、本発明のプロセッサをＩＣカードシステムに適用した例を示したが、本発明のプロセッサの用途はこれに限定されない。
【０１１１】
（実施の形態５）
図５は、実施の形態５を用いたコンパイラ装置の構成およびコンパイルフローである。
【０１１２】
本実施形態にかかるコンパイラ８０２は、Ｃ言語ソースコード８０１を入力してコンパイルし、アセンブラ８０３に変換する。
【０１１３】
Ｃ言語ソースコード８０１は、ユーザ領域中に記述されたメイン関数（main#1）１６０１１と、特権領域中に記述された関数１６０１２（function#a）と関数１６０１３（function#b）によって構成されている。また、ユーザプログラムのメイン関数（main#1）１６０１１は、プログラム中で関数１６０１２（function#a）および関数１６０１３（function#b）を呼び出し使用する。
【０１１４】
コンパイラ８０２は、コンパイルを行う際に、Ｃ言語ソースコード８０１中の関数が、それぞれ特権領域、ユーザ領域のいずれに記述されているか判定し、特権領域中に記述された関数を特権プログラムとして決定する。コンパイラ８０２は、コンパイルを実行する際に、特権プログラムのソースコードから生成されるアセンブラコードの先頭に、分岐許可命令（ａｃｃｅｐｔ）１６０３２，１６０３３を挿入する。
【０１１５】
以上により、特権領域中のプログラムの開発を行う設計者は、Ｃ言語によるプログラム記述方法を使用しても、コンパイル時に分岐許可命令（ａｃｃｅｐｔ）が自動挿入され、動作モードの移行を伴う分岐が発生した際の命令実行に対するセキュリティを確保できる。
【０１１６】
以上のように、ユーザプログラムから特権プログラムまたはＡＰＩプログラム中のアドレスに対して分岐命令が実行された際、分岐先アドレス上に分岐許可命令が格納されていない場合は不正分岐検出部が不正分岐検出信号を出力するため、ユーザプログラムによって特権プログラムが不正に実行されることを防ぎセキュリティを確保できる。またユーザプログラム上から特権プログラムまたはＡＰＩプログラムを正当に実行する際、ユーザプログラム上で実行を希望する特権プログラムまたはＡＰＩプログラムが格納されているアドレスに対して直接分岐命令を実行することができるため、動作モードの移行に伴う処理時間が削減されリアルタイム性が向上する。
【図面の簡単な説明】
【０１１７】
【図１】実施の形態１、実施の形態２、実施の形態３におけるプロセッサ回路構成
【図２】実施の形態１におけるプログラム概念図
【図３】実施の形態２、実施の形態３、実施の形態４におけるプログラム概念図
【図４】実施の形態２におけるプロセッサ回路構成
【図５】実施の形態５におけるコンパイラ装置の構成
【図６】従来のプロセッサ回路構成
【図７】アドレス空間の領域区分
【図８】従来のプログラム概念図
【符号の説明】
【０１１８】
２００  全論理アドレス空間
２１１  命令ＲＯＭ空間特権領域
２１２  命令ＲＯＭ空間ＡＰＩ領域
２２１  ＲＡＭ空間特権領域
２２２  ＲＡＭ空間ＡＰＩ領域
２２３  ＲＡＭ空間ユーザ領域
２３１  フラッシュ空間ユーザ領域
２４１  外部Ｉ／Ｆ空間ユーザ領域
３０１  特権領域
３０２  ユーザ領域
４００  プロセッサ
４０１，７０１  ＣＰＵ
４０１１，７０１１  命令フェッチ部
４０１２，７０１２  命令解読部
４０１３，７０１３  命令実行部
４０１４，７０１４  プログラムカウンタ
４０１５，７０１５  メモリアクセス制御回路
４０２，７０２  命令ＲＯＭ
４０３，７０３  ＲＡＭ
４０４，７０４  フラッシュメモリ
４０５，７０５  外部Ｉ／Ｆ
４０６，７０６  アンテナコイル
４０７ａ，７０７ａ  アドレスバス
４０７ｄ，７０７ｄ  データバス
４０８，７０８  割り込み制御回路
４０９，７０９  不正分岐検出回路
４１０，７１０  実行領域判定回路
４１１，７１１  実行動作モード決定回路
４１２，７１２  分岐先領域判定回路
４１３，７１３  分岐先動作モード決定回路
４１４，７１４  動作モード変更検出回路
５０１  特権領域
５０２  ＡＰＩ領域
５０３  ユーザ領域
６００  プロセッサ
６０１  特権領域
６０２  ＡＰＩ領域
６０３  ユーザ領域
７１５  分岐許可命令コード変換回路
８０１  Ｃ言語ソースコード
８０２  コンパイラ
８０３  アセンブラソースファイル
【図１】
2004280801.tif 000003
【図２】
2004280801.tif 000004
【図３】
2004280801.tif 000005
【図４】
2004280801.tif 000006
【図５】
2004280801.tif 000007
【図６】
2004280801.tif 000008
【図７】
2004280801.tif 000009
【図８】
2004280801.tif 000010