(57)【要約】【課題】ＣＰＵと拡張演算器を備える情報処理装置において割込み命令が発生した時に、少ない専用命令数で必要なデータ全てを退避させる。【解決手段】「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」という１つの専用命令で全てのレジスタからのデータの退避を実現する。Ｄｍは、汎用レジスタ１０４から第１データ入力バス１２０に出力される値であり、拡張演算器１１０の各演算機はそれぞれ自己の値を認識している。Ｄｍが自己を指定する値の場合に各演算機は自己内部のレジスタに格納されているデータをセレクタ１１６に出力する。拡張演算器情報出力回路１１７は、拡張演算器１１０に搭載されている演算器の個数の情報を記憶しており、第１データ入力バス１２０の値がその数値を上回るとフラグレジスタ１０２に「１」を出力し、ＣＰＵ１００はフラグレジスタ１０２の値が「１」になっていることを以ってレジスタからのデータの対比が終了したことを認識する。【選択図】図１
2008310693.tif 000002
【特許請求の範囲】
【請求項１】
命令列中の各命令を逐次解読して実行するＣＰＵと、前記ＣＰＵと第１バス及び第２バスで接続され、演算に係るデータを格納するための１以上のレジスタを有し、前記ＣＰＵが解読中の命令を共に解読して、当該命令に係る演算を前記ＣＰＵが前記第１バスに出力したデータに基づいて実行し、演算結果を前記第２バスに出力する拡張演算器とから構成される情報処理装置であって、
前記ＣＰＵは、
解読対象の命令が、前記拡張演算器のレジスタ内のデータを取得するための取得命令であったときには、前記拡張演算器のレジスタを指定するためのレジスタ情報を前記第１バスに出力し、前記第２バスを介して当該レジスタに格納されていたデータを取得する情報取得手段を備え、
前記拡張演算器は、
解読対象の命令が前記取得命令であったときには、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを退避させるレジスタを特定する退避レジスタ特定手段と、
前記退避レジスタ特定手段により特定されるレジスタ内のデータを前記第２バスに出力するデータ出力手段とを備える
ことを特徴とする情報処理装置。
【請求項２】
前記情報処理装置はさらに、前記拡張演算器における演算の結果としてのフラグが前記拡張演算器から前記ＣＰＵに出力されるための信号線を備え、
前記ＣＰＵは、さらに、
前記信号線を介して、拡張演算器からデータの取得が終了したかどうかを示すフラグを受信し、保持していたフラグを受信したフラグで書き換える保持手段を備え、
前記レジスタ情報は、レジスタを指定するためのレジスタ番号であり、
前記情報取得手段は、
前記レジスタ番号を出力する都度、前記レジスタ番号に１加算して、前記第１バスに出力するレジスタ番号出力手段を備え、
前記拡張演算器は、さらに、
前記拡張演算器からデータの退避が必要なレジスタの合計数と、前記第１バスに出力されているレジスタ番号ｎとを比較し、レジスタ番号ｎが前記合計数以上である場合に、前記フラグをデータの退避が終了したことを示す情報にして出力する出力手段を備え、
前記退避レジスタ特定手段は、前記レジスタ番号に基づいてデータを退避させるレジスタを特定し、
前記レジスタ番号出力手段は、前記保持手段が保持しているフラグが、データの退避が終了したことを示す情報に書き換えられているときに、前記第１バスへのレジスタ情報の出力を終了する
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第１バスは、少なくとも、第１のデータを転送するための第１入力バスと、第２のデータを転送するための第２入力バスとから構成され、
前記ＣＰＵは、さらに、
前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータを前記第１入力に、当該一のレジスタを指定するレジスタ番号を前記第２入力バスに出力する格納指示手段とを備え、
前記拡張演算器は、さらに、
解読対象の命令が、前記格納命令であった場合には、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
前記特定手段により特定されるレジスタに、前記第１バスを介して取得したデータを格納する格納手段とを備える
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記拡張演算器は、さらに、
前記レジスタの個数を示すレジスタ数を記憶するレジスタ数記憶手段と、
前記ＣＰＵに対して前記レジスタ数を前記第２バスに出力するレジスタ数出力手段と、
解読対象の命令が前記格納命令であったときに、前記第１バスを介して得られた数値で指定されるレジスタに、前記第１バスを介して得られるデータを格納するデータ格納手段とを備え、
前記ＣＰＵは、さらに、
前記レジスタ数出力手段により出力された前記レジスタ数を記憶するレジスタ数記憶手段を備え、
前記レジスタ情報は、レジスタを指定するための番号であり、
前記情報取得手段は、前記番号を１ずつ加算して、逐次前記第１バスにレジスタ数と、データを出力する第２レジスタ数出力手段を備え、
前記第２レジスタ数出力手段は、前記番号と前記レジスタ数とが一致した数値を最後に、前記第１バスへのレジスタ数の出力を終了する
ことを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記ＣＰＵは、さらに、
前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
解読対象の命令が、前記メモリに記録したデータをレジスタに格納しなおすための格納命令であった場合には、前記メモリに格納されているデータを、指定アドレス値を前記所定値ごとに加算して、レジスタを指定する数値とともに前記第１バスに出力する格納指示手段を備え、
前記拡張演算器は、
解読対象の命令が、前記格納命令であった場合には、前記特定手段により特定されるレジスタに、当該レジスタを特定するために用いたレジスタ情報と共に取得したデータを格納する格納手段を備える
ことを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記レジスタ数出力手段は、前記レジスタ数を情報処理装置を初期化した時に前記ＣＰＵに対して出力する
ことを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記拡張演算器は、さらに、
前記拡張演算器に備えられている演算器の種類を示す演算器情報を出力する演算器情報出力手段を備え、
前記ＣＰＵは、さらに、
前記演算器情報を記憶する演算器情報記憶手段と、
前記演算器情報に基づいて出力するレジスタ情報を決定する決定手段とを備え、
前記情報取得手段は、前記決定手段により決定されたレジスタ情報の前記第１バスに出力する
ことを特徴とする請求項１記載の情報処理装置。
【請求項８】
前記ＣＰＵは、さらに、
前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第１バスに出力する格納指示手段とを備え、
前記拡張演算器は、さらに、
解読対象の命令が、前記格納命令であった場合には、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
前記特定手段により特定されるレジスタに、前記第１バスを介して取得したデータを格納する格納手段とを備える
ことを特徴とする請求項７記載の情報処理装置
【請求項９】
前記演算器情報出力手段は、前記演算器情報を情報処理装置のリセット時に前記ＣＰＵに対して出力する
ことを特徴とする請求項７記載の情報処理装置。
【請求項１０】
前記情報処理装置は、実行していた処理に対して割込みが発生した場合に前記取得命令を実行し、当該割込みには、当該割込みにおいて実行する処理内容に応じて割込みレベルが設定されており、
前記拡張演算器は、
前記割込みレベルに応じて、データを退避させるレジスタ数を決定する決定手段と、
前記取得命令に応じて、前記決定手段により決定されたレジスタ数に基づいて、データを出力するレジスタを決定するレベル対応決定手段を供え、
前記出力手段は、前記決定手段により決定されたレジスタ数と、前記レジスタ番号とが一致したときに、前記フラグをデータの退避が終了したことを示す情報にして出力する
ことを特徴とする請求項１記載の情報処理装置。
【請求項１１】
前記ＣＰＵは、さらに、
前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
解読対象の命令が、前記割込みレベルに応じて前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第１バスに出力する格納指示手段とを備え、
前記拡張演算器は、さらに、
解読対象の命令が、前記格納命令であった場合には、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
前記特定手段により特定されるレジスタに、前記第１バスを介して取得したデータを格納する格納手段とを備える
ことを特徴とする請求項１０記載の情報処理装置。
【請求項１２】
前記拡張演算器は、第１のタスクと第２のタスクとを切り替えて実行することが可能な演算器であり、
前記拡張演算器は、さらに、
第１のタスクを実行中に第２のタスクに切り替える場合であって、第１のタスクにおいて実行した演算に係るデータがレジスタに格納されている場合に、前記ＣＰＵに対して割込みの発生を要求する割込み要求手段を備え、
前記ＣＰＵは、前記割込み要求に対応して割込みを発生させ、
当該割込みに応じて前記ＣＰＵと前記拡張演算器とは前記取得命令を実行する
ことを特徴とする請求項１記載の情報処理装置。
【請求項１３】
前記拡張演算器は、さらに、
演算を実行した否かを示す演算実行情報を記憶する演算実行情報記憶手段と、
前記取得命令を解読したときに、前記演算実行情報を前記ＣＰＵに出力する演算実行情報出力手段を備え、
前記ＣＰＵは、前記取得命令を解読した場合であって、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、拡張演算器のレジスタからのデータの取得を実行し、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、前記拡張演算器のレジスタからのデータの取得を実行しない
ことを特徴とする請求項２記載の情報処理装置。
【請求項１４】
前記演算情報実行記憶手段は、さらに、前記拡張演算器において各レジスタごとに演算に係るデータを格納しているか否かを示すレジスタ対応演算実行情報を記憶し、
前記拡張演算器は、さらに、前記ＣＰＵに前記レジスタ対応演算実行情報を出力するレジスタ対応演算実行情報出力手段を備え、
前記ＣＰＵは、
前記レジスタ対応演算実行情報に基づいて、前記取得命令を解読したときにレジスタを指定するレジスタ情報を前記第１バスに出力する
ことを特徴とする請求項１３記載の情報処理装置。
【請求項１５】
前記ＣＰＵは、さらに、
前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第１バスに出力する格納指示手段とを備え、
前記拡張演算器は、さらに、
解読対象の命令が、前記格納命令であった場合には、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
前記特定手段により特定されるレジスタに、前記第１バスを介して取得したデータを格納する格納手段とを備える
ことを特徴とする請求項１３記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵと拡張演算器とからなる情報処理装置に関し、特に、拡張演算器が実行している演算に係るデータの退避と、退避させたデータの再格納に関する。
【背景技術】
【０００２】
情報処理装置には、その基本性能向上のために、ＣＰＵに拡張演算器という演算回路を装着したものがある。
特許文献１には、そのような情報処理装置として、主として動作し、処理を実行するＣＰＵに、物理的に拡張演算器なる特定の演算を実行する機器を装着した情報処理装置が開示されている。拡張演算器は、ＣＰＵと同一内容の命令を解読し、解読した命令が実行可能ならば、ＣＰＵから演算に係るデータを与えられたときに演算を実行し、その結果をＣＰＵに出力する。拡張演算器が演算を実行している間にＣＰＵは別の命令を実行することで、基本性能が向上する。
【０００３】
用途に応じた構成の拡張演算器を製造することにより、ＣＰＵの物理的構成を変更することなく、用途に応じて製造した拡張演算器を装着することで、情報処理装置としての性能を上げることが容易となる。また、拡張演算器のみの構成を用途に応じて改変すればよいので、開発のための時間を、一から専用の情報処理装置を作成する場合に比べて、短縮することができるという利点もある。
【特許文献１】特許第２９８７３０８号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１における情報処理装置において拡張演算器は、演算に必要なデータや、演算結果のデータを一時的に拡張演算器内のレジスタに格納することがある。当該情報処理装置において、通常の処理を実行している途中に割込みが発生した場合に、当該割込み命令中にも拡張演算器による演算を実行し当該演算の結果などをレジスタに格納して上書きする可能性があるために、今まで実行していた演算に係るデータをレジスタから退避させる必要がある。
【０００５】
そこで上述した割込みに対応するために、レジスタからデータを退避させるための命令が別途必要になる。また、割込み命令を実行し終えた後で退避させたデータを再度格納する必要があるので、そのための命令もまた必要となってくる。命令としては、特許文献１のように、直接どのレジスタからデータを出力させるのかを指定する専用の命令を、各レジスタに対して作成してもよいが、拡張演算器が実行できる拡張演算命令の命令セット数には限りがある。今後拡張演算器が実行できる演算内容は多岐に渡っていくと考えられ、それに伴いレジスタの数もまた増大していくことになる。そのような場合に、各レジスタに対して専用の拡張演算命令を割り当てていては命令数が足りなくなる。
【０００６】
そこで、本発明においては、このようなＣＰＵと拡張演算器を含む情報処理装置において、レジスタからのデータを退避、そして再度格納させることを専用の命令数を増加させることなく実現できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明に係る情報処理装置は、命令列中の各命令を逐次解読して実行するＣＰＵと、前記ＣＰＵと第１バス及び第２バスで接続され、演算に係るデータを格納するための１以上のレジスタを有し、前記ＣＰＵが解読中の命令を共に解読して、当該命令に係る演算を前記ＣＰＵが前記第１バスに出力したデータに基づいて実行し、演算結果を前記第２バスに出力する拡張演算器とから構成される情報処理装置であって、前記ＣＰＵは、解読対象の命令が、前記拡張演算器のレジスタ内のデータを取得するための取得命令であったときには、前記拡張演算器のレジスタを指定するためのレジスタ情報を前記第１バスに出力し、前記第２バスを介して当該レジスタに格納されていたデータを取得する情報取得手段を備え、前記拡張演算器は、解読対象の命令が前記取得命令であったときには、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを退避させるレジスタを特定する退避レジスタ特定手段と、前記退避レジスタ特定手段により特定されるレジスタ内のデータを前記第２バスに出力するデータ出力手段とを備えることを特徴としている。
【発明の効果】
【０００８】
上述のような構成によって、ＣＰＵから第１バスに出力されるレジスタ情報に基づいて、拡張演算器はレジスタを特定し、特定されたレジスタからのデータの取得を、１つの取得命令で実現できる。この構成によれば、レジスタからデータを取得するための拡張演算器が実行できる命令である拡張演算命令としては、１つだけであるので、最小限の命令数で拡張演算器の全てのレジスタからのデータの退避を実行できる。
【０００９】
また、前記情報処理装置はさらに、前記拡張演算器における演算の結果としてのフラグが前記拡張演算器から前記ＣＰＵに出力されるための信号線を備え、前記ＣＰＵは、さらに、前記信号線を介して、拡張演算器からデータの取得が終了したかどうかを示すフラグを受信し、保持していたフラグを受信したフラグで書き換える保持手段を備え、前記レジスタ情報は、レジスタを指定するためのレジスタ番号であり、前記情報取得手段は、前記レジスタ番号を出力する都度、前記レジスタ番号に１加算して、前記第１バスに出力するレジスタ番号出力手段を備え、前記拡張演算器は、さらに、前記拡張演算器からデータの退避が必要なレジスタの合計数と、前記第１バスに出力されているレジスタ番号ｎとを比較し、レジスタ番号ｎが前記合計数以上である場合に、前記フラグをデータの退避が終了したことを示す情報にして出力する出力手段を備え、前記退避レジスタ特定手段は、前記レジスタ番号に基づいてデータを退避させるレジスタを特定し、前記レジスタ番号出力手段は、前記保持手段が保持しているフラグが、データの退避が終了したことを示す情報に書き換えられているときに、前記第１バスへのレジスタ情報の出力を終了することとしてもよい。
【００１０】
この構成によれば、拡張演算器の各レジスタはレジスタ番号が振られており、この番号をＣＰＵは第１バスに出力し、拡張演算器は、この番号のデータに基づいてレジスタを特定できるという単純な構成で、全てのレジスタからのデータの退避が実現できる。また、レジスタ番号が拡張演算器が保持するレジスタ数と一致すると、その旨を示す信号が拡張演算器からＣＰＵに対して出力されるので、データの退避を終えるタイミングをＣＰＵは、容易に検出することができる。さらに、従来から拡張演算器で行われた演算の演算結果に係るデータ、例えば演算結果の正負のデータ、をＣＰＵが保持するフラグレジスタに格納していたが、このフラグレジスタを用いて、データの退避が終了したかどうかを示すフラグとしても利用しているので、資源の有効活用を実現できている。
【００１１】
また、前記第１バスは、少なくとも、第１のデータを転送するための第１入力バスと、第２のデータを転送するための第２入力バスとから構成され、前記ＣＰＵは、さらに、前記情報取得手段により前記第２バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータを前記第１入力に、当該一のレジスタを指定するレジスタ番号を前記第２入力バスに出力する格納指示手段とを備え、前記拡張演算器は、さらに、解読対象の命令が、前記格納命令であった場合には、前記第１バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、前記特定手段により特定されるレジスタに、前記第１バスを介して取得したデータを格納する格納手段とを備えることとしてもよい。
【００１２】
この構成によれば、一度退避させたデータを、元通りに再格納することができ、取得命令により退避させたデータを、取得命令を実行する前の状態にもどすことを格納命令というひとつの拡張演算命令により実現できる。
また、前記拡張演算器は、さらに、前記レジスタの個数を示すレジスタ数を記憶するレジスタ数記憶手段と、前記ＣＰＵに対して前記レジスタ数を前記第２バスに出力するレジスタ数出力手段と、解読対象の命令が前記格納命令であったときに、前記第１バスを介して得られた数値で指定されるレジスタに、前記第１バスを介して得られるデータを格納するデータ格納手段とを備え、前記ＣＰＵは、さらに、前記レジスタ数出力手段により出力された前記レジスタ数を記憶するレジスタ数記憶手段を備え、前記レジスタ情報は、レジスタを指定するための番号であり、前記情報取得手段は、前記番号を１ずつ加算して、逐次前記第１バスにレジスタ数と、データを出力する第２レジスタ数出力手段を備え、前記第２レジスタ数出力手段は、前記番号と前記レジスタ数とが一致した数値を最後に、前記第１バスへのレジスタ数の出力を終了することとしてもよい。
【００１３】
これにより、拡張演算器はＣＰＵに対して備えているレジスタの個数を示す情報を伝達するので、ＣＰＵは、拡張演算器に教示してもらわずとも、取得命令により、いくつのレジスタからのデータの退避を実行すればよいのか認識し、過不足なく全てのレジスタのデータからの退避を実現できる。
また、前記レジスタ数出力手段は、前記レジスタ数を情報処理装置を初期化した時に前記ＣＰＵに対して出力することとしてよい。
【００１４】
これにより、ＣＰＵは、情報処理装置のリセット時、例えば、起動時やユーザによりリセットが実行されたタイミングで、拡張演算器からレジスタ数のデータを取得することができる。リセット時には、拡張演算器では演算が実行されておらず、演算に関わるデータが無いので、このときに演算結果を格納するためのレジスタにレジスタ数の情報を格納し、そして、そこから出力されたデータをＣＰＵが記憶する。リセット時にレジスタ数のデータがＣＰＵに伝達されるので、いつでも拡張演算器からのデータの退避が実行できるようになり、効率がよい。
【００１５】
また、前記拡張演算器は、さらに、前記拡張演算器に備えられている演算器の種類を示す演算器情報を出力する演算器情報出力手段を備え、前記ＣＰＵは、さらに、前記演算器情報を記憶する演算器情報記憶手段と、前記演算器情報に基づいて出力するレジスタ情報を決定する決定手段とを備え、前記情報取得手段は、前記決定手段により決定されたレジスタ情報の前記第１バスに出力することとしてよい。
【００１６】
これにより、ＣＰＵは、拡張演算器から搭載されている演算器がどのような演算器であるかの情報に基づいて、ＣＰＵは、拡張演算器に対してレジスタからのデータの退避を実行するためのレジスタ情報を無駄なく出力することができる。
ＣＰＵは、拡張演算器において、どのような演算器が搭載されるかの情報を持っておらずとも、その情報を得ることができるようになる。また演算器は演算の種類に応じて必要とするレジスタ数は異なってくるが、演算器の情報により、そのレジスタ数を特定することができるようになる。
【００１７】
また、前記演算器情報出力手段は、前記演算器情報を情報処理装置のリセット時に前記ＣＰＵに対して出力することとしてよい。
これにより、ＣＰＵは、情報処理装置のリセット時、例えば、起動時やユーザによりリセットが実行されたタイミングで、拡張演算器から演算器情報のデータを取得することができる。リセット時には、拡張演算器では演算が実行されておらず、演算に関わるデータが無いので、このときに演算結果を格納するためのレジスタに演算器情報を格納し、そして、そこから出力されたデータをＣＰＵが記憶する。リセット時に演算器情報がＣＰＵに伝達されるので、いつでも拡張演算器からのデータの退避が実行できるようになり、効率がよい。
【００１８】
また、前記情報処理装置は、実行していた処理に対して割込みが発生した場合に前記取得命令を実行し、当該割込みには、当該割込みにおいて実行する処理内容に応じて割込みレベルが設定されており、前記拡張演算器は、前記割込みレベルに応じて、データを退避させるレジスタ数を決定する決定手段と、前記取得命令に応じて、前記決定手段により決定されたレジスタ数に基づいて、データを出力するレジスタを決定するレベル対応決定手段を供え、前記出力手段は、前記決定手段により決定されたレジスタ数と、前記レジスタ番号とが一致したときに、前記フラグをデータの退避が終了したことを示す情報にして出力することとしてよい。
【００１９】
これにより、情報処理装置は割込みレベルに応じたデータの退避が実行できるようになる。割込み処理では、割込みレベルに応じて使用する演算器が予め定められているので、割込みレベルによっては、その割込み処理の中で使用しない演算器もある。すると、使用しない演算器に係るレジスタからデータの退避を行うことは無駄になるので、本構成により、その無駄を回避することができ、処理の効率化を図ることができる。
【００２０】
また、前記拡張演算器は、第１のタスクと第２のタスクとを切り替えて実行することが可能な演算器であり、前記拡張演算器は、さらに、第１のタスクを実行中に第２のタスクに切り替える場合であって、第１のタスクにおいて実行した演算に係るデータがレジスタに格納されている場合に、前記ＣＰＵに対して割込みの発生を要求する割込み要求手段を備え、前記ＣＰＵは、前記割込み要求に対応して割込みを発生させ、当該割込みに応じて前記ＣＰＵと前記拡張演算器とは前記取得命令を実行することとしてよい。
【００２１】
拡張演算器では、複数の異なるタスクを切り替えながら実行することが考えられるが、これにより、一のタスクの実行中において演算を実行した場合にデータを退避する必要があることがある。第１のタスクの演算結果がレジスタに格納されている状態で、第２のタスクに切り替えたい場合などである。このような場合に、拡張演算器からＣＰＵに対して割込みを要求することで、当該割込みをトリガとしてデータの退避を実行し、各タスクにおける演算結果のデータを損なうことなく、タスクの切り替えを実行することができる。
【００２２】
また、前記拡張演算器は、さらに、演算を実行した否かを示す演算実行情報を記憶する演算実行情報記憶手段と、前記取得命令を解読したときに、前記演算実行情報を前記ＣＰＵに出力する演算実行情報出力手段を備え、前記ＣＰＵは、前記取得命令を解読した場合であって、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、拡張演算器のレジスタからのデータの取得を実行し、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、前記拡張演算器のレジスタからのデータの取得を実行しないこととしてよい。
【００２３】
拡張演算器において、演算を実行しておらず、演算に係るデータがレジスタに格納されていない場合などには、拡張演算器のレジスタからのデータの退避を実行することは、無駄な処理となるが、本構成により、この無駄を回避できる。
また、前記演算情報実行記憶手段は、さらに、前記拡張演算器において各レジスタごとに演算に係るデータを格納しているか否かを示すレジスタ対応演算実行情報を記憶し、前記拡張演算器は、さらに、前記ＣＰＵに前記レジスタ対応演算実行情報を出力するレジスタ対応演算実行情報出力手段を備え、前記ＣＰＵは、前記レジスタ対応演算実行情報に基づいて、前記取得命令を解読したときにレジスタを指定するレジスタ情報を前記第１バスに出力することとしてよい。
【００２４】
これにより、拡張演算器において、各演算器それぞれが演算を実行しているかどうかに基づいて、対応するレジスタにデータが格納されるかどうかが決定されるので、各レジスタにデータが格納されているかどうかを演算を実行したかどうかにより判断して実行情報を拡張演算器が保持する。そして、割込みが発生した場合により取得命令を実行してデータを退避させる場合にＣＰＵは、実行情報を取得して、演算を実行して、レジスタにデータが格納されているレジスタに対してのみ取得命令を実行してデータを退避させることができる。これにより、データを格納していないレジスタに対して取得命令を実行するという無駄が発生せず、処理の効率化を図ることができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の一実施形態である情報処理装置について図面を用いて説明する。
＜実施の形態１＞
＜構成＞
図１は、本発明に係る情報処理装置の機能構成を示した機能構成図である。図１に示すように情報処理装置１５０は、ＣＰＵ（Central Processing Unit）１００と、拡張演算器１１０と、ＲＯＭ（Read Only Memory）１３０と、ＲＡＭ（Random Access Memory）１４０とを含んで構成される。ここで、情報処理装置１５０は、３２ビットで動作するマイクロコンピュータである。
【００２６】
ＣＰＵ１００は、命令アドレスを出力し、ＲＯＭ１３０から供給される命令によって各種情報処理を実行する機能を有し、ＣＰＵ命令デコーダ１０１と、フラグレジスタ１０２と、スタックポインタ格納レジスタ（ＳＰ）１０３と、汎用レジスタ１０４と、第１データ入力バス１２０と、第２データ入力バス１２１と、データ出力バス１２２とを含んで構成される。第１データ入力バス１２０と、第２入力データバス１２１と、データ出力バス１２２とは、それぞれ３２ビットのデータラインである。
【００２７】
ＣＰＵ命令デコーダ１０１は、ＲＯＭ１３０から供給される命令をデコードし、デコードした命令の内容に基づいて、ＣＰＵ１００内部の各回路に各種制御信号を出力する機能を有する。なお、図中において、ＣＰＵ命令デコーダ１０１から出されている複数の矢印は、ＣＰＵ命令デコーダ１０１がＣＰＵ１００内全体に対して制御信号を出力できることを示している。直接全ての機能部に対して矢印を接続しなかったのは、図面を見やすくするためである。
【００２８】
フラグレジスタ１０２は、ＣＰＵ１００及び拡張演算器１１０の演算フラグを格納する機能を有する。また、フラグレジスタ１０２は、命令実行中に割込みが発生した場合に拡張演算器のレジスタからデータの退避が終了したか否かを示すフラグを格納する機能も有する。また、フラグレジスタ１０２は、割込みの際に拡張演算器のレジスタから退避させたデータを再度格納する場合に、データの再格納が終了したかどうかを示すフラグを格納する機能を有する。
【００２９】
スタックポインタ格納レジスタ１０３は、ＣＰＵ命令デコーダ１０１から供給される制御信号に応じて保持する値をＲＡＭ１４０へアドレス値として出力する機能を有する。また、スタックポインタ格納レジスタ１０３は、ＣＰＵ命令デコーダ１０１から供給される制御信号に応じて保持する値に定数を加算、あるいは減算して格納しなおす機能も有する。
【００３０】
汎用レジスタ１０４は、ＣＰＵ１００及び拡張演算器１１０の演算入出力値を格納する機能を有する。汎用レジスタ１０４の各レジスタは、３２ビットのデータを格納する機能を有する。
拡張演算器１１０は、ＲＯＭ１３０から供給される命令によって各種情報処理を実行する機能を有し、拡張演算器命令デコーダ１１１と、第１演算器１１２と、第１演算結果格納レジスタ１１３と、第２演算器１１４と、第２演算結果格納レジスタ１１５と、セレクタ１１６と、搭載演算器情報出力回路１１７と、論理和回路１１８とを含んで構成される。
【００３１】
拡張演算器命令デコーダ１１１は、ＲＯＭ１３０から供給される命令をデコードし、デコードした命令の内容に基づいて、拡張演算器１１０内部の各回路に各種制御信号を出力する機能を有する。なお、図中において、拡張演算器命令デコーダ１１１から出されている複数の矢印は、拡張演算器命令デコーダ１１１が拡張演算器１１０内全体に対して制御信号を出力できることを示している。直接全ての機能部に対して矢印を接続しなかったのは、図面を見やすくするためである。
【００３２】
第１演算器１１２は、乗算器である。第１演算器１１２は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０及び第２データ入力バス１２１によって転送されたデータを取得し、第１データ入力バス１２０と第２データ入力バス１２１とから得られた２つの値の乗算演算を行う機能を有する。３２ビットのデータ２つの乗算結果は、最大で６４ビットになるので、第１演算器１１２は、６４ビット中、上位３２ビットの演算結果を第１演算結果格納レジスタ１１３に格納し、６４ビット中、下位３２ビットの演算結果をセレクタ１１６に出力する。また、第１演算器１１２は、演算の結果が負であることを示す等の演算結果フラグを論理和回路１１８に出力する。また、第１演算器１１２は、拡張演算器命令デコーダ１１１からの制御信号に基づいて、第１演算結果格納レジスタ１１３からデータを出力したり、第２データ入力バス１２１の値を格納する機能も有する。
【００３３】
第１演算結果格納レジスタ１１３は、第１演算器１１２における演算に係るデータを格納する機能を有する。
第２演算器１１４は、除算器である。第２演算器１１４は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０及び第２データ入力バス１２１によって転送されたデータに基づく除算演算を行う機能を有する。第２演算器１１４は、剰余を第２演算結果格納レジスタ１１５に出力し、商をセレクタ１１６に出力する。また、第２演算器１１４は、演算のオーバーフローを示す等の演算結果フラグを論理和回路１１８に出力する。
【００３４】
第２演算結果格納レジスタ１１５は、第２演算器１１４における演算に係るデータを格納する機能を有する。
セレクタ１１６は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１演算器１１２の演算結果、第１演算結果格納レジスタ１１３の出力値、第２演算器１１４の演算結果及び第２演算結果格納レジスタ１１５の出力値のいずれかを選択し選択した値をデータ出力バス１２２に出力する。
【００３５】
搭載演算器情報出力回路１１７は、拡張演算器１１０が搭載する演算器個数（本実施の形態の場合２個）の情報を保持し、拡張演算器命令デコーダ１１０から供給される制御信号によって第１データ入力バス１２０から入力した値と保持する演算器個数とを比較し、同じもしくは入力した値のほうが大きい場合にフラグ値１を出力し、入力した値のほうが小さい場合にフラグ値０を出力する機能を有する。なお、搭載演算器情報出力回路１１７は、演算器の個数として、実質的には、演算器個数「２」より、１少ない「１」を保持している。これは、「０」を一つの値として考慮しているためである。
【００３６】
論理和回路１１８は、第１演算器１１２から出力される演算結果フラグ、第２演算器１１４から出力される演算結果フラグ及び搭載演算器情報出力回路１１７の出力値の論理和を出力する機能を有する。
以上が、情報処理装置１５０の各部の機能の説明である。
＜コマンド＞
では、ここから、ＣＰＵ命令デコーダ１０１及び拡張演算器命令デコーダ１１１によってデコードされ、実行される各種命令について説明する。
＜拡張演算命令＞
まず、ＣＰＵ１００及び拡張演算器１１０両方に読み出され実行される拡張演算命令について説明する。
【００３７】
図２は、ＣＰＵ１００と拡張演算器１１０とがＲＯＭ１３０から読み出し実行する拡張演算命令とＣＰＵ１１０と拡張演算器１１０の動作の対応を示した表である。当該表に基づいて、各命令の内容と、各命令実行時の、ＣＰＵ１００と拡張演算器１１０との動作について説明する。上述の取得命令は、ここの「ＧＥＴＡＣＸ」が該当し、格納命令は、ここの「ＰＵＴＡＣＸ」命令が該当する。
【００３８】
＜ＭＵＬＱ  Ｄｍ，Ｄｎ命令＞
「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令は、拡張演算器１１０が乗算を実行するための拡張演算命令である。
「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０からＣＰＵ１００が読み出すことにより、ＣＰＵ命令デコーダ１０１は、「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令をデコードしＣＰＵ１００内部の各回路に制御信号を出力する。ここでｍ及びｎは命令のオペランドで指定される汎用レジスタ１０４のレジスタ番号である。また、「Ｄｍ」は汎用レジスタ１０４のｍ番目のレジスタが保持する値のことであり、「Ｄｎ」は汎用レジスタ１０４のｎ番目のレジスタが保持する値のことである。「ｍ」、「ｎ」、「Ｄｍ」、「Ｄｎ」については以降同様とする。
【００３９】
また、ＣＰＵ命令デコーダ１０１と同じタイミングで拡張演算器命令デコーダ１１１は「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読み出してデコードする。そして拡張演算器命令デコーダ１１１は、拡張演算器１１０内部の各回路に制御信号を出力する。
各制御信号に従い、まず、汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。
【００４０】
第１演算器１１２は、第１データ入力バス１２０のＤｍを読み取り、第２データ入力バス１２１のＤｎを読み取る。そして第１演算器１１２は、Ｄｍを被乗数、Ｄｎを乗数とする乗算演算を行う。第１演算器１１２は、積の上位ビット側の結果を第１演算結果格納レジスタ１１３に格納し、積の下位ビット側の結果をセレクタ１１６に出力し、演算結果フラグを論理和回路１１８に出力する。
【００４１】
セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第１演算器１１２の出力を選択してデータ出力バス１２２に出力する。汎用レジスタ１０４は、データ出力バス１２２に出力された積の下位ビット側の結果をｎ番目のレジスタに保持する。
論理和回路１１８は、第１演算器１１３の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合第１演算器１１２の演算結果フラグを出力する。そして、フラグレジスタ１０６は拡張演算器１１０から出力される第１演算器１１２の演算結果フラグを格納する。
【００４２】
以上が、「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令の説明である。
＜ＤＩＶＱ  Ｄｍ，Ｄｎ命令＞
「ＤＩＶＱ  Ｄｍ，Ｄｎ」命令は、拡張演算器１１０が除算を実行するための拡張演算命令である。
「ＤＩＶＱ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０からＣＰＵ１００が読み出すことにより、ＣＰＵ命令デコーダ１０１は、「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令をデコードしＣＰＵ１００内部の各回路に制御信号を出力する。
【００４３】
また、ＣＰＵ命令デコーダ１０１とほぼ同じタイミングで拡張演算器命令デコーダ１１１は、「ＤＩＶＱ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読み出してデコードする。そして拡張演算器命令デコーダ１１１は、拡張演算器１１０内部の各回路に制御信号を出力する。
汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。
【００４４】
第２演算器１１４は、第１データ入力バス１２０のＤｍを読み取り、第２データ入力バス１２１のＤｎを読み取る。そして、第２演算器１１４は、Ｄｍを被除数とし、Ｄｎを除数とする除算を行う。第２演算器１１４は、演算結果の剰余を第２演算結果格納レジスタ１１５に格納し、商をセレクタ１１６に出力し、演算結果フラグを論理和回路１１７に出力する。
【００４５】
セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第２演算器１１４の出力を選択してデータ出力バス１２２に出力する。汎用レジスタ１０４は、データ出力バス１２２に出力された商をｎ番目のレジスタに保持する。
論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合第２演算器１１５の演算結果フラグを出力する。そして、フラグレジスタ１０２は、拡張演算器１１０から出力された第２演算器１１４の演算結果フラグを格納する。
【００４６】
以上が、「ＤＩＶＱ  Ｄｍ，Ｄｎ」命令の説明である。
＜ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令＞
「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令は、割込み発生時に拡張演算器１１０のレジスタからデータを退避させるための拡張演算命令である。
「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０からＣＰＵ１００が読み出すことにより、ＣＰＵ命令デコーダ１０１は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をデコードし、ＣＰＵ１００内部の各回路に制御信号を出力する。
【００４７】
また、ＣＰＵ命令デコーダ１０１と同じタイミングで拡張演算器命令デコーダ１１１は「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読み出してデコードする。そして拡張演算器命令デコーダ１１１は、拡張演算器１１０内部の各回路に制御信号を出力する。
制御信号に基づいて、まず、汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。
【００４８】
これ以降の動作について、第１演算結果格納レジスタ１１３から値を読み出す場合と、第２演算結果格納レジスタ１１５の値を読み出す場合との２通りの場合があるので、それぞれの場合の情報処理装置１５０の動作を分けて説明する。
（１）第１演算結果格納レジスタ１１３から値を読み出す場合
第１演算器１１２は、第１データ入力バス１２０のＤｍが第１演算器１１２を表す「０」を読み込む。第１演算器１１２は、第１演算結果格納レジスタ１１３が保持する値をセレクタ１１６に出力させる。セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第１演算結果格納レジスタ１１３の出力を選択してデータ出力バス１２２に出力する。
【００４９】
搭載演算器情報出力回路１１７は、拡張演算器命令デコーダ１１１から供給された制御信号によって第１データ入力バス１２０から取得した値と保持する演算器個数とを比較し、「０」は「１」より小さいのでフラグ値０を出力する。論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合、搭載演算器情報出力回路１１７のフラグ値「０」を出力する。
【００５０】
データ出力バス１２２は、セレクタ１１６から出力される第１演算結果格納レジスタ１１３の出力値をＣＰＵ１００の汎用レジスタ１０４に転送する。汎用レジスタ１０４は、データ出力バス１２２の値を入力してｎ番目のレジスタに保持する。フラグレジスタ１０２は、拡張演算器１１０から出力される搭載演算器情報出力回路１１７のフラグ値「０」を演算結果フラグに格納する。
（２）第２演算結果格納レジスタ１１５に値を書込む場合
第２演算器１１４は、第１データ入力バス１２０のＤｍが第２演算器１１４を表す「１」を読み込む。第２演算結果格納レジスタ１１５は、保持する値をセレクタ１１６に出力する。セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第２演算結果格納レジスタ１１５の出力を選択してデータ出力バス１２２に出力する。
【００５１】
搭載演算器情報出力回路１１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から入力した値と保持する演算器個数とを比較し同じなのでフラグ値１を出力する。論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合搭載演算器情報出力回路１１７のフラグ値「１」を出力する。
【００５２】
データ出力バス１２２は、セレクタ１１６から出力される第２演算結果格納レジスタ１１５の出力値をＣＰＵ１００の汎用レジスタ１０４に転送する。汎用レジスタ１０４は、データ出力バス１２２の値を入力してｎ番目のレジスタに保持する。
フラグレジスタ１０２は、拡張演算器１１０から出力される搭載演算器情報出力回路１１７のフラグ値「１」を演算結果フラグに格納する。
【００５３】
以上が、本実施の形態に係る各拡張演算命令の内容である。
＜ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ命令＞
「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令は、割込み発生時に拡張演算器１１０のレジスタから退避させたデータを再度格納しなおすための拡張演算命令である。
「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０からＣＰＵ１００が読み出すことにより、ＣＰＵ命令デコーダ１０１は、「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令をデコードしＣＰＵ１００内部の各回路に制御信号を出力する。
【００５４】
また、ＣＰＵ命令デコーダ１０１と同じタイミングで拡張演算器命令デコーダ１１１は「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読み出してデコードする。そして拡張演算器命令デコーダ１１１は、拡張演算器１１０内部の各回路に制御信号を出力する。
制御信号に基づいて、まず、汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。
【００５５】
これ以降の動作について、第１演算結果格納レジスタ１１３に値を書き込む場合と、第２演算結果格納レジスタ１１５に値を書き込む場合との２通りの場合があるので、それぞれの場合の情報処理装置１５０の動作を分けて説明する。
（１）第１演算結果格納レジスタ１１３に値を書込む場合
第１演算器１１２は、第１データ入力バス１２０のＤｍが第１演算器１１２を表す「０」を読み込んだ場合に、第２データ入力バス１２１のＤｎを読み取る。そして、Ｄｎを第１演算結果格納レジスタ１１４に格納する。
【００５６】
搭載演算器情報出力回路１１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から入力された値と保持している演算器個数とを比較し、「０」は「１」より小さいのでフラグ値「０」を出力する。
論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合、搭載演算器情報出力回路１１７のフラグ値０を出力する。
【００５７】
フラグレジスタ１０２は、拡張演算器１１０から出力された搭載演算器情報出力回路１１７のフラグ値０を演算結果フラグに格納する。当該フラグにより、ＣＰＵ１００は、データの再格納がまだ終了していないことを認識できる。
（２）第２演算結果格納レジスタ１１５に値を書込む場合
第２演算器１１４は第１データ入力バス１２０のＤｍが第２演算器１１４を表す「１」を読み込んだ場合に、第２データ入力バス１２２のＤｎを第２演算結果格納レジスタ１１５に格納する。
【００５８】
搭載演算器情報出力回路１１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から読み取った値と保持する演算器個数とを比較し、同じなのでフラグ値「１」を出力する。
論理和回路１１８は第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び搭載演算器情報出力回路１１７の出力の論理和演算を行い、この場合、搭載演算器情報出力回路１１７のフラグ値「１」を出力する。
【００５９】
そして、フラグレジスタ１０２は、拡張演算器１１０から出力される搭載演算器情報出力回路１１７のフラグ値「１」を演算結果フラグに格納する。フラグレジスタ１０２のフラグ値が「１」になったことで、ＣＰＵ１００は、退避させていた全てのデータの再格納が終了したことを認識できる。
＜ＣＰＵ実行命令＞
ここから、ＣＰＵ１００においてのみ実行されるＣＰＵ実行命令について説明する。
【００６０】
次に、図４を用いて、ＣＰＵ１００からデータの退避、及び復帰に用いられるＣＰＵ実行命令のニーモニックと、ＣＰＵの動作の一例を示す図である。以下、ＣＰＵがＲＯＭ１３０から読み込み、実行する各ＣＰＵ実行命令について説明する。なお、ＣＰＵ実行命令においては、「ＳＰ」と「（ＳＰ）」と区別して記載している。「ＳＰ」は、直接スタックポインタ格納レジスタ１０７に格納されている値に対する操作を実行する場合に用い、「（ＳＰ）」は、ＲＡＭ１４０の当該アドレス値で指定されるアドレスに対するデータの読み出しあるいは書込みの操作を実行する場合に用いる。
＜ＭＯＶ  Ｄｍ，（ＳＰ）命令＞
「ＭＯＶ  Ｄｍ，（ＳＰ）」命令は、汎用レジスタ１０４のｍ番目のレジスタに格納されている値をスタックポインタ格納レジスタ１０２に格納されているアドレス値で指定されるＲＡＭ１４０のアドレスに格納するための命令である。
【００６１】
「ＭＯＶ  Ｄｍ，（ＳＰ）」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。
汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力する。スタックポインタ格納レジスタ１０３は、保持するアドレス値をＲＡＭ１３０に出力する。ＲＡＭ１４０は、スタックポインタ格納レジスタ１０３から出力されたアドレス値の示す領域に第１データ入力バス１２０を介して取得したデータを書込む。
【００６２】
以上が、「ＭＯＶ  Ｄｍ，（ＳＰ）」命令の説明である。
＜ＭＯＶ  （ＳＰ）,Ｄｎ命令＞
「ＭＯＶ  （ＳＰ）,Ｄｎ」命令は、スタックポインタ格納レジスタ１０２に格納されているアドレス値で指定されるＲＡＭ１４０のアドレスに格納されている値を、汎用レジスタ１０４のｎ番目のレジスタに格納させるための命令である。
【００６３】
「ＭＯＶ  （ＳＰ）,Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。
当該制御信号に基づいて、まず、スタックポインタ格納レジスタ１０３は、保持するアドレス値をＲＡＭ１４０に出力する。ＲＡＭ１４０は、スタックポインタ格納レジスタ１０３からアドレスを入力しアドレス値の示す領域のデータをデータ出力バス１２２に出力する。そして、汎用レジスタ１０４は、データ出力バス１２２の値を読み取ってｎ番目のレジスタに保持する。
【００６４】
以上が、「ＭＯＶ  （ＳＰ）,Ｄｎ命令」の説明である。
＜ＭＯＶ  ＃＜即値＞，Ｄｎ命令＞
「ＭＯＶ  ＃＜即値＞，Ｄｎ」命令は、ＲＯＭ１３０から出力される値を、汎用レジスタ１０４のｎ番目のレジスタに格納するための命令である。
「ＭＯＶ  ＃＜即値＞，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。汎用レジスタ１０４は、データ出力バス１２２の値を読み取ってｎ番目のレジスタに保持する。
【００６５】
以上が、「ＭＯＶ  ＃＜即値＞，Ｄｎ」命令の説明である。
＜ＩＮＣ  Ｄｍ命令＞
「ＩＮＣ  Ｄｍ」命令は、汎用レジスタ１０４のｍ番目のレジスタに格納されている値をインクリメントするための命令である。
「ＩＮＣ  Ｄｍ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。そして、汎用レジスタ１０４は、ｍ番目のレジスタが保持していた値に１加算した値を保持しなおす。
【００６６】
以上が、「ＩＮＣ  Ｄｍ」命令の説明である。
＜ＩＮＣ  ＳＰ命令＞
「ＩＮＣ  ＳＰ」命令は、スタックポインタ格納レジスタ１０３に格納されている値をインクリメントするための命令である。
「ＩＮＣ  ＳＰ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ１００内部の各回路に制御信号を出力する。スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
【００６７】
以上が、「ＩＮＣ  ＳＰ」命令の説明である。
＜Ｂｃｃ  ＜ラベル＞命令＞
「Ｂｃｃ  ＜ラベル＞」命令は、フラグレジスタ１０３に格納されている値に基づいて分岐を実行するための命令である。
「Ｂｃｃ  ＜ラベル＞」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードされた内容に基づいてＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。ＣＰＵ１００は、フラグレジスタ１０３の保持する値が「０」の場合に＜ラベル＞のアドレス値をＲＯＭ１３０に出力することで、当該アドレス値で指定される箇所に分岐を実施する。なお、フラグレジスタ１０３の保持する値が「１」の場合には分岐を実施しない。
【００６８】
以上が、「Ｂｃｃ  ＜ラベル＞」命令の説明である。
＜ＣＬＲ  Ｄｍ命令＞
「ＣＬＲ  Ｄｍ」命令は、汎用レジスタ１０４のｍ番目のレジスタの値を初期化するための命令である。
「ＣＬＲ  Ｄｍ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードされた内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。汎用レジスタ１０４は、ｍ番目のレジスタに保持する値をクリアし、「０」値を保持する。
【００６９】
以上が、「ＣＬＲ  Ｄｍ」命令の説明である。
＜ＲＴＩ  命令＞
「ＲＴＩ」命令は、割込みにおいて実行した命令が終了したときに、割込みが発生したときに通常処理で実行していたアドレス値に分岐するための命令である。
「ＲＴＩ」命令は、ＲＯＭ１３０からＣＰＵ１００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＲＴＩ命令をデコードしＣＰＵ１００内部の各回路に制御信号を出力する。ＣＰＵ１００は、割込み発生時のアドレス値をＲＯＭ１３０に出力することで分岐を実施する。
【００７０】
以上が、「ＲＴＩ」命令の説明である。
＜動作＞
ここから、情報処理装置１５０の特徴部分である割込み発生時のデータの退避と、再格納における拡張演算器命令デコーダ１１１の動作について説明したのち、具体的な命令列を用いて情報処理装置１５０の動作を説明する。
【００７１】
まず、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令実行時の拡張演算器命令デコーダ１１１の動作を図４のフローチャートに基づいて説明する。
拡張演算器命令デコーダ１１１は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読みだし、デコードする（ステップＳ４０１）。
ＲＯＭ１３０から取得した命令が、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令であることを解読した拡張演算器命令デコーダ１１１は、第１データ入力バス１２０の値を読み取る（ステップＳ４０３）。
【００７２】
拡張演算器命令デコーダ１１１は、読み取った第１データ入力バス１２０の値により指定されるレジスタに対して、「ＧＥＴＡＣＸ」命令実行を示す制御信号を出力する（ステップＳ４０５）。当該制御信号を受け取った演算器は、備えられているレジスタのデータの出力を実行する。
拡張演算器命令デコーダ１１１は、セレクタ１１６に対して、指定したレジスタから出力された値をデータ出力バス１２２に出力される制御信号を出力する（ステップＳ４０７）。これにより、レジスタからのデータが退避される。
【００７３】
以上が、「ＧＥＴＡＣＸ」命令を解読して実行する時の拡張演算器命令デコーダ１１１の動作である。
次に、「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令実行時の拡張演算器１１０の動作を図５のフローチャートに基づいて説明する。
拡張演算器命令デコーダ１１１は、「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令をＲＯＭ１３０から読みだし、デコードする（ステップＳ５０１）。
【００７４】
ＲＯＭ１３０から取得した命令が、「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令であることを解読した拡張演算器命令デコーダ１１１は、第１データ入力バス１２０の値を読み取る（ステップＳ５０３）。
拡張演算器命令デコーダ１１１は、読み取った第１データ入力バス１２０の値により指定されるレジスタに対して、ＰＵＴＡＣＸ命令実行を示す制御信号を出力する（ステップＳ５０５）。
【００７５】
以上が、ＧＥＴＡＣＸ命令解読時の拡張演算器命令デコーダ１１１の動作である。
最後に、図６に示した具体的な命令列に基づいて情報処理装置１５０の動作を説明する。図６は、図２、図３で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
ＣＰＵ１００は、ＲＯＭ１３０に格納された通常処理の命令列６００を処理する。ＣＰＵ１００は、通常処理の命令列中の「ＣＬＲ  Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の２番目のレジスタに「０」値を保持する。
【００７６】
ＣＰＵ１００と拡張演算器１１０とは、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込む。そして第１演算器１１２は、第１演算結果格納レジスタ１１３に積の上位ビット側結果を格納し、積の下位ビット側結果をセレクタ１１６に出力する。セレクタ１１６は、第１演算器１１２から出力されたデータをデータ出力バス１２２に出力し、汎用レジスタ１０４は、１番目のレジスタに積の下位ビット側結果を保持する。フラグレジスタ１０２には第１演算器１１２から出力された演算結果フラグが保持される。
【００７７】
ＣＰＵ１００は、上記「ＭＵＬＱ  Ｄ０，Ｄ１」の命令実行後に、割込みを受付けて、割込みハンドラの命令列６１０のハンドラ先頭に分岐する。
まず、ＣＰＵ１００は、割込みハンドラの命令列中の汎用レジスタ１０４の格納値をＲＡＭ１４０に退避する処理を行う。この時汎用レジスタ１０４の２番目に格納されている「０」値もＲＡＭ１４０に退避される。なお、汎用レジスタに格納されている値と格納されていたレジスタの番号も対応付けて記憶される。また、退避させたデータを元通り戻すために、この時点でスタックポインタ格納レジスタに格納されていたアドレス値をＳＰ初期値としてＲＡＭ１４０に記憶しておく。
【００７８】
ＣＰＵ１００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の０番目のレジスタに「０」値を保持する。
ＣＰＵ１００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込み、スタックポインタ格納レジスタ１０３に保持されているアドレス値に定数値を加算した値を保持しなおす。
【００７９】
ＣＰＵ１００と拡張演算器１１０は「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持する値が、汎用レジスタ１０４の１番目のレジスタに保持され、搭載演算器情報出力回路１１７のフラグ値「０」がフラグレジスタ１０２に格納される。
ＣＰＵ１００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ１００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに、汎用レジスタ１０４の１番目のレジスタに保持されている値を書き込む。
【００８０】
ＣＰＵ１００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。汎用レジスタ１０４の０番目のレジスタが保持していた値に１を加算した値を保持しなおす。ここで、Ｄ０は、「１」を保持することになる。
ＣＰＵ１００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ３０から読み込んで実行する。フラグレジスタ１０２に格納される値は「０」であり、「１」ではないので＜ラベル１＞に分岐する。
【００８１】
ＣＰＵ１００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。スタックポインタ格納レジスタ１０３は保持するアドレス値に定数値を加算した値を保持しなおす。
ＣＰＵ１００と拡張演算器１１０は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。第２演算結果格納レジスタ１１５が保持する値を汎用レジスタ１０４の１番目のレジスタに保持する。搭載演算器情報出力回路１１７は第1データ入力バス１２０の値「１」を読み取り、保持する演算器情報と比較し、一致するので、フラグ値「１」をフラグレジスタ１０２に出力する。そしてフラグレジスタ１０２は、フラグ値「１」を記憶する。
【００８２】
ＣＰＵ１００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ１００は、ＲＡＭ１３０のスタックポインタ格納レジスタ１０２に格納されるアドレス値により指定されるアドレスに、汎用レジスタ１０４の１番目のレジスタに保持されている値を書き込む。
ＣＰＵ１００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。汎用レジスタ１０４は、０番目のレジスタが保持していた値に１を加算した値を保持しなおす。
【００８３】
ＣＰＵ１００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ１００は、フラグレジスタ１０２に格納される値が、「１」であるので、＜ラベル１＞に分岐しない。
そして、ＣＰＵ１００は、以降割込みハンドラの命令列において実際に実行されるべき命令を実行する。
【００８４】
ＣＰＵ１００は、割込みハンドラの命令列の実行を完了した後に、「ＣＬＲ  Ｄ０」の命令を解読し、汎用レジスタ１０４の０番目のレジスタに「０」値を格納する。また、ＣＰＵ１００は、ＲＡＭ１４０に記憶しておいたＳＰ初期値をスタックポインタ格納レジスタ１０２に上書きする。
ＣＰＵ１００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０２は、保持しているアドレス値に定数値を加算した値を保持しなおす。
【００８５】
ＣＰＵ１００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。ＲＡＭ１４０のスタックポインタ格納レジスタ１０２に格納されるアドレス値により指定されるアドレスに格納されているデータを、汎用レジスタ１０４の１番目のレジスタに書き込む。
ＣＰＵ１００と拡張演算器１１０は、「ＰＵＴＡＣＸ Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持していた値が、第１演算結果格納レジスタ１１４に格納される。また、搭載演算器情報出力回路１１７は、保持する演算器個数「１」と第１データ入力バス１２０の値「０」とを比較し、「０」は「１」より小さいので、フラグ値「０」をフラグレジスタ１０２に出力する。そして、フラグレジスタ１０２は、フラグ値「０」を記憶する。
【００８６】
ＣＰＵ１００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに保持するアドレス値に1を加算した値を保持する。
ＣＰＵ１００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「０」であるので＜ラベル２＞に分岐する。
【００８７】
ＣＰＵ１００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０２が保持するアドレス値から定数値を加算した値を保持しなおす。
ＣＰＵ１００は、「ＭＯＶ （ＳＰ）,Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。ＲＡＭ１４０のスタックポインタ格納レジスタ１０２に格納されているアドレス値で指定されるアドレスに格納されている値を、汎用レジスタ１０４の１番目のレジスタに書き込む。
【００８８】
ＣＰＵ１００と拡張演算器１１０は、「ＰＵＴＡＣＸ Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。汎用レジスタ１０４の１番目のレジスタが保持する値を第２演算結果格納レジスタ１１５に格納される。また、搭載演算器情報出力回路１１７は、フラグ値1をフラグレジスタ１０２に格納する。
ＣＰＵ１００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。汎用レジスタ１０４の０番目のレジスタが保持している値に1を加算した値を保持しなおす。
【００８９】
ＣＰＵ１００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「１」であるので＜ラベル２＞に分岐しない。
ＣＰＵ１００は、ＲＡＭ１４０に退避した汎用レジスタ１０４が保持していた値を、汎用レジスタ１０４に復帰する処理を行う。この時ＲＡＭ１４０に退避させていた汎用レジスタ１０４の２番目の０値も汎用レジスタ１０４の２番目のレジスタに格納される。
【００９０】
ＣＰＵ１００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列６００に分岐する。これで、割込み発生時の状態に戻ったことになる。
以上、実施の形態１に示したように、情報処理装置において、割込み発生時に「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令という一つの拡張演算命令だけで、全てのレジスタからのデータの退避を実現でき、また、「ＰＵＴＡＣＸ  Ｄｍ，Ｄｎ」命令という一つの拡張演算命令だけで、退避させたデータをレジスタに格納しなおすことが実現できる。
＜実施の形態２＞
上記実施の形態１では、拡張演算器１１０に備えられた拡張演算器情報出力回路が全てのレジスタからのデータの退避、あるいは再格納が終了したことを示すフラグを出力することでＣＰＵ１００は、レジスタからのデータの退避、再格納がなされたことを認識することができた。
【００９１】
本実施の形態２においては、実施の形態１とは異なる方法で、全てのレジスタからのデータの退避あるいは、再格納がなされたことをＣＰＵが認識することができる手法を示す。当該方法とは、情報処理装置のリセット時に拡張演算器からＣＰＵにレジスタ数を伝達するという手法である。
＜構成＞
本実施の形態２における情報処理装置２５０は、ＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ２００と、拡張演算器２１０とを含んで構成される。
【００９２】
ＣＰＵ２００は、ＣＰＵ命令デコーダ１０１と、スタックポインタ格納レジスタ１０３と、汎用レジスタ１０４と、フラグレジスタ２０２とを含んで構成される。
拡張演算器２１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と、第２演算器１１３と、第２演算結果格納レジスタ１１５と、セレクタ１１６と、レジスタ数発生器２１１、第１演算結果格納レジスタ２１３とを含んで構成される。
【００９３】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態２においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態１と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【００９４】
フラグ２０２は、ＣＰＵ命令デコーダ１０１からの制御信号に基づき、ＣＰＵ２００で実行される比較命令の結果に応じて、汎用レジスタ１０４のＤ０とＤ３の比較に基づき、Ｄ０の値がＤ３の値以上であった場合に拡張演算器２１０の全てのレジスタからデータの退避、あるいは復帰が終了したことを示す「１」を記憶し、Ｄ０の値がＤ３より小さい場合に拡張演算器２１０の全てのレジスタからデータの退避、あるいは復帰が未終了であることを示す「０」を記憶する機能を有する。
【００９５】
レジスタ数発生器２１１は、拡張演算器２１０が備えるレジスタの個数を示すレジスタ数を記憶しており、情報処理装置２１０がリセットされたタイミングで、保持しているレジスタ数を第１演算格納レジスタ２１３に出力する機能を有する。
第１演算格納レジスタ２１３は、実施の形態１に示した第１演算格納レジスタ１１３が有する機能に加え、レジスタ数発生器から出力されたレジスタ数を保持する機能と、保持しているレジスタ数をセレクタ１１６に出力する機能も有する。
【００９６】
以上が実施の形態１から変更された実施の形態２における情報処理装置２４０の機能の説明である。
＜コマンド＞
ここから、実施の形態１に加えて、実施の形態２において用いられる命令の説明をする。
＜ＣＰＵ実行命令＞
図８は、ＲＯＭ１３０から読み出され、ＣＰＵ２００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられるＣＰＵ実行命令のニーモニック、ＣＰＵの動作の一例を示した表である。図８を用いて実施の形態２において用いられる命令について説明する。
＜ＣＭＰ  Ｄｍ，Ｄｎ命令＞
「ＣＭＰ  Ｄｍ，Ｄｎ」命令は、ＤｍとＤｎとの大小を比較するための命令である。
【００９７】
「ＣＭＰ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ２００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいて、ＣＰＵ命令デコーダ１０１は、ＣＰＵ１００内部の各回路に制御信号を出力する。汎用レジスタ１０４は、ｍ番目のレジスタに保持する値とｎ番目のレジスタに保持する値とを比較し、一致した場合に「１」値をフラグレジスタ２０２に格納し、一致しない場合は「０」値をフラグレジスタ２０２に格納する。フラグレジスタ２０２は、汎用レジスタ１０４から出力された比較結果の値を保持する。
【００９８】
以上が、「ＣＭＰ  Ｄｍ，Ｄｎ」命令の説明である。
＜動作＞
では、ここから実施の形態２に係る情報処理装置２５０の動作について、図面に基づいて説明する。
まず、本実施の形態における特徴部分であるリセット時の情報処理装置２５０の動作について、図９のフローチャートと図８のブロック図とに基づいて説明する。
【００９９】
情報処理装置２５０は、起動時やユーザからのリセット操作などに基づき、リセットされる（ステップＳ９０１）。
拡張演算器２１０のレジスタ数発生器２１１は、保持しているレジスタ数の情報を第１演算格納レジスタ２１３に出力する（ステップＳ９０３）。
第１演算格納レジスタ２１３は、入力されたレジスタ数を保持する（ステップＳ９０５）。
【０１００】
拡張演算器命令デコーダ１１１は、「ＧＥＴＡＣＸ」命令を解読し、第１演算器１１２に対して第１演算格納レジスタ２１３が保持している値を出力させ、セレクタ１１６に対して、第１演算器１１２から出力された値をデータ出力バス１２２に出力させる（ステップＳ９０７）。
拡張演算器命令デコーダ１１１は、セレクタ１１６に対して第１演算格納レジスタ１１３から出力されたデータをデータ出力バス１２２に出力させる制御信号を出力する（ステップＳ９１１）。
【０１０１】
そして、ＣＰＵ２００は、データ出力バス１２２に出力されたレジスタ数の情報を汎用レジスタ１０４に格納する。
以上が、情報処理装置２５０のリセット時の動作である。
続いて、本実施の形態２における具体的な動作例を図１０に示した命令列を用いて説明する。
【０１０２】
図１０は、図２、図３、図８で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。図１０において、矢印１００１は、情報処理装置２５０のリセットタイミングを示しており、矢印１００２は、通常処理の命令列１０００を実行しているときに、割込みが発生したタイミングを示している。
【０１０３】
ＣＰＵ２００は、リセット解除後、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値を保持する。
ＣＰＵ２００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ３」の命令をＲＯＭ１３０から読み込んで実行する。その結果、レジスタ数発生器２１１が出力するレジスタ資源数１を保持する。これにより、第１演算結果格納レジスタ２１３から出力されたレジスタ数の情報が、汎用レジスタ１０４の３番目のレジスタに保持される。
【０１０４】
ＣＰＵ２００は、ＲＯＭ１３０に格納されている通常処理の命令列を処理する。
ＣＰＵ２００は、通常処理の命令列１０００中の「ＣＬＲ Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。この結果、汎用レジスタ１０４の２番目のレジスタに「０」値が保持される。
ＣＰＵ２００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。第１演算結果格納レジスタ２１３に積の上位ビット側結果を保持し、汎用レジスタ１０４の１番目のレジスタに積の下位ビット側結果を保持し、フラグレジスタ１０２に演算結果フラグを保持する。
【０１０５】
ＣＰＵ２００は、上記「ＭＵＬＱ  Ｄ０，Ｄ１」の命令実行後に割込みを受付けて、割込みハンドラの命令列１０１０のハンドラ先頭に分岐する。
ＣＰＵ２００は、割込みハンドラの命令列中の汎用レジスタ１０４の格納値をＲＡＭ１４０に退避する処理を行う。この時、汎用レジスタ１０４の２番目に格納されている「０」値もＲＡＭ１４０に退避される。また、ＣＰＵ１００は、ＲＡＭ１４０にその時点におけるスタックポインタ格納レジスタ１０２に格納されているアドレス値をＳＰ初期値として記憶する。
【０１０６】
ＣＰＵ２００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値が保持される。
ＣＰＵ２００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は保持していたアドレス値に定数値を加算した値を保持しなおす。
【０１０７】
ＣＰＵ２００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。すると、第１演算結果格納レジスタ２１３が保持する値を汎用レジスタ１０４の１番目のレジスタに保持する。
ＣＰＵ２００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１３０のスタックポインタ格納レジスタ１０３に保持されているアドレス値で指定されるアドレスに汎用レジスタ１０４の１番目のレジスタに保持されている値を書き込む。
【０１０８】
ＣＰＵ２００は、「ＣＭＰ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ２００は、Ｄ０とＤ１とが一致しないため、「０」値をフラグレジスタ２０２に書き込む。
ＣＰＵ２００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに、保持していた値に1を加算した値を保持しなおす。
【０１０９】
ＣＰＵ２００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２００は、フラグレジスタ２０２に保持されている値が「０」であるので＜ラベル１＞に分岐する。
ＣＰＵ２００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持しているアドレス値に定数値を加算した値を保持しなおす。
【０１１０】
ＣＰＵ２００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第２演算結果格納レジスタ１１５が保持していた値が汎用レジスタ１０４の１番目のレジスタに保持される。
ＣＰＵ２００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレス値により指定されるアドレスに、汎用レジスタ１０４の１番目のレジスタに保持する値を書き込む。
【０１１１】
ＣＰＵ２００は、「ＣＭＰ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ０とＤ１とが共に「１」であり、一致するため「１」値をフラグレジスタ２０２に書き込む。
ＣＰＵ２００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに保持するアドレス値に1を加算した値を保持する。
【０１１２】
ＣＰＵ２００は「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２００は、フラグレジスタ２０２に格納される値が「１」であるので、＜ラベル１＞に分岐しない。
ＣＰＵ２００は、割込みハンドラにおいて実際に実行する命令列の実行を完了し、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値を保持する。また、ＣＰＵ２００は、ＳＰ初期値をＲＡＭ１４０から読み出してスタックポインタ格納レジスタ１０２に上書きする。
【０１１３】
ＣＰＵ２００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は保持しているアドレス値から定数値を加算した値を保持しなおす。
ＣＰＵ２００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
【０１１４】
ＣＰＵ２００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持していた値が、第１演算結果格納レジスタ２１３に格納される。
ＣＰＵ２００は、「ＣＭＰ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ０とＤ１とが一致しないため、ＣＰＵ２００は、「０」値をフラグレジスタ２０２に書き込む。
【０１１５】
ＣＰＵ２００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに、汎用レジスタ１０４の０番目のレジスタが保持していた値に1を加算した値を保持しなおす。
ＣＰＵ２００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納されている値が「０」であるので＜ラベル２＞に分岐する。
【０１１６】
ＣＰＵ２００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値から定数値を加算した値を保持しなおす。
ＣＰＵ２００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３が保持しているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
【０１１７】
ＣＰＵ２００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持していた値が、第２演算結果格納レジスタ１１５に格納される。
ＣＰＵ２００は、「ＣＭＰ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ０とＤ１とが一致するため「１」値をフラグレジスタ２０２に書き込む。
【０１１８】
ＣＰＵ２００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに、汎用レジスタ１０４の０番目のレジスタが保持している値に1を加算した値を保持しなおす。
ＣＰＵ２００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納されている値が「１」であるので＜ラベル２＞に分岐しない。
【０１１９】
ＣＰＵ２００は、ＲＡＭ１４０に退避させていた値を、汎用レジスタ１０４に復帰する処理を行う。この時、ＲＡＭ１４０に退避されていた汎用レジスタ１０４の２番目の０値も汎用レジスタ１０４の２番目のレジスタに格納される。
ＣＰＵ２００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列１０００に分岐する。
【０１２０】
ＣＰＵ２００は、「ＧＥＴＡＣＸ  Ｄ２，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ２１３が保持していた値が汎用レジスタ１０４の２番目のレジスタに保持され、搭載演算器情報出力回路１１７のフラグ値「０」をフラグレジスタ２０２に格納する。
以上に説明してきたように、本実施の形態２においては、情報処理装置２５０がリセットされたタイミングにおいて、レジスタ数発生器２１１が保持する拡張演算器２１０に搭載されているレジスタ数の情報が第１演算結果格納レジスタ２１３に格納される。そしてＣＰＵ２００は、処理を実行する前に、第１演算結果格レジスタ２１３に格納された値を獲得することで、拡張演算器２１０に搭載されているレジスタ数を検知することができ、割込み発生した場合に、レジスタからデータを退避させる際に全てのレジスタに対してデータの退避の指示ができたかどうかを自身で認識することができるようになる。
＜実施の形態３＞
上記実施の形態２においては、単純にレジスタ数の情報を出力したのみであるが、ＣＰＵが拡張演算器に搭載される演算器の種類を予め記憶しておれば、演算器の種類からレジスタ数を決定することができる。そこで、本実施の形態においては、レジスタ数ではなく、拡張演算器に搭載されている演算器の情報をＣＰＵが認識でき、当該認識に基づいて、拡張演算器に搭載されているレジスタ数を特定できる実施の形態を示す。
＜構成＞
本実施の形態２における情報処理装置３５０は、ＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ３００と、拡張演算器３１０とを含んで構成される。
【０１２１】
ＣＰＵ２００は、ＣＰＵ命令デコーダ１０１と、スタックポインタ格納レジスタ１０３と、汎用レジスタ１０４と、フラグレジスタ２０２とを含んで構成される。
拡張演算器２１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と、セレクタ１１６と、レジスタ数発生器３１１と、第１演算結果格納レジスタ３１３と、第３演算器３１４と、第３演算結果格納レジスタ３１５とを含んで構成される。
【０１２２】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態３においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態１あるいは実施の形態２と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【０１２３】
レジスタ情報発生器３１１は、拡張演算器３１０に搭載されている演算器の種類に関する情報を保持する機能を有し、情報処理装置３５０がリセットされたタイミングで保持していた値を第１演算結果格納レジスタ３１３に出力する機能を有する。
レジスタ情報発生器３１１が保持しているレジスタ情報について詳細に述べると、レジスタ情報発生器３１１は、「０ｂ０１０１」という情報を保持している。本実施の形態においては、拡張演算器に搭載され得る演算器の種類は４種類であるとする。レジスタ情報発生器３１１が保持している値の、第１ビットは第１演算器の有無を、第２ビットは第２演算器の有無を、第３ビットは第３演算器の有無を、第４ビットは第４演算器の有無を示す。拡張演算器３５０に、その演算器が搭載されているならば、「１」を用いてそのことを示し、搭載されていないならば、「０」を用いてそのことを示す。ここでは、拡張演算器３１０には、第１演算器１１２と、第３演算器３１４とが搭載されているので、レジスタ情報発生器３１１が保持する値は、「０ｂ０１０１」となっている。仮に、拡張演算器３５０に搭載されている演算器が、第２演算器と第４演算器とであった場合には、レジスタ情報発生器３１１が保持する値は、「０ｂ１０１０」となる。
【０１２４】
第３演算器３１４は、積和演算器であり、積和演算を実行する機能を有する。具体的には、第３演算器３１４は、拡張演算器命令デコーダ１１０から供給される制御信号によって第１データ入力バス１２０及び第２データ入力バス１２１を介して転送されたデータ及び第３演算結果格納レジスタ３１５に予め保持されている値を入力とする積和演算を実行する。第１データ入力バス１２０及び第２データ入力バス１２１を介して転送されたデータの積を行った後に、第３演算結果格納レジスタ３１５が保持する値を加算する積和演算を行い、演算結果を第３演算結果格納レジスタ３１５に格納する。
【０１２５】
第３演算結果格納レジスタ３１５は、第３演算器３１４で実行する演算に必要なデータと、演算結果のデータを格納する機能を有する。
＜コマンド＞
ここから本実施の形態３において用いられる命令について説明する。
＜拡張演算命令＞
図１２は、図２に加えてＣＰＵ３００及び拡張演算器３０１に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示す図である。
＜ＭＡＣ  Ｄｍ，Ｄｎ命令＞
「ＭＡＣ  Ｄｍ，Ｄｎ」命令は、拡張演算器３０１において積和演算を実行するための拡張演算命令である。
【０１２６】
「ＭＡＣ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ３００及び拡張演算器３１０に読み出されることにより実行される。
ＣＰＵ命令デコーダ１０１は、「ＭＡＣ  Ｄｍ，Ｄｎ」命令をデコードし、デコードした内容に基づいて、ＣＰＵ３００内部の各回路に制御信号を出力する。ここでｍ及びｎは命令のオペランドで指定されるレジスタ番号である。
【０１２７】
拡張演算器命令デコーダ１１１は、「ＭＡＣ  Ｄｍ，Ｄｎ」命令をデコードし拡張演算器３１０内部の各回路に制御信号を出力する。
汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。第３演算器３１４は、第１データ入力バス１２０を介してＤｍを取得し、第２データ入力バス１２１を介してＤｎを取得する。そして、第３演算器３１４は、Ｄｍを被乗数、Ｄｎを乗数とする積を求める。そして、積の結果と、第３演算結果格納レジスタ３１５に予め保持されていた値との和を求める。そして第３演算器３１４は、当該和の演算結果を第３演算結果格納レジスタ３１５に格納する。第３演算結果格納レジスタ３１５は、第３演算器３１４が実行した積和演算の演算結果の値を保持する。
【０１２８】
以上が、「ＭＡＣ  Ｄｍ，Ｄｎ」命令の説明である。
＜ＣＰＵ実行命令＞
次いで、本実施の形態３において用いるＣＰＵ実行命令について説明する。図１３は、図３及び図６に加えてＣＰＵ３００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられる命令のニーモニック、ＣＰＵの動作の一例を示す図である。
＜ＭＯＶ  Ｄｍ，Ｄｎ命令＞
「ＭＯＶ  Ｄｍ，Ｄｎ」命令は、Ｄｍを汎用レジスタのｎ番目のレジスタに格納するための命令である。
【０１２９】
「ＭＯＶ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ３００に読み出されて実行される。ＣＰＵ命令デコーダ１０４は、「ＭＯＶ  Ｄｍ，Ｄｎ」命令をデコードし、デコードした内容に基づいてＣＰＵ３００内部の各回路に制御信号を出力する。出力された制御信号に基づいて、汎用レジスタ１０４は、ｍ番目のレジスタに保持する値をｎ番目のレジスタに保持する。
【０１３０】
以上が、「ＭＯＶ  Ｄｍ，Ｄｎ」命令の説明である。
＜ＡＮＤ  ＃＜即値＞，Ｄｍ命令＞
「ＡＮＤ  ＃＜即値＞，Ｄｍ」命令は、即値データと、Ｄｍとの論理積を演算するための命令である。
「ＡＮＤ  ＃＜即値＞，Ｄｍ」命令は、ＲＯＭ１３０からＣＰＵ３００に読み出され、ＣＰＵ命令デコーダ１０１によりデコードされる。デコードした内容に基づいてＣＰＵ命令デコーダ１０１は、ＣＰＵ２００内部の各回路に制御信号を出力する。データ出力バス１２２は、ＲＯＭ１３０から出力される即値データを、ＣＰＵ３００の汎用レジスタ１０４に転送する。ＣＰＵ３００は、データ出力バス１２２の値と、汎用レジスタ１０４のｎ番目のレジスタに保持する値との論理積演算を行い、演算結果を汎用レジスタ１０４のｎ番目のレジスタに保持する。
【０１３１】
以上が、「ＡＮＤ  ＃＜即値＞，Ｄｍ」命令の説明である。
＜動作＞
ここから本実施の形態３における情報処理装置３５０の動作について説明する。図１４及び図１５は、図２、図３、図８、図１２、図１３を用いて説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下に、情報処理装置３５０が、この命令列を実行する際の動作について説明する。なお、図中において示した矢印１４０１は、情報処理装置３５０においてリセットしたタイミングを示しており、矢印１４０２は、命令列１４００を実行しているときに、割込みが発生したタイミングを示している。
【０１３２】
ＣＰＵ３００は、リセット解除後、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値を保持する。
ＣＰＵ３００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ３」の命令をＲＯＭ１３０から読み込んで実行する。その結果、レジスタ情報「０ｂ０１０１」を保持する第１演算結果格納レジスタ３１３から、当該レジスタ情報「０ｂ０１０１」が出力され、汎用レジスタ１０４の３番目のレジスタに保持される。これにより、ＣＰＵ３００に、拡張演算器３１０に搭載されている演算器の情報が保持されたことになる。
【０１３３】
ＣＰＵ３００は、ＲＯＭ１３０に格納された通常処理の命令列を処理する。
ＣＰＵ３００は、通常処理の命令列１４００中の「ＭＯＶ  ＃０，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の２番目のレジスタに「０」値が保持される。
ＣＰＵ３００は、「ＭＡＣ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第３演算結果格納レジスタ３１５に積和演算の演算結果の値が保持される。
【０１３４】
ＣＰＵ３００は、上記「ＭＡＣ  Ｄ０，Ｄ１」の命令実行後割込みを受付けて、割込みハンドラの命令列１４１０のハンドラ先頭に分岐する。
ＣＰＵ３００は、まず、汎用レジスタ１０４の格納値をＲＡＭ１４０に退避する処理を行う。この時、汎用レジスタ１０４の２番目に格納されている「０」値もＲＡＭ１４０に退避される。
【０１３５】
ＣＰＵ３００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値が保持される。また、スタックポインタ格納レジスタ１０３に格納されているアドレス値をＳＰ初期値としてＲＡＭ１４０に記憶する。
ここから図１５に示した命令列１４１１に基づいて説明する。
【０１３６】
ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ３００は、汎用レジスタ１０４の３番目のレジスタに保持されている「０ｂ０１０１」値を２番目のレジスタに保持する。
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ３００は、汎用レジスタ１０４の２番目のレジスタに保持にする「０ｂ０１０１」値と、即値として与えられた「０ｂ０００１」との論理積を演算する。そして、ＣＰＵ３００は、演算結果の「０ｂ０００１」値を汎用レジスタ１０４の２番目のレジスタに保持にする。
【０１３７】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ３００は、汎用レジスタ１０４の１番目のレジスタに「０ｂ０００１」値を保持する。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、一致するため「１」値をフラグレジスタ２０２に書き込む。
【０１３８】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納されている値が「１」であるので分岐しない。
ＣＰＵ３００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
【０１３９】
ＣＰＵ３００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ３１３が保持していた値が、汎用レジスタ１０４の１番目のレジスタに保持される。
ＣＰＵ３００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレス値で指定されるアドレスに、汎用レジスタ１０４の１番目のレジスタが保持する値を書き込む。
【０１４０】
ＣＰＵ３００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４は、０番目のレジスタが保持している値に１加算した値を保持しなおす。
ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の３番目のレジスタが保持している「０ｂ０１０１」値を２番目のレジスタに保持にさせる。
【０１４１】
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ００１０、Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ２００は、汎用レジスタ１０４の２番目のレジスタに保持している「０ｂ０１０１」値と、即値として与えられら「０ｂ００１０」との論理積を演算する。そして、ＣＰＵ２００は、当該論理積の演算結果の「０ｂ００００」値を汎用レジスタ１０４の２番目のレジスタに保持する。
【０１４２】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２００は、汎用レジスタ１０４の１番目のレジスタに「０ｂ００１０」値を保持させる。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致しないため、ＣＰＵ２００は、「０」値をフラグレジスタ１０３に書き込む。
【０１４３】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０３に格納されている値が「０」であるので＜ラベル２＞に分岐する。
ＣＰＵ３００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４は、０番目のレジスタが保持するアドレス値に「１」を加算した値を０番目のレジスタに保持しなおす。
【０１４４】
ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の３番目のレジスタが保持していた「０ｂ０１０１」値を２番目のレジスタに保持する。
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ０１００，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の２番目のレジスタに保持にする「０ｂ０１０１」値と即値として与えられる「０ｂ０１００」との論理積を演算する。ＣＰＵ３００は、当該論理積の演算結果の「０ｂ０１００」値を汎用レジスタ１０４の２番目のレジスタに保持させる。
【０１４５】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ０１００，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタに「０ｂ０１００」値が保持される。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２０２は、Ｄ１とＤ２とが一致するため「１」値をフラグレジスタ２０２に書き込む。
【０１４６】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル３＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納されている値が「１」であるので、ＣＰＵ３００は、＜ラベル３＞に分岐せず、以降の命令を実行する。
ＣＰＵ３００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は保持していたアドレス値に定数値を加算した値を保持しなおす。
【０１４７】
ＣＰＵ３００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第３演算結果格納レジスタ３１５が保持していた値が汎用レジスタ１０４の１番目のレジスタに保持される。
ＣＰＵ３００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ２００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに汎用レジスタ１０４の１番目のレジスタが保持する値を書き込む。
【０１４８】
ＣＰＵ３００は、ここから割込みハンドラの命令列の実行する。
ＣＰＵ３００は、割込みハンドラの実際に処理すべき命令列の実行を終えると、まず、ＳＰ初期値をＲＡＭ１４０から読み出し、スタックポインタ格納レジスタ１０３に上書きする。
そして、ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の３番目のレジスタが保持する「０ｂ０１０１」値を２番目のレジスタに保持にする。
【０１４９】
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ３００は、汎用レジスタ１０４の２番目のレジスタが保持する「０ｂ０１０１」と即値として与えられる「０ｂ０００１」との論理積を演算する。ＣＰＵ３００は、当該論理積の演算結果の「０ｂ０００１」値を汎用レジスタ１０４の２番目のレジスタに保持する。
【０１５０】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタは、「０ｂ０００１」値を保持する。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致するため「１」値をフラグレジスタ１０３に書き込む。
【０１５１】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル４＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０３に格納されている値が「１」であるので、ラベル４に分岐しない。
ＣＰＵ３００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値から定数値を加算した値を保持しなおす。
【０１５２】
ＣＰＵ３００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
ＣＰＵ３００と拡張演算器３１０は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持していた値が、第１演算結果格納レジスタ３１３に格納される。
【０１５３】
ＣＰＵ３００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、保持していた値に「１」を加算した値を保持しなおす。
ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の３番目のレジスタが保持している「０ｂ０１０１」値を２番目のレジスタに保持する。
【０１５４】
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ００１０，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ３００は、汎用レジスタ１０４の２番目のレジスタに保持にされている「０ｂ０１０１」値と、即値で与えられる「０ｂ００１０」との論理積を演算する。当該論理積の演算結果の「０ｂ００００」値を汎用レジスタ１０４の２番目のレジスタに保持する。
【０１５５】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタに「０ｂ００１０」値を保持する。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致しないため「０」値をフラグレジスタ２０２に書き込む。
【０１５６】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル５＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納される値が「０」であるので＜ラベル５＞に分岐する。
ＣＰＵ３００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
【０１５７】
ＣＰＵ３００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の３番目のレジスタが保持している「０ｂ０１０１」値を２番目のレジスタに保持する。
ＣＰＵ３００は、「ＡＮＤ  ＃０ｂ０１００，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ３００は、汎用レジスタ１０４の２番目のレジスタに保持にする「０ｂ０１０１」値と、即値で与えられる「０ｂ０１００」との論理積を演算する。そして、ＣＰＵ３００は、当該論理積の演算結果の「０ｂ０１００」値を汎用レジスタ１０４の２番目のレジスタに保持させる。
【０１５８】
ＣＰＵ３００は、「ＭＯＶ  ＃０ｂ０１００，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果汎用レジスタ１０４の１番目のレジスタは、「０ｂ０１００」値を保持する。
ＣＰＵ３００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致するため「１」値をフラグレジスタ２０２に書き込む。
【０１５９】
ＣＰＵ３００は、「Ｂｃｃ ＜ラベル６＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ２０２に格納されている値が「１」であるので、ラベル６に分岐しない。
ＣＰＵ３００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値から定数値を加算した値を保持しなおす。
【０１６０】
ＣＰＵ３００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
ＣＰＵ３００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持する値を第３演算結果格納レジスタ３１５に格納する。
【０１６１】
ここから再び図１４に示す命令列１４１０に戻り、以降の動作の説明を行う。
ＣＰＵ３００は、ＲＡＭ１４０に退避させていた値を汎用レジスタ１０４に復帰する処理を行う。
この時ＲＡＭ１４０に退避されていた汎用レジスタ１０４の２番目の「０」値も汎用レジスタ１０４の２番目のレジスタに格納される。
【０１６２】
ＣＰＵ３００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列１４００に分岐し、後続する「ＧＥＴＡＣＸ  Ｄ２，Ｄ１」の命令をＲＯＭから読み込んで実行する。
以上に説明したように、本実施の形態３においては、情報処理装置３５０のリセット時において、拡張演算器３１０からＣＰＵ３００に演算器の情報が伝達されるので、どの種類の演算器が拡張演算器３１０に搭載されているかをＣＰＵ３００が認識できるようになる。そして取得した演算器の情報に基づいてＣＰＵ３００から、拡張演算器３１０に対してレジスタを指定するための番号を第１データ入力バス１２０に印加することができる。また、ＣＰＵ３００は、印加しなければならない番号も自身で認識できるようになる。
＜実施の形態４＞
上記実施の形態１〜３においては、全てのレジスタに対してデータの退避を促したが、必ずしも全てのレジスタからのデータの退避を実行する必要がない。割込みが発生した時点で、データ退避の必要のないレジスタからデータを退避させていると、割込みの実際の命令内容を実行できるまでの時間が無駄に長くなることがある。そこで、本実施の形態４においては、その無駄を省くことを目的とする。
【０１６３】
では、本実施の形態４において、全てのレジスタからのデータの退避が必要ない場合がどのような場合かを説明する。それは即ち、割込みハンドラの中で、拡張演算器の中で使用しない演算器があることがある。この場合、その演算器に組み込まれているレジスタにデータが格納されて上書きされ、通常処理中に行った演算のデータが消えるという事態が発生しない。
【０１６４】
よって、本実施の形態４においては、割込み発生時に、そのような割込み命令において使用しない演算器に対応するレジスタからのデータの退避は行わないことを示す。
＜構成＞
本実施の形態に係る情報処理装置４５０の機能構成を図１６に示した。図１６に示すように、情報処理装置４５０は、ＣＰＵ１００と、拡張演算器１１０と、ＲＯＭ１３０と、ＲＡＭ１４０とを含んで構成される。
【０１６５】
ＣＰＵ２００は、ＣＰＵ命令デコーダ１０１と、フラグレジスタ１０２と、スタックポインタ格納レジスタ１０３と、汎用レジスタ１０４とを含んで構成される。
拡張演算器２１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と、第２演算器１１３と、第２演算結果格納レジスタ１１５と、セレクタ１１６と、レジスタ数発生器２１１、第１演算結果格納レジスタ２１３とを含んで構成される。
【０１６６】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態２においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態１と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【０１６７】
本実施の形態４において情報処理装置４５０は、実施の形態１において示した情報処理装置１５０とは異なり、搭載演算器情報出力回路１１７に換えて、退避レベル対応搭載演算器情報出力回路４１７を備えている。
退避レベル対応搭載演算器情報出力回路４１７は、割込みレベルと退避するレジスタの本数との対応を記憶し、後述する「ＰＵＴＬＶＬ」実行時において第１データ入力バス１２０を介して取得する割込みレベルに基づいてデータを退避させるレジスタの本数を決定する機能を有する。そして、退避レベル対応搭載演算器情報出力回路４１７は、「ＧＥＴＡＣＸ」命令の実行時に、データを退避させると決定したレジスタの本数と、第１データ入力バス１２０を流れる数値とを比較し、両数値が一致したタイミングで、フラグ値「１」を出力する機能を有する。一致しなかった場合には、フラグ値「０」を出力する。
【０１６８】
本実施の形態４においては、割込みレベルには、０レベルと１レベルがあるものとする。そして、退避レベル対応搭載演算器情報出力回路４１７は、割込みレベルが０レベルの場合に、データを退避させるレジスタの本数は２本、割込みレベルが１レベルの場合に、データを退避させるレジスタの本数は１本であると決定する。
＜コマンド＞
ここから実施の形態４に係る命令について説明する。
＜拡張演算命令＞
では、本実施の形態４に係る拡張演算器命令について説明する。図１７は、ＲＯＭ１３０から、ＣＰＵ４００及び拡張演算器４１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示す図である。
＜ＰＵＴＬＶＬ  Ｄｍ，Ｄｎ命令＞
「ＰＵＴＬＶＬ  Ｄｍ，Ｄｎ」命令は、拡張演算器４１０の退避レベル対応搭載演算器情報出力回路に退避レベルに応じたデータを退避させるレジスタの本数を決定し、設定するための命令である。
【０１６９】
「ＰＵＴＬＶＬ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ４００及び拡張演算器４１０に読み出されることにより実行される。ＣＰＵ命令デコーダ１０１は、「ＰＵＴＬＶＬ  Ｄｍ，Ｄｎ」命令をデコードし、デコードした内容に基づいて、ＣＰＵ４００内部の各回路に制御信号を出力する。拡張演算器命令デコーダ１１１は、「ＰＵＴＬＶＬ  Ｄｍ，Ｄｎ」命令をデコードし、デコードした内容に基づいて拡張演算器４１０内部の各回路に制御信号を出力する。汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。退避レベル対応搭載演算器情報出力回路４１７は、第１データ入力バス１２０を介して取得した値を割込みレベルとして保持し、保持したレベル値によって、データを退避、あるいはデータを復帰すべきレジスタ本数の情報を生成する
＜ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令＞
ここで、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令」について、本実施の形態における情報処理装置４５０の動作を、各割込みレベルの場合それぞれについて説明しておく。
【０１７０】
「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ４００及び拡張演算器４１０に読み出されて実行される。
ＣＰＵ命令デコーダ１０１は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をデコードしＣＰＵ４００内部の各回路に制御信号を出力する。拡張演算器命令デコーダ１１１もまた、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令をデコードし拡張演算器４１０内部の各回路に制御信号を出力する。
【０１７１】
汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。第１データ入力バス１２０は、Ｄｍを拡張演算器４１０の第１演算器１１２に転送する。第２データ入力バス１２１はＤｎを拡張演算器４１０の第１演算器１１２に転送する。以下では次の３つの場合について説明する。
（１）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが０の時        に第１演算結果格納レジスタ１１３から値を読み出す場合
（２）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが１の時        に第１演算結果格納レジスタ１１３から値を読み出す場合
（３）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが０の時        に第２演算結果格納レジスタ１１５から値を読み出す場合
なお、前述したように、割込みレベルが１の場合には、第２格納演算結果格納レジスタ１１５からは、データは読み出されない。
（１）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが０の時に第１演算結果格納レジスタ１１３から値を読み出す場合
第１演算器１１２は、第１データ入力バス１２０を介して、Ｄｍが第１演算器１１２を表す「１」であることを読み込む。第１演算結果格納レジスタ１１３は、保持する値をセレクタ１１６に出力する。
【０１７２】
セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第１演算結果格納レジスタ１１３から出力されたデータを選択してデータ出力バス１２２に出力する。
退避レベル対応搭載演算器情報出力回路４１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から入力した値と退避/復帰すべきレジスタ本数値とを比較し、比較の結果入力された値の方が小さいのでフラグ値「０」を出力する。
【０１７３】
論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路４１７の出力の論理和演算を行い、この場合退避レベル対応搭載演算器情報出力回路４１７のフラグ値０を出力する。
セレクタ１１６から出力された第１演算結果格納レジスタ１１３の出力値を、データ出力バス１２２を介して、ＣＰＵ４００の汎用レジスタ１０４に転送する。汎用レジスタ１０４は、データ出力バス１２２の値を取得してｎ番目のレジスタに保持する。フラグレジスタ１０２は、拡張演算器４１０の退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「０」を演算結果フラグに格納する。
（２）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが１の時に第１演算結果格納レジスタ１１３から値を読み出す場合
第１演算器１１２は、第１データ入力バス１２０を介して、第１演算器１１２を表す「１」を読み込む。第１演算結果格納レジスタ１１３は、保持する値をセレクタ１１６に出力する。
【０１７４】
セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって、第１演算結果格納レジスタ１１３から出力されたデータを選択してデータ出力バス１２２に出力する。
退避レベル対応搭載演算器情報出力回路４１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から取得した値と退避/復帰すべきレジスタ本数値とを比較する。当該比較の結果、取得した値の方が大きいのでフラグ値「１」を出力する。
【０１７５】
論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路４１７の出力の論理和演算を行い、この場合、退避レベル対応搭載演算器情報出力回路４１７のフラグ値「１」を出力する。
セレクタ１１６から出力された第１演算結果格納レジスタ１１３の出力値はデータ出力バス１２２を介してＣＰＵ４００の汎用レジスタ１０４に転送される。
【０１７６】
汎用レジスタ１０４は、データ出力バス１２２の値を取得してｎ番目のレジスタに保持する。フラグレジスタ１０２は、拡張演算器４１０の退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「１」を演算結果フラグに格納する。
（３）退避レベル対応搭載演算器情報出力回路４１７が保持する割込みレベルが０の時に第２演算結果格納レジスタ１１５から値を読み出す場合
第２演算器１１４は、第１データ入力バス１２０から第２演算器１１４を表す「２」を読み込む。第２演算結果格納レジスタ１１５は、保持する値をセレクタ１１６に出力する。
【０１７７】
セレクタ１１６は、拡張演算器命令デコーダ１１１から出力される制御信号によって第２演算結果格納レジスタ１１５から出力されたデータを選択してデータ出力バス１２２に出力する。
退避レベル対応搭載演算器情報出力回路４１７は、拡張演算器命令デコーダ１１１から供給される制御信号によって第１データ入力バス１２０から取得した値と退避/復帰すべきレジスタ本数値とを比較し、比較の結果取得した値のほうが大きいのでフラグ値「１」を出力する。
【０１７８】
論理和回路１１８は、第１演算器１１２の演算結果フラグ、第２演算器１１４の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路４１７の出力の論理和演算を行い、この場合、退避レベル対応搭載演算器情報出力回路４１７のフラグ値「１」を出力する。
セレクタ１１６から出力された第２演算結果格納レジスタ１１５の出力値は、データ出力バス１２２を介してＣＰＵ４００の汎用レジスタ１０４に転送される。
【０１７９】
汎用レジスタ１０４は、データ出力バス１２２の値を取得してｎ番目のレジスタに保持する。フラグレジスタ１０２は拡張演算器４１０から出力される退避レベル対応搭載演算器情報出力回路４１７のフラグ値１を演算結果フラグに格納する。
以上が、本実施の形態における「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令の説明である。
＜動作＞
本実施の形態４における情報処理装置４５０の動作を命令列の具体例を用いて説明する。まず、図１８を用いて、割込みレベルが、「０」の場合を説明し、その後に、図１９を用いて、割込みレベルが、「１」の場合を説明する。
【０１８０】
図１８は、図２、図３、図１３、図１７で示した命令を用いたレベル０割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。なお、図中において矢印１８０１は割込みが発生したタイミングを示している。
ＣＰＵ４００は、ＲＯＭ１３０に格納された通常処理の命令列１８００を処理する。
【０１８１】
ＣＰＵ４００は、通常処理の命令列１８００中の「ＣＬＲ  Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の２番目のレジスタに「０」値を保持する。
ＣＰＵ４００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３に積の上位ビット側結果が保持され、汎用レジスタ１０４の１番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ１０２に演算結果フラグが保持される。
【０１８２】
ＣＰＵ４００は、上記「ＭＵＬＱ  Ｄ０，Ｄ１」の命令実行後割込みを受付けて、割込みハンドラの命令列１８１０のハンドラ先頭に分岐する。
ＣＰＵ４００は、汎用レジスタ１０４に格納されている値をＲＡＭ１４０に退避する処理を行う。この時、汎用レジスタ１０４の２番目に格納されている０値もＲＡＭ１４０に退避する。
【０１８３】
ＣＰＵ４００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値が保持される。また、ＣＰＵ４００は、このときスタックポインタ格納レジスタに格納されていたアドレス値をＳＰ初期値としてＲＡＭ１４０に記憶する。
ＣＰＵ４００は、「ＭＯＶ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込み、ＣＰＵ２００は、汎用レジスタ１０４の０番目のレジスタが保持する「０」値を1番目のレジスタに保持させる。
【０１８４】
ＣＰＵ４００は、「ＰＵＴＬＶＬ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、退避レベル対応搭載演算器情報出力回路４１７は割込みレベルとして「０」値を保持し、保持したレベル値０によって退避/復帰すべきレジスタ本数を２本とする。
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３に保持するアドレス値に定数値を加算した値を保持する。
【０１８５】
ＣＰＵ４００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持していた値が、汎用レジスタ１０４の１番目のレジスタに保持される。また、退避レベル対応搭載演算器情報出力回路４１７が出力したフラグ値「０」がフラグレジスタ１０２に格納される。
ＣＰＵ４００は、「ＭＯＶ  Ｄ１，ＳＰ」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ４００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに汎用レジスタ１０４の１番目のレジスタが保持している値を書き込む。
【０１８６】
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４は、０番目のレジスタに保持されている値に1を加算した値を保持しなおす。
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ４００は、フラグレジスタ１０２に格納されている値が「０」であるので＜ラベル１＞に分岐する。
【０１８７】
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
ＣＰＵ４００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ４００は、第２演算結果格納レジスタ１１５が保持する値を汎用レジスタ１０４の１番目のレジスタに保持し、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「１」をフラグレジスタ１０２に格納する。
【０１８８】
ＣＰＵ４００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに汎用レジスタ１０４の１番目のレジスタが保持する値を書き込む。
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４は、汎用レジスタ１０４の０番目のレジスタが保持している値に1を加算した値を保持しなおす。
【０１８９】
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「１」であるので＜ラベル１＞に分岐しない。ＣＰＵ４００は、以降、割込みハンドラの命令列の命令を実行する。
ＣＰＵ４００は、割込みハンドラの命令列の実行を完了した後に、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値が保持される。また、ＣＰＵ４００は、ＳＰ初期値をＲＡＭ１４０から読み出してスタックポインタ格納レジスタ１０３に上書きする。
【０１９０】
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３に保持するアドレス値に定数値を加算した値を保持する。
ＣＰＵ４００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ４００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
【０１９１】
ＣＰＵ４００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持していた値が第１演算結果格納レジスタ１１３に格納され、退避レベル対応搭載演算器情報出力回路４１７が出力したフラグ値「０」がフラグレジスタ１０２に格納される。
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、汎用レジスタ１０４の０番目のレジスタが保持していたアドレス値に１を加算した値を保持しなおす。
【０１９２】
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「０」であるので＜ラベル２＞に分岐する。
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
【０１９３】
ＣＰＵ４００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに格納される値を汎用レジスタ１０４の１番目のレジスタに読み出す。
ＣＰＵ４００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持する値が第２演算結果格納レジスタ１１５に格納され、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「１」がフラグレジスタ１０２に格納される。
【０１９４】
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、保持していた値に「１」を加算した値を保持しなおす。
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「１」であるので、＜ラベル２＞に分岐しない。
【０１９５】
ＣＰＵ４００は、ＲＡＭ１４０に退避した値を汎用レジスタ１０４に復帰する処理を行う。この時、ＲＡＭ１４０に退避されていた汎用レジスタ１０４の２番目の「０」値も汎用レジスタ１０４の２番目のレジスタに格納される。
ＣＰＵ４００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列１８００に分岐する。
【０１９６】
ＣＰＵ４００は、「ＧＥＴＡＣＸ  Ｄ２，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持している値が汎用レジスタ１０４の２番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「０」がフラグレジスタ１０２に格納される。
次に、レベル１割込み発生時の情報処理装置４５０の動作について説明する。
【０１９７】
図１９は、図２、図３、図１３、図１７及び上記で説明した命令を用いたレベル１割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
ＣＰＵ４００は、ＲＯＭ１３０に格納された通常処理の命令列１９００を処理する。
ＣＰＵ４００は、通常処理の命令列１９００中の「ＣＬＲ  Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の２番目のレジスタは、「０」値を保持する。
【０１９８】
ＣＰＵ４００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３に積の上位ビット側結果が保持され、汎用レジスタ１０４の１番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ１０２に演算結果フラグが保持される。
ＣＰＵ４００は、上記「ＭＵＬＱ  Ｄ０，Ｄ１」の命令実行後割込みを受付けて、割込みハンドラの命令列１９１０のハンドラ先頭に分岐する。
【０１９９】
ＣＰＵ４００は、割込みハンドラの命令列中の汎用レジスタ１０４の格納値をＲＡＭ１４０に退避する処理を行う。この時汎用レジスタ１０４の２番目に格納されている「０」値もＲＡＭ１４０に退避される。
ＣＰＵ４００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、「０」値を保持する。また、ＣＰＵ４００は、その時にスタックポインタ格納レジスタ１０３に格納されているアドレス値をＳＰ初期値としてＲＡＭ１４０に記憶する。
【０２００】
ＣＰＵ４００は、「ＭＯＶ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の０番目のレジスタが保持する「０」値を１番目のレジスタに保持にする。
ＣＰＵ４００は、「ＡＤＤ  ＃１，Ｄ１」の命令をＲＯＭ１３０から読み込み、汎用レジスタ１０４の１番目のレジスタが保持する値に１を加え、「１」値を保持する。
ＣＰＵ４００は、「ＰＵＴＬＶＬ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、退避レベル対応搭載演算器情報出力回路４１７は割込みレベルとして「１」値を保持し、保持したレベル値１によって退避/復帰すべきレジスタ本数を１本とする。
【０２０１】
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
ＣＰＵ４００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持する値が汎用レジスタ１０４の１番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「１」がフラグレジスタ１０２に格納される。
【０２０２】
ＣＰＵ４００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに汎用レジスタ１０４の１番目のレジスタに保持する値を書き込む。
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、保持していた値に１を加算した値を保持しなおす。
【０２０３】
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「１」であるので＜ラベル１＞に分岐しない。
そして、ＣＰＵ４００は、以降割込みハンドラの命令列の命令を実行する。
ＣＰＵ４００は、割込みハンドラの命令列の実行を完了し、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値を保持する。また、ＣＰＵ４００は、ＳＰ初期値をＲＡＭ１４０から読み出し、スタックポインタ格納レジスタ１０３に上書きする。
【０２０４】
ＣＰＵ４００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持しなおす。
ＣＰＵ４００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレス値で指定されるアドレスに格納されている値を汎用レジスタ１０４の１番目のレジスタに読み出す。
【０２０５】
ＣＰＵ４００と拡張演算器４１０は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の１番目のレジスタが保持する値が第１演算結果格納レジスタ１１３に格納され、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「１」がフラグレジスタ１０２に格納される。
ＣＰＵ４００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタは、保持していた値に１を加算した値を保持しなおす。
【０２０６】
ＣＰＵ４００は、「Ｂｃｃ ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ１０２に格納されている値が「１」であるので、ＣＰＵ４００は、＜ラベル２＞に分岐しない。
ＣＰＵ４００は、ＲＡＭ１４０に退避させた値を汎用レジスタ１０４に復帰する処理を行う。この時、ＲＡＭ１４０に退避されていた汎用レジスタ１０４の２番目の「０」値も汎用レジスタ１０４の２番目のレジスタに格納する。
【０２０７】
ＣＰＵ４００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列１９００に分岐する。
ＣＰＵ４００は、「ＧＥＴＡＣＸ  Ｄ２，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持している値が汎用レジスタ１０４の２番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路４１７から出力されたフラグ値「０」がフラグレジスタ１０２に格納される。そして、情報処理装置４５０は、以降の処理を実行する。
【０２０８】
以上に説明してきたように、本実施の形態４においては、割込みのレベルに応じて、そのレベルにおいて使用する演算器が予め定まっているので、割込みのレベルに応じてデータを退避させるレジスタを特定することを特徴としている。これによって、無駄にレジスタからのデータの退避が行われなくなるので、割込みに移行する際の退避処理に要する時間や、割込みを終了して通常処理に戻る際の復帰処理に要する時間を短縮し得る。
＜実施の形態５＞
上記実施の形態において、タスク中で拡張演算命令を実行しない場合であっても、タスク切替によってレジスタ資源の退避/復帰を行うオーバーヘッドが生じてしまう。本実施の形態５においては、当該オーバーヘッドを減じることを示す。
＜構成＞
実施の形態５に係る情報処理装置５５０の機能構成を、図２０のブロック図に示した。
【０２０９】
本図２０を見れば分かるように、情報処理装置５５０は、ＲＯＭ１３０、ＲＡＭ１４０、ＣＰＵ５００、拡張演算器５１０を含んで構成される。
ＣＰＵ５００は、ＣＰＵ命令デコーダ１０１と、スタックポインタ格納レジスタ１０３と、汎用レジスタ１０４とを含んで構成される。
拡張演算器５１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と第１演算結果格納レジスタ１１３と、第２演算器１１４と、第２演算結果格納レジスタ１１５と、セレクタ１１６と、実行タスク管理回路５１７と、拡張演算実行フラグレジスタ５１８とを含んで構成される。
【０２１０】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態２においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態１と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【０２１１】
実行タスク管理回路５１７は、拡張演算実行フラグレジスタ５１８を含んで構成される。実行タスク管理回路５１７は、拡張演算器５１０が実行しているタスクを管理する機能を有し、拡張演算実行フラグレジスタ５１８に拡張演算が実行されているか否かを示す数値を格納する機能を有する。また、ＣＰＵ命令コーダ５０１に対して、割込みを要求するための割込み要求信号を出力する機能を有する。また、本実施の形態５においては、実行タスク管理回路５１７は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令以外の拡張演算命令が実行された場合に、拡張演算実行フラグレジスタ５１８に「１」値を格納する機能を有する。
【０２１２】
拡張演算実行フラグレジスタ５１８は、実行タスク管理回路５１７によりセット及びクリアされる拡張演算器の実行状況を保持する。
＜コマンド＞
図２１は、ＲＯＭ１３０から、ＣＰＵ５００及び拡張演算器５１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示す図である。
＜ＰＵＴＴＳＫ  Ｄｍ，Ｄｎ命令＞
「ＰＵＴＴＳＫ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ５００及び拡張演算器５１０に読み出され、実行される。ＣＰＵ命令デコーダ５０１は、「ＰＵＴＴＳＫ  Ｄｍ，Ｄｎ」命令をデコードしＣＰＵ５００内部の各回路に制御信号を出力する。拡張演算器命令デコーダ１１０もまた、「ＰＵＴＴＳＫ  Ｄｍ，Ｄｎ」命令をデコードし拡張演算器５１０内部の各回路に制御信号を出力する。
【０２１３】
汎用レジスタ１０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。第１データ入力バス１２０は、Ｄｍを拡張演算器５１０の実行タスク管理回路５１７に転送する。実行タスク管理回路５１７は第１データ入力バス１２０から取得した値をタスク番号として保持し、拡張演算器実行フラグ５１８が保持する値をクリアする。
＜動作＞
ここから命令列の具体例を用いて本実施の形態５における情報処理装置５５０の動作を説明する。
【０２１４】
図２２は、図２、図３、図１０、図１４、図１８及び上記で説明した命令を用いたタスク切替発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
ＣＰＵ５００は、ＲＯＭ１３０に格納されたタスク０の命令列２２００を処理する。
ＣＰＵ５００は、タスク０の命令列２２００中の「ＣＬＲ  Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の２番目のレジスタは、「０」値を保持する。
【０２１５】
ＣＰＵ５００は、「ＰＵＴＴＳＫ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、実行タスク管理回路５１７は、タスク番号「０」を保持し、拡張演算実行フラグレジスタ５１８に「０」値が書き込まれる。
ＣＰＵ５００は、矢印２２０１で示されるタイミングで、タスク切替を受付け、タスク１の命令列２２１０に分岐する。
【０２１６】
ＣＰＵ５００は、タスク１の命令列２２１０中の「ＭＯＶ  ＃１，Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「１」値を保持する。
ＣＰＵ５００は、「ＰＵＴＴＳＫ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、実行タスク管理回路５１７は、タスク番号1を保持し、拡張演算実行フラグレジスタ５１８に「０」値が書き込まれる。この時、拡張演算実行フラグレジスタ５１８が保持する値が「０」であるので割込みは発生しない。ここからタスク１の命令列２２１０の本来実行する命令内容を実行する。
【０２１７】
ＣＰＵ５００は、タスク１の命令列２２１０中の実際に実行すべき命令の実行を完了する。
ＣＰＵ５００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「０」値が保持される。
ＣＰＵ５００は、「ＰＵＴＴＳＫ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、実行タスク管理回路５１７がタスク番号０を保持し、拡張演算実行フラグレジスタ５１８に「０」値が書き込まれる。この時、拡張演算実行フラグレジスタ５１８が保持する値は、「０」であるので割込みは発生しない。
【０２１８】
ＣＰＵ５００は、タスク０の命令列２２００の続きの命令を実行する。
ＣＰＵ５００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３には、積の上位ビット側結果が保持され、汎用レジスタ１０４の１番目のレジスタには、積の下位ビット側結果が保持され、拡張演算実行フラグレジスタ５１８には「１」値がセットされる。
【０２１９】
ＣＰＵ５００は、矢印２２０２で示されるタイミングでタスク切替を受付け、タスク１の命令列２２２０に分岐する。
ＣＰＵ５００は、タスク１の命令列２２２０中の「ＭＯＶ  ＃１，Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ１０４の０番目のレジスタに「１」値が保持される。
【０２２０】
ＣＰＵ５００は、「ＰＵＴＴＳＫ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、実行タスク管理回路５１７がタスク番号１を保持し、拡張演算実行フラグレジスタ５１８に「０」値が書き込まれる。この時、拡張演算実行フラグレジスタ５１８が保持する値が「１」であるので、矢印２２２１で示されるタイミングで、割込みが発生する。
【０２２１】
ＣＰＵ５００は、割込みハンドラの命令列２２３０に分岐する。
ＣＰＵ５００は、割込みハンドラの命令列を実行しタスク０の拡張演算器レジスタ資源に格納された値をＲＡＭ１４０に退避する。なお退避の具体的な処理は前記第一乃至第四の実施の形態の動作と同じである。
ＣＰＵ５００は、タスク１の拡張演算器レジスタ資源に格納された値をＲＡＭ１４０から復帰する。ＣＰＵ５００は「ＲＴＩ」命令を実行して割込みハンドラ処理を終了しタスク１の命令列２２００に復帰する。
【０２２２】
ＣＰＵ５００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３に積の上位ビット側結果を保持し、汎用レジスタ１０４の１番目のレジスタに積の下位ビット側結果を保持し、拡張演算実行フラグレジスタ５１８に「１」値がセットされる。
ＣＰＵ５００は、タスク１の命令列２２２０中の実際に処理すべき命令の実行を完了する。
【０２２３】
ＣＰＵ５００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果汎用レジスタ１０４の０番目のレジスタに０値を保持する。
ＣＰＵ５００は、「ＰＵＴＴＳＫ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、実行タスク管理回路５１７がタスク番号０を保持し、拡張演算実行フラグレジスタ５１８に「０」値が書き込まれる。この時拡張演算実行フラグレジスタ５１８が保持する値が「１」であるので、矢印２２２２で示されるタイミングで、割込みが発生する。
【０２２４】
ＣＰＵ５００は、割込みハンドラの命令列２２４０に分岐する。
ＣＰＵ５００は、割込みハンドラの命令列２２４０を実行しタスク１の拡張演算器レジスタ資源に格納された値をＲＡＭ１４０に退避する。なお退避の具体的な処理は上述した実施の形態１〜４における動作と同じである。
ＣＰＵ５００は、タスク０の拡張演算器レジスタ資源に格納された値をＲＡＭ１４０から復帰する。
【０２２５】
ＣＰＵ５００は、「ＲＴＩ」命令を実行して割込みハンドラ処理を終了しタスク１の命令列に復帰する。
ＣＰＵ５００は、タスク０の命令列２２００の後続の命令を実行する。
以上に説明してきたように、情報処理装置５５０においては、複数のタスクを切り替えて実行することがある場合において、タスクの切り替えに応じて、拡張演算を実行した否かに基づき、データの退避が必要な場合に拡張演算器側からＣＰＵに対して割込みを要求できるようになり、タスク中において拡張演算を実行していない場合には割込みを発生させないようにすることができる。
＜実施の形態６＞
上記実施の形態１においては、割込みが発生した場合には、必ず、拡張演算器１１０に備えられたレジスタからデータの退避を実行していた。しかし、拡張演算器１１０において拡張演算が実行されていなかった場合などには、この処理は無駄な処理となり、割込みハンドラへの実際の命令の処理の開始が遅れることになり、オーバーヘッドが発生する。本実施の形態６においては、このオーバーヘッドを除去することを示す。
＜構成＞
実施の形態６における情報処理装置６５０の構成を図２３に示した。図２３は、情報処理装置６５０の機能構成を示したブロック図である。
【０２２６】
図２３に示すように情報処理装置６５０は、ＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ６００と、拡張演算器６１０とを含んで構成される。
ＣＰＵ６００は、ＣＰＵ命令デコーダ１０１と、フラグレジスタ６０２と、スタックポインタ格納レジスタ１０３と、汎用レジスタ６０４とを含んで構成される。
拡張演算器６１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と、第１演算結果格納レジスタ１１３と、レジスタアクセス管理回路６１７とを含んで構成される。
【０２２７】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態６においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態１と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【０２２８】
レジスタアクセス管理回路６１７は、第１演算器１１２が演算を実行したか否かに基づいて、第１演算結果格納レジスタ１１３にデータが格納されているか否かの情報を管理する機能を有する。具体的には、レジスタアクセス管理回路６１７は、第１演算器１１２が演算を実行するための命令を拡張演算器命令デコーダ１１１が解読した場合に、演算を実行していることを示す情報を保持する。また、レジスタアクセス管理回路６１７は、拡張演算器命令デコーダ１１１が「ＧＥＴＡＣＸ命令」を解読した場合に、保持していた演算を実行していることを示す情報を実行していないことを示す情報に書き換えて保持する。なお、第１演算器１１２が演算を実行している場合には「１」を、命令を実行していない場合には「０」を保持する。
＜コマンド＞
ここから、本実施の形態６において用いられる命令について説明する。
＜拡張演算命令＞
図２４は、ＲＯＭ１３０からＣＰＵ６００及び拡張演算器６１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示す図である。
＜ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令＞
「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ６００及び拡張演算器６１０に読み出されることにより実行される。基本的には、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令」が実行されると、実施の形態１と同様に、データの取得が行われるので、その部分についての説明は省略し、ここでは異なる部分、即ち、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令」実行時のレジスタアクセス管理回路の動作を説明する。
【０２２９】
レジスタアクセス管理回路６１７は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令」に基づいて、拡張演算器命令デコーダ１１１から供給される制御信号によって保持するレジスタアクセス情報を、「０」値にクリアする。そして、レジスタアクセス管理回路６１７は、保持するレジスタアクセス情報（ここでは、「０」値）をＣＰＵ６００に出力する。
そして、フラグレジスタ６０２は、拡張演算器６１０から出力されたレジスタアクセス情報を演算結果フラグに格納する。
＜ＣＰＵ実行命令＞
図２５は、ＣＰＵ６００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられる命令のニーモニック、ＣＰＵの動作の一例を示す図である。以下に「ＭＯＶ フラグ,Ｄｎ命令」及び「ＭＯＶ Ｄｍ,フラグ命令」を実行する際の動作について説明する。
＜ＭＯＶ フラグ,Ｄｎ命令＞
「ＭＯＶ フラグ,Ｄｎ命令」は、ＲＯＭ１３０からＣＰＵ６００に読み出されることにより実行される。「ＭＯＶ フラグ,Ｄｎ命令」は、フラグレジスタ６０２に格納されているフラグ値を汎用レジスタ６０４に取り込むための命令である。
【０２３０】
ＣＰＵ命令デコーダ１０１は、「ＭＯＶ フラグ,Ｄｎ命令」をデコードし、ＣＰＵ６００内部の各回路に制御信号を出力する。フラグレジスタ６０２は保持するフラグ値を汎用レジスタ６０４に出力する。汎用レジスタ６０４はフラグレジスタ６０２が出力するフラグ値をｎ番目のレジスタに保持する。
＜ＭＯＶ Ｄｍ,フラグ命令＞
「ＭＯＶ Ｄｍ,フラグ命令」は、ＲＯＭ１３０からＣＰＵ６００に読み出されることにより実行される。「ＭＯＶ Ｄｍ,フラグ命令」は、ＣＰＵ６００がフラグレジスタ６０２の値を書き換えるための命令である。
【０２３１】
ＣＰＵ命令デコーダ１０１は、「ＭＯＶ Ｄｍ,フラグ命令」をデコードし、ＣＰＵ６００内部の各回路に制御信号を出力する。汎用レジスタ６０４はｍ番目のレジスタに保持する値をフラグレジスタ６０２に出力する。フラグレジスタ６０２は、汎用レジスタ６０４の出力値をフラグ値として保持する。
＜動作＞
図２６は、図２、図３、図８、図１２、図１３、図１７、図２１、図２４、図２５を用いて上記で説明した命令を用いた割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。なお、図中において矢印２６０１、２６０２は、割込みが発生したタイミングを示している。
【０２３２】
ＣＰＵ６００は、ＲＯＭ１３０に格納された通常処理の命令列２６００を処理する。
ＣＰＵ６００は、割込みを受付けて、矢印２６０１で示されるタイミングで、割込みハンドラの命令列２６１０のハンドラ先頭に分岐する。この間、拡張演算器命令は実行していないものとする。
ＣＰＵ６００は、割込みハンドラの命令列中の汎用レジスタ６０４の格納値をＲＡＭ１４０に退避する処理を行う。
【０２３３】
ＣＰＵ６００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタに「０」値を保持する。
ＣＰＵ６００は、その時点でスタックポインタ格納レジスタ１０３に格納されているアドレス値をＳＰ初期値としてＲＡＭ１４０に記憶する。
ＣＰＵ６００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ６０３に保持するアドレス値に定数値を加算した値を保持する。
【０２３４】
ＣＰＵ６００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持する値を汎用レジスタ６０４の１番目のレジスタに保持し、レジスタアクセス管理回路６１７が保持するレジスタアクセス情報０値をフラグレジスタ６０２に保持する。
ＣＰＵ６００は、「Ｂｃｃ  ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ６００は、フラグレジスタ６０２に格納される値が「０」であるので＜ラベル１＞に分岐する。
【０２３５】
ＣＰＵ６００は、「ＭＯＶ  フラグ，Ｄ３」命令をＲＯＭ１３０から読み込み、フラグレジスタ６０２が保持する「０」値を汎用レジスタ６０４の３番目のレジスタに保持する。
ＣＰＵ６００は、割込みハンドラの命令列の実行を完了し、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタに「０」値を保持する。
【０２３６】
ＣＰＵ６００は、ＳＰ初期値をＲＡＭ１４０から読み出してスタックポインタ格納レジスタ１０３に上書きする。
ＣＰＵ６００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持しているアドレス値に定数値を加算した値を保持しなおす。
【０２３７】
ＣＰＵ６００は、「ＭＯＶ  Ｄ３,フラグ」命令をＲＯＭ１３０から読み込み、汎用レジスタ６０４の３番目のレジスタに保持する「０」値をフラグレジスタ６０２に書き込む。
ＣＰＵ６００は、「Ｂｃｃ  ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ６００は、フラグレジスタ６０２に格納される値が「０」であるので＜ラベル２＞に分岐する。
【０２３８】
ＣＰＵ６００は、ＲＡＭ１４０に退避した値を汎用レジスタ６０４に復帰する処理を行う。
ＣＰＵ６００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列２６００に分岐する。
ＣＰＵ６００は、ＲＯＭ１３０に格納された通常処理の命令列を処理する。
【０２３９】
ＣＰＵ６００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３に積の上位ビット側結果が保持され、汎用レジスタ６０４の１番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ６０２に演算結果フラグが保持され、レジスタアクセス情報に「１」値がセットされる。
【０２４０】
ＣＰＵ６００は、上記「ＭＵＬＱ  Ｄ０，Ｄ１」の命令実行後割込みを受付けて、割込みハンドラの命令列２６１１の先頭に分岐する。
ＣＰＵ６００は、割込みハンドラの命令列２６１１中の汎用レジスタ６０４の格納値をＲＡＭ１４０に退避する処理を行う。
ＣＰＵ６００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタは、「０」値を保持する。
【０２４１】
ＣＰＵ６００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ６０３に保持するアドレス値に定数値を加算した値を保持する。
ＣＰＵ６００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持する値を汎用レジスタ６０４の１番目のレジスタに保持し、レジスタアクセス管理回路６１７が保持するレジスタアクセス情報「１」値をフラグレジスタ６０２に保持する。
【０２４２】
ＣＰＵ６００は、「Ｂｃｃ  ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ６０２に格納される値が１であるので分岐しない。
ＣＰＵ６００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ６００は、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに汎用レジスタ６０４の１番目のレジスタが保持している値を書き込む。
【０２４３】
ＣＰＵ６００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
ＣＰＵ６００は、「ＭＯＶ  フラグ，Ｄ３」命令をＲＯＭ１３０から読み込み、フラグレジスタ６０２が保持している「１」値を汎用レジスタ６０４の３番目のレジスタに保持する。
【０２４４】
ＣＰＵ６００は、割込みハンドラの実処理の命令列の実行を完了し、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタに「０」値を保持する。また、ＣＰＵ６００は、ＳＰ初期値をＲＡＭ１４０から読み出しスタックポインタ格納レジスタ１０３に上書きする。
ＣＰＵ６００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は保持していたアドレス値に定数値を加算した値を保持しなおす。
【０２４５】
ＣＰＵ６００は、「ＭＯＶ  Ｄ３,フラグ」命令をＲＯＭ１３０から読み込み、汎用レジスタ６０４の３番目のレジスタに保持する1値をフラグレジスタ６０２に書き込む。
ＣＰＵ６００は、「Ｂｃｃ  ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ６０２に格納される値が1であるので分岐しない。
ＣＰＵ６００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに格納される値を汎用レジスタ６０４の１番目のレジスタに読み出す。
【０２４６】
ＣＰＵ６００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の１番目のレジスタが保持する値を第１演算結果格納レジスタ１１３に格納する。
ＣＰＵ６００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ６０４の０番目のレジスタに保持するアドレス値に1を加算した値を保持する。
【０２４７】
ＣＰＵ６００は、ＲＡＭ１４０に退避した値を汎用レジスタ６０４に復帰する処理を行う。
ＣＰＵ６００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列２６００に分岐し、「ＧＥＴＡＣＸ  Ｄ２，Ｄ１」の命令を実行する。
【０２４８】
以上に説明してきたように、本実施の形態６に置ける情報処理装置６５０は、拡張演算器が実際に拡張演算を実行しているか否かに応じて、データの退避を実行するかどうかを決定する。拡張演算器において拡張演算を行っていない場合や、行ったとしてもレジスタからのデータを取得した後などにおいては、割込みが発生した時にデータを退避させる必要がない。このような場合に、情報処理装置は、データを退避させる処理を省略することができる。
＜実施の形態７＞
上記実施の形態６において、拡張演算器において演算が実行されているか否かに応じて、レジスタからのデータの退避を実行するか否かを決定することを示した。本実施の形態７においては、実施の形態６に示した情報処理装置を発展させ、複数の演算器が搭載されている場合について、各レジスタごとにデータの退避の実行をするか否かを判断する場合について説明する。
＜構成＞
図２７は、本実施の形態７における情報処理装置７５０の機能構成を示したブロック図である。
【０２４９】
図２７に示すように、情報処理装置７５０は、ＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ７００と、拡張演算器７１０とを含んで構成される。
ＣＰＵ７００は、ＣＰＵ命令デコーダ１０１と、フラグレジスタ７０２と、スタックポインタ格納レジスタ１０３と、汎用レジスタ７０４とを含んで構成される。
拡張演算器７１０は、拡張演算器命令デコーダ１１１と、第１演算器１１２と、第１演算結果格納レジスタ１１３と、第２演算器１１４と、第２演算結果格納レジスタ１１５と、セレクタ７１６と、レジスタアクセス状況管理回路７１７とを含んで構成される。
【０２５０】
なお、上記実施の形態１においては、第１演算器１１２や、第２演算器１１３における演算結果フラグを論理和回路１１８を介して出力する構成を有していたが、本実施の形態７においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態１と同名かつ同じ符号を付した機能部については、実施の形態１と同様の機能を果たすものとしてここでは説明を省略する。
【０２５１】
レジスタアクセス状況管理回路７１７は、拡張演算器７１０に備えられている各演算器において演算が実行され、それぞれに対応するレジスタに演算に係るデータが格納されているか否かの情報を管理する機能を有する。レジスタアクセス状況管理回路７１７は、拡張演算器命令デコーダ１１１からの制御信号に基づいて、どの演算器において演算が実行されたかを認識し、その演算器に対応するビット値を「１」にする。また、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令」が実行されると、そのレジスタに対応する演算器のビット値を「０」にする。また、「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ命令」実行時には、保持する実行情報をセレクタ１１６に出力する機能も有する。また、「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ命令」実行時には、Ｄｎを実行情報として保持する機能を有する。
＜コマンド＞
ここから、本実施の形態７に係る各種命令について説明する。
＜拡張演算命令＞
図２８は、ＲＯＭ１３０からＣＰＵ７００及び拡張演算器７１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示す図である。以下「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令、「ＤＩＶＱ  Ｄｍ，Ｄｎ」、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令、「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ」及び「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ」の命令を実行する際の動作について説明する。なお、「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令、「ＤＩＶＱ  Ｄｍ，Ｄｎ」、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令については実施の形態１において説明した各命令と略同一であり、異なる部分、即ち、レジスタアクセス状況管理回路７１７の、各命令実行時の、動作についてのみ説明する。
＜ＭＵＬＱ  Ｄｍ，Ｄｎ命令＞
拡張演算器７１０の各回路は、実施の形態１に示したように、「ＭＵＬＱ  Ｄｍ，Ｄｎ」命令に基づいて、乗算を実行する。このとき、レジスタアクセス状況管理回路７１７は、第１演算器１１２が実行したことを検知し実行情報のビット０に１をセットする。なおビット０に１をセットするとは、例えば、「０ｂ００００」を「０ｂ０００１」にすることであり、あるいは「０ｂ１０１０」を「０ｂ１０１１」にすることである。
＜ＤＩＶＱ  Ｄｍ，Ｄｎ命令＞
拡張演算器７１０の各回路は、実施の形態１に示したように、「ＤＩＶＱ  Ｄｍ，Ｄｎ」命令に基づいて、除算を実行する。このとき、レジスタアクセス状況管理回路７１７は、第２演算器１１４が実行したことを検知し実行情報のビット1に１をセットする。なお、ビット１に１をセットするとは、例えば、「０ｂ００００」を「０ｂ００１０」にすることであり、あるいは「０ｂ１００１」を「０ｂ１０１１」にすることである。
＜ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ命令＞
情報処理装置７００は、「ＧＥＴＡＣＸ  Ｄｍ，Ｄｎ」命令に基づいて、拡張演算器７１０のレジスタに格納されているデータの退避を実行する。以下では次の２つの場合についてのレジスタアクセス状況管理回路の動作を説明する。
【０２５２】
（１）第１演算結果格納レジスタ１１３から値を読み出す場合
（２）第２演算結果格納レジスタ１１５から値を読み出す場合
（１）第１演算結果格納レジスタ１１３から値を読み出す場合
レジスタアクセス状況管理回路７１７は第１演算結果格納レジスタ１１３は保持する値が読み出されたことを検知し実行情報のビット０を「０」にクリアする。
（２）第２演算結果格納レジスタ１１５に値を書込む場合
レジスタアクセス状況管理回路７１７は第２演算結果格納レジスタ１１５は保持する値が読み出されたことを検知し実行情報のビット1を「０」にクリアする。
＜ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ命令＞
「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ」命令は、ＣＰＵ７００が、各レジスタにデータが格納されているかどうかの情報を得るための命令である。
【０２５３】
「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ７００及び拡張演算器７１０に読み出されることにより、ＣＰＵ命令デコーダ１０１は「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ」命令をデコードし、ＣＰＵ７００内部の各回路に制御信号を出力する。また、拡張演算器命令デコーダ１１１は、「ＧＥＴＳＴＴ  Ｄｍ，Ｄｎ」命令をデコードし、拡張演算器７１０内部の各回路に制御信号を出力する。
【０２５４】
レジスタアクセス状況管理回路７１７は、保持している実行情報をセレクタ７１６に出力する。セレクタ７１６は、拡張演算器命令デコーダ１１１から出力される制御信号によってレジスタアクセス状況管理回路７１７からの出力を選択してデータ出力バス１２２に出力する。
データ出力バス１２２は、実行情報をＣＰＵ７００の汎用レジスタ７０４に転送する。汎用レジスタ７０４は、データ出力バス１２２の値を取得してｎ番目のレジスタに保持する。
＜ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ命令＞
「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ」命令は、割込み発生時において退避させたレジスタアクセス状況管理回路７１７が保持していた各レジスタのアクセス状況の情報を復帰させるための命令である。
【０２５５】
「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ」命令は、ＲＯＭ１３０からＣＰＵ７００及び拡張演算器７１０に読み出され、ＣＰＵ命令デコーダ１０１は、「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ」命令をデコードし、ＣＰＵ７００内部の各回路に制御信号を出力する。また、拡張演算器命令デコーダ１１１は「ＰＵＴＳＴＴ  Ｄｍ，Ｄｎ」命令をデコードし、拡張演算器７１０内部の各回路に制御信号を出力する。
【０２５６】
汎用レジスタ７０４は、Ｄｍを第１データ入力バス１２０に出力し、Ｄｎを第２データ入力バス１２１に出力する。第１データ入力バス１２０は、Ｄｍを拡張演算器７１０のレジスタアクセス状況管理回路７１７に転送する。レジスタアクセス状況管理回路７１７は、第１データ入力バス１２０から入力した値を実行情報として保持する。
＜動作＞
図２９及び図３０は、図２、図３、図１０、図１４、図１８、図２１、図２２、図２５、図２８及び上記で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
【０２５７】
ＣＰＵ７００は、ＲＯＭ１３０に格納された通常処理の命令列２９００を処理する。
ＣＰＵ７００は、「ＭＵＬＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３に積の上位ビット側結果が保持され、汎用レジスタ７０４の１番目のレジスタに積の下位ビット側結果が保持される。また、レジスタアクセス状況管理回路７１７は、第１演算器１１２が実行したことを検知し、実行情報のビット０に「１」をセットする。
【０２５８】
ＣＰＵ７００は、割込みを受付けて、割込みハンドラの命令列２９１０のハンドラ先頭に分岐する。
ＣＰＵ７００は、割込みハンドラの命令列２９１０中の汎用レジスタ７０４の格納値をＲＡＭ１４０に退避する処理を行う。
ＣＰＵ７００は、「ＧＥＴＳＴＴ  Ｄ０，Ｄ３」の命令をＲＯＭ１３０から読み込んで実行する。その結果、レジスタアクセス状況管理回路７１７が保持する実行情報０ｂ０００１を汎用レジスタ７０４の３番目のレジスタに書き込む。
【０２５９】
ＣＰＵ７００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタに「０」値を保持する。ＣＰＵ７００は、ＳＰ初期値の記憶処理を行った後、命令列２９１１の命令を実行する。
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ０００１」値を２番目のレジスタに保持にする。
【０２６０】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタに保持にする「０ｂ０００１」値と「０ｂ０００１」との論理積を演算し、演算結果の「０ｂ０００１」値を汎用レジスタ７０４の２番目のレジスタに保持にする。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタは、「０ｂ０００１」値を保持する。
【０２６１】
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、一致するため１値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納される値が「１」であるので＜ラベル１＞に分岐しない。
【０２６２】
ＣＰＵ７００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３は、保持していたアドレス値に定数値を加算した値を保持する。
ＣＰＵ７００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持していた値が、汎用レジスタ７０４の１番目のレジスタに保持される。
【０２６３】
ＣＰＵ７００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに汎用レジスタ７０４の１番目のレジスタに保持する値を書き込む。
ＣＰＵ７００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタは、保持していた値に１を加算した値を保持しなおす。
【０２６４】
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ０００１」値を２番目のレジスタに保持する。
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ００１０，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、汎用レジスタ７０４の２番目のレジスタに保持する「０ｂ０００１」値と「０ｂ００１０」との論理積を演算し、演算結果の「０ｂ００００」値を汎用レジスタ７０４の２番目のレジスタに保持する。
【０２６５】
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタは「０ｂ００１０」値を保持する。
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、Ｄ１とＤ２とが一致しないため「０」値をフラグレジスタ７０３に書き込む。
【０２６６】
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ７０３に格納される値が０であるので＜ラベル２＞に分岐する。
ＣＰＵ７００は、割込みハンドラの命令列の実行を完了する。ＣＰＵ７００は「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ０００１」値を２番目のレジスタに保持する。
【０２６７】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。ＣＰＵ７００は、汎用レジスタ７０４の２番目のレジスタに保持する「０ｂ０００１」値と「０ｂ０００１」値との論理積を演算し、演算結果の「０ｂ０００１」値を汎用レジスタ７０４の２番目のレジスタに保持する。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタは、「０ｂ０００１」値を保持する。
【０２６８】
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、一致するため1値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル３＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納されている値が「１」であるので、＜ラベル３＞に分岐しない。
【０２６９】
ＣＰＵ７００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３に保持するアドレス値に定数値を加算した値を保持する。
ＣＰＵ７００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、スタックポインタ格納レジスタ１０３に格納されるアドレス値で指定されるＲＡＭ１４０のアドレスに格納されている値を汎用レジスタ７０４の１番目のレジスタに読み出す。
【０２７０】
ＣＰＵ７００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタが保持している値が第１演算結果格納レジスタ１１３に格納される。
ＣＰＵ７００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタは、保持していたアドレス値に１を加算した値を保持しなおす。
【０２７１】
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタが保持する「０ｂ０００１」値を、汎用レジスタ７０４の２番目のレジスタに保持する。
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ００１０，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタが保持する「０ｂ０００１」値と「０ｂ００１０」との論理積を演算し、演算結果の「０ｂ００００」値を汎用レジスタ７０４の２番目のレジスタに保持する。
【０２７２】
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタに「０ｂ００１０」値を保持する。
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致しないため「０」値をフラグレジスタ７０３に書き込む。
【０２７３】
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル４＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納されている値が「０」であるので＜ラベル４＞に分岐する。
ＣＰＵ７００は、「ＰＵＴＳＴＴ  Ｄ３，Ｄ０」命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の３番目のレジスタに保持する実行情報「０ｂ０００１」をレジスタアクセス状況管理回路７１７に書き込む。
【０２７４】
ＣＰＵ７００は、ＲＡＭ１４０に汎用レジスタ７０４から退避した値を汎用レジスタ７０４に復帰する処理を行う。
ＣＰＵ７００は、「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列２９００に分岐する。
ＣＰＵ７００は、ＲＯＭ１３０に格納された通常処理の命令列を処理する。
【０２７５】
ＣＰＵ７００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果汎用レジスタ７０４の０番目のレジスタに「０」値を保持する。
ＣＰＵ７００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第１演算結果格納レジスタ１１３が保持する値を汎用レジスタ７０４の１番目のレジスタに保持し、レジスタアクセス状況管理回路７１７が保持する実行情報のビット０をクリア、即ち「０」にする。
【０２７６】
ＣＰＵ７００は、「ＤＩＶＱ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第２演算結果格納レジスタ１１５に剰余の値が保持され、汎用レジスタ７０４の１番目のレジスタに演算結果の商が保持される。また、レジスタアクセス状況管理回路７１７は、第２演算器１１４が実行したことを検知し、実行情報のビット１に「１」をセットする。
【０２７７】
ＣＰＵ７００は、割込みを受付けて、割込みハンドラの命令列２９２０のハンドラ先頭に分岐する。
ＣＰＵ７００は、割込みハンドラの命令列２９２０中の汎用レジスタ７０４の格納値をＲＡＭ１４０に退避する処理を行う。
ＣＰＵ７００は、「ＧＥＴＳＴＴ  Ｄ０，Ｄ３」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、レジスタアクセス状況管理回路７１７が保持していた実行情報「０ｂ００１０」を、汎用レジスタ７０４の３番目のレジスタに書き込む。
【０２７８】
ＣＰＵ７００は、「ＣＬＲ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタに「０」値を保持する。また、ＣＰＵ７００は、ＳＰ初期値を記憶する処理を実行し、命令列２９２１を実行する。
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ００１０」値を２番目のレジスタに保持にする。
【０２７９】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタに保持にする「０ｂ００１０」値と「０ｂ０００１」値との論理積を演算し、演算結果の「０ｂ００００」値を汎用レジスタ７０４の２番目のレジスタに保持する。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタに「０ｂ０００１」値を保持する。
【０２８０】
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致しないため「０」値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル１＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納されている値が「０」であるので＜ラベル１＞分岐する。
【０２８１】
ＣＰＵ７００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタに保持するアドレス値に１を加算した値を保持する。
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ００１０」値を２番目のレジスタに保持にする。
【０２８２】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ００１０，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタが保持する「０ｂ００１０」値と「０ｂ００１０」値との論理積を演算し、演算結果の「０ｂ００１０」値を汎用レジスタ７０４の２番目のレジスタに保持する。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタに「０ｂ００１０」値を保持する。
【０２８３】
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、一致するため１値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル２＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納されている値が「１」であるので＜ラベル２＞に分岐しない。
【０２８４】
ＣＰＵ７００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３に保持するアドレス値に定数値を加算した値を保持する。
ＣＰＵ７００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第２演算結果格納レジスタ１１５が保持する値を汎用レジスタ７０４の１番目のレジスタに保持する。
【０２８５】
ＣＰＵ７００は、「ＭＯＶ  Ｄ１，（ＳＰ）」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に、汎用レジスタ７０４の１番目のレジスタが保持する値を書き込む。
そして、ＣＰＵ７００は、割込みハンドラの実際の処理を実行する。
ＣＰＵ７００は、割込みハンドラの命令列の実行を完了すると、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタに保持する「０ｂ００１０」値を２番目のレジスタに保持にする。
【０２８６】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ０００１，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタに保持する「０ｂ００１０」値と「０ｂ０００１」との論理積を演算し、演算結果の「０ｂ００００」値を汎用レジスタ７０４の２番目のレジスタに保持する。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ０００１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタは、「０ｂ０００１」値を保持する。
【０２８７】
ＣＰＵ７００は、「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、一致しないため０値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル３＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、フラグレジスタ７０３に格納されている値が「０」であるので＜ラベル３＞に分岐する。
【０２８８】
ＣＰＵ７００は、「ＩＮＣ  Ｄ０」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の０番目のレジスタは、保持していた値に１を加算した値を保持しなおす。
ＣＰＵ７００は、「ＭＯＶ  Ｄ３，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の３番目のレジスタが保持する「０ｂ００１０」値を２番目のレジスタに保持する。
【０２８９】
ＣＰＵ７００は、「ＡＮＤ  ＃０ｂ００１０，Ｄ２」の命令をＲＯＭ１３０から読み込み、汎用レジスタ７０４の２番目のレジスタが保持している「０ｂ００１０」値と「０ｂ００１０」との論理積を演算し、演算結果の「０ｂ００１０」値を汎用レジスタ７０４の番目のレジスタに保持する。
ＣＰＵ７００は、「ＭＯＶ  ＃０ｂ００１０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタは「０ｂ００１０」値を保持する。
【０２９０】
ＣＰＵ７００は「ＣＭＰ  Ｄ１，Ｄ２」の命令をＲＯＭ１３０から読み込んで実行する。その結果、Ｄ１とＤ２とが一致するため、ＣＰＵ７００は、「１」値をフラグレジスタ７０３に書き込む。
ＣＰＵ７００は、「Ｂｃｃ  ＜ラベル４＞」の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＣＰＵ７００は、フラグレジスタ７０３に格納されている値が「１」であるので＜ラベル４＞に分岐しない。
【０２９１】
ＣＰＵ７００は、「ＩＮＣ  ＳＰ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、スタックポインタ格納レジスタ１０３に保持するアドレス値に定数値を加算した値を保持する。
ＣＰＵ７００は、「ＭＯＶ  （ＳＰ），Ｄ１」 の命令をＲＯＭ１３０から読み込んで実行する。その結果、ＲＡＭ１４０のスタックポインタ格納レジスタ１０３に格納されるアドレスに格納される値を汎用レジスタ７０４の１番目のレジスタに読み出す。
【０２９２】
ＣＰＵ７００は、「ＰＵＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタが保持する値を第２演算結果格納レジスタ１１５に格納する。
ＣＰＵ７００は、「ＰＵＴＳＴＴ  Ｄ３，Ｄ０」命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の３番目のレジスタに保持する実行情報「０ｂ００１０」をレジスタアクセス状況管理回路７１７に書き込む。
【０２９３】
ＣＰＵ７００は、ＲＡＭ１４０に退避した値を汎用レジスタ７０４に復帰する処理を行う。ＣＰＵ７００は「ＲＴＩ」の命令をＲＯＭ１３０から読み込んで実行する。その結果、通常処理の命令列に分岐する。
ＣＰＵ７００は、ＲＯＭ１３０に格納された通常処理の命令列を処理する。
ＣＰＵ７００は、「ＭＯＶ  ＃１，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、汎用レジスタ７０４の１番目のレジスタに「１」値を保持する。
【０２９４】
ＣＰＵ７００は、「ＧＥＴＡＣＸ  Ｄ０，Ｄ１」の命令をＲＯＭ１３０から読み込んで実行する。その結果、第２演算結果格納レジスタ１１５が保持する値を汎用レジスタ７０４の１番目のレジスタに保持し、レジスタアクセス状況管理回路７１７が保持する実行情報のビット1をクリアする。
以上に説明してきたように、本実施の形態７においては、レジスタアクセス状況管理回路が各レジスタ毎に、データを格納しているかどうかを認識している。そして、各レジスタ毎のアクセス状況を示す情報が、割込み発生時に拡張演算器からＣＰＵに伝達されるので、ＣＰＵは、その情報に基づいてレジスタを指定するレジスタ情報を、過不足なく、第１データ入力バス１２０に出力することができる。即ち、データが格納されているレジスタのみからデータを退避させているので、データがないレジスタからのデータの退避を促していた場合のオーバーヘッドを短縮できる。
＜補足＞
本発明の情報処理装置の実施の形態を、上記実施の形態に基づいて説明してきたが、本発明がこれらの実施の形態に限定されるものではないことは勿論である。以下、情報処理装置の変形例を説明する。
（１）上記実施の形態においては、各演算機が演算にかかるデータを保持する形で図示し、各演算器がそれぞれの保持するレジスタの値を出力、あるいは与えられたデータや算出したデータを格納することとした。しかし、これ以外にも、例えば図３１に示すような構成をとってもよい。
【０２９５】
図３１に示すように、情報処理装置８５０は、ＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ８００と、拡張演算器８１０とを含んで構成される。
ＣＰＵ８００は、ＣＰＵ命令デコーダ１０１と、フラグレジスタ１０２と、スタックポインタ格納レジスタ１０３と、汎用レジスタ１０４とを含んで構成される。
拡張演算器８１０は、拡張演算器命令デコーダ１１１と、第１演算器１１１と、第１演算結果格納レジスタ１１３と、第２演算器１１４と、第２演算結果格納レジスタ１１５と、セレクタ１１６と、拡張演算器譲歩出力回路１１７と、論理和回路１１８と、第１演算入力データ格納レジスタ８０１と、第２演算入力データ格納レジスタ８０２、８０３とを含んで構成される。
【０２９６】
基本的に、各機能部は、上記実施の形態１に示した内容で動作する。但し、上記実施の形態１とは、異なり、演算に係るデータを格納するレジスタが第１演算器内部にはない構成になっている。
そして、各演算器に代わって、拡張演算器８１０の各レジスタからのデータの出力とデータの格納とを拡張演算器命令デコーダ１１１が実行することとしてもよい。
【０２９７】
各実施の形態における情報処理装置は、このように演算器内部にレジスタがない構成にしてもよい。
（２）上記実施の形態においては、搭載演算器情報出力回路１１７は、搭載する演算器数と同じ値が入力された際に「１」値を出力する例を示したが、演算器数よりも大きい値を入力された際に「１」値を出力することでも同様の効果が得られることが可能となる。
（３）上記実施の形態においては、情報処理装置を３２ビットマイコンとして説明したが、これは３２ビットに限定するものではなく、例えば６４ビットであってもよい。
（４）上記実施の形態においては、「ＰＵＴＡＣＸ」命令により、割込み終了後にデータを格納する処理において、第１演算結果格納レジスタ１１３から順にデータを格納する手法をとった。
【０２９８】
これは、逆順、即ち、第２演算結果格納レジスタ１１５からデータを格納してもよい。この場合、Ｄ０は、フラグレジスタ１０２が「１」になった時点のＤ０の値を記憶しておき、「ＰＵＴＡＣＸ」命令実行時には記憶しておいたＤ０から１ずつ、「０」になるまでデクリメントしていく構成にしてもよい。
（５）上記実施の形態においては、データ入力バス２本と、データ出力バスとをわけて記載したが、バス上を流れるデータがそれぞれ、どの機能部にあてたものであるかが認識できる構成、例えばデータのヘッダとして識別子を付す構成にするならば、当該バスラインは共有されていてもよい。
【産業上の利用可能性】
【０２９９】
本発明に係る情報処理装置は、少ない拡張演算命令数で割込み発生時の拡張演算器からのデータの退避とその復帰が可能な情報処理装置として有用である。
【図面の簡単な説明】
【０３００】
【図１】実施の形態１に係る情報処理装置１５０の機能構成を示したブロック図である。
【図２】ＲＯＭ１３０からＣＰＵ１００及び拡張演算器１１０に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。
【図３】ＣＰＵ１００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられるＣＰＵ実行命令のニーモニック、ＣＰＵの動作の一例を示した表である。
【図４】「ＧＥＴＡＣＸ」命令実行時の拡張演算器命令デコーダ１１１の動作を示したフローチャートである。
【図５】「ＰＵＴＡＣＸ」命令実行時の拡張演算器命令デコーダ１１１の動作を示したフローチャートである。
【図６】実施の形態１に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図７】実施の形態２に係る情報処理装置２５０の機能構成を示したブロック図である。
【図８】ＲＯＭ１３０から読み出され、ＣＰＵ２００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられる命令のニーモニック、ＣＰＵの動作の一例を示した表である。
【図９】実施の形態２におけるリセット時の情報処理装置の動作を示したフローチャートである。
【図１０】実施の形態２に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図１１】実施の形態３に係る情報処理装置３５０の機能構成を示したブロック図である。
【図１２】ＲＯＭ１３０からＣＰＵ３００及び拡張演算器３１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示した表である。
【図１３】ＣＰＵ３００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられる命令のニーモニック、ＣＰＵの動作の一例を示した表である。
【図１４】実施の形態３に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図１５】実施の形態３に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図１６】実施の形態４に係る情報処理装置４５０の機能構成を示したブロック図である。
【図１７】ＲＯＭ１３０からＣＰＵ４００及び拡張演算器４１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示した表である。
【図１８】レベル０割込み発生時のアセンブラプログラムの一例を示す命令列を示す図である。
【図１９】レベル１割込み発生時のアセンブラプログラムの一例を示す命令列を示す図である。
【図２０】実施の形態５に係る情報処理装置５５０の機能構成を示したブロック図である。
【図２１】ＲＯＭ１３０からＣＰＵ５００及び拡張演算器５１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示した表である。
【図２２】タスク切り替え発生時のアセンブラプログラムの一例を示す命令列を示す図である。
【図２３】実施の形態６に係る情報処理装置６５０の機能構成を示したブロック図である。
【図２４】ＲＯＭ１３０からＣＰＵ６００及び拡張演算器６１０に読み出される拡張演算器命令のニーモニック、ＣＰＵの動作、拡張演算器の動作の一例を示した表である。
【図２５】ＣＰＵ６００からＲＡＭ１４０に対してデータの退避・復帰の際に用いられる命令のニーモニック、ＣＰＵの動作の一例を示した表である。
【図２６】実施の形態６に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図２７】実施の形態７に係る情報処理装置７５０の機能構成を示したブロック図である。
【図２８】ＲＯＭ１３０からＣＰＵ７００及び拡張演算器７１０に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す表である。
【図２９】実施の形態７に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図３０】実施の形態７に係るアセンブラプログラムの一例を示す命令列を示す図である。
【図３１】実施の形態以外の情報処理装置の機能構成例を示したブロック図である。
【符号の説明】
【０３０１】
１００、２００、３００、４００、５００、６００、７００  ＣＰＵ
１０１  ＣＰＵ命令デコーダ
１０２、２０２、６０２、７０２  フラグレジスタ
１０３  スタックポインタ格納レジスタ
１０４  汎用レジスタ
１１０、２１０、３１０、４１０、５１０、６１０、７１０  拡張演算器
１１１  拡張演算器命令デコーダ
１１２  第１演算器
１１３、２１３、３１３  第１演算結果格納レジスタ
１１４  第２演算器
１１５  第２演算結果格納レジスタ
１１６、７１６  セレクタ
１１７  拡張演算器情報出力回路
１１８  ＡＮＤ回路
１２０  第１データ入力バス
１２１  第２データ入力バス
１２２  データ出力バス
１３０  ＲＯＭ
１４０  ＲＡＭ
１５０、２５０、３５０、４５０、５５０、６５０、７５０  情報処理装置
２１１  レジスタ数発生器
３１１  レジスタ情報発生器
４１７  退避レベル対応搭載演算器情報出力回路
５１７  実行タスク管理回路
５１８  拡張演算器実行フラグ
６１７  レジスタアクセス管理回路
７１７  レジスタアクセス状況管理回路
【図１】
2008310693.tif 000003
【図２】
2008310693.tif 000004
【図３】
2008310693.tif 000005
【図４】
2008310693.tif 000006
【図５】
2008310693.tif 000007
【図６】
2008310693.tif 000008
【図７】
2008310693.tif 000009
【図８】
2008310693.tif 000010
【図９】
2008310693.tif 000011
【図１０】
2008310693.tif 000012
【図１１】
2008310693.tif 000013
【図１２】
2008310693.tif 000014
【図１３】
2008310693.tif 000015
【図１４】
2008310693.tif 000016
【図１５】
2008310693.tif 000017
【図１６】
2008310693.tif 000018
【図１７】
2008310693.tif 000019
【図１８】
2008310693.tif 000020
【図１９】
2008310693.tif 000021
【図２０】
2008310693.tif 000022
【図２１】
2008310693.tif 000023
【図２２】
2008310693.tif 000024
【図２３】
2008310693.tif 000025
【図２４】
2008310693.tif 000026
【図２５】
2008310693.tif 000027
【図２６】
2008310693.tif 000028
【図２７】
2008310693.tif 000029
【図２８】
2008310693.tif 000030
【図２９】
2008310693.tif 000031
【図３０】
2008310693.tif 000032
【図３１】
2008310693.tif 000033