(57)【要約】【課題】転送すべきデータ長が予め決まっていないブロックデータのデータ転送処理効率を向上させたマイクロコンピュータを提供する。【解決手段】マイクロコンピュータ１０は、命令をデコードする実行制御部１０１と、実行制御部１０１の命令デコード結果に基づいて演算処理を実行するＡＬＵ７０４と、汎用レジスタファイル７０３と、ＡＬＵ７０４による汎用レジスタ７０３とデータメモリ７２との間のデータ転送命令の実行に応じて汎用レジスタファイル７０３の格納データが所定の識別コード（ＮＵＬＬ文字）であるか否かを検出する検出回路１１０とを備える。【選択図】図１
2008083762.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする実行制御部と、
前記実行制御部の命令デコード結果に基づいて演算処理を実行する演算部と、
第１のデータ格納部と、
前記演算部による前記第１のデータ格納部と第２のデータ格納部との間のデータ転送命令の実行に応じて、前記第１のデータ格納部の格納データが所定の識別コードであるか否かを検出する検出回路と、
を備えるマイクロコンピュータ。
【請求項２】
前記検出回路は、前記第１のデータ格納部から前記第２のデータ格納部にデータを出力する命令の実行に併せて、前記第１のデータ格納部に格納済みのデータが所定の識別コードであるか否かを検出する請求項１に記載のマイクロコンピュータ。
【請求項３】
前記演算部による演算結果がゼロであることを記憶するゼロフラグと、
前記演算部による演算結果におけるキャリー又はボローの発生を記憶するキャリーフラグとをさらに備え、
前記検出回路の検出結果が、前記ゼロフラグ及び前記キャリーフラグの少なくとも一方に記憶される請求項１に記載のマイクロコンピュータ。
【請求項４】
前記検出回路は、前記識別コードのデータ長より長いデータが前記第１のデータ格納部に一括転送される場合に、一括転送されたデータ内に少なくとも前記識別コードが含まれることを示す判定結果と、一括転送されたデータ内の前記識別コードの位置を特定するための判定結果とを出力する請求項１に記載のマイクロコンピュータ。
【請求項５】
前記識別コードは、転送すべきデータ長が予め決まっていないブロックデータの終了位置を示すデータ列である請求項１乃至４のいずれかに記載のマイクロコンピュータ。
【請求項６】
前記第１のデータ格納部は前記演算部に対する入力データ及び前記演算部の出力データの格納場所として使用される汎用レジスタであり、前記第２のデータ格納部はデータメモリである請求項１に記載のマイクロコンピュータ。
【請求項７】
転送すべきデータ長が予め決まっていないブロックデータの転送処理を行うマイクロコンピュータであって、
第１のデータ格納部と、
前記第１のデータ格納部に入力されたデータが前記ブロックデータの終了位置を示す終了コードであるか否かを検出する検出回路と、
を備えるマイクロコンピュータ。
【請求項８】
前記検出回路は、前記第１のデータ格納部にデータを入力する転送命令又は前記第１のデータ格納部からデータを出力する命令の実行に応じて、前記終了コードの検出を行う請求項７に記載のマイクロコンピュータ。
【請求項９】
前記検出回路は、前記終了コードのデータ長より長いデータが前記第１のデータ格納部に一括転送される場合に、一括転送されたデータ内に少なくとも前記終了コードが含まれることを示す判定結果と、一括転送されたデータ内の前記終了コードの位置を特定するための判定結果とを出力する請求項７に記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコンピュータに関し、特に、転送すべきデータ長が予め決定されていないブロックデータのデータ転送処理をマイクロコンピュータにより実行する技術に関する。
【背景技術】
【０００２】
従来から、１又は複数のメモリ装置と接続されて使用されるマイクロコンピュータが知られている。従来のマイクロコンピュータ７０の主要部分の構成例を図７に示す。図７に示すマイクロコンピュータ７０は、アドレスバス７３及びデータバス７４を介して命令メモリ７１及びデータメモリ７２と接続されている。命令メモリ７１は、マイクロコンピュータ７０により実行される命令列を格納するメモリである。また、データメモリ７２は、マイクロコンピュータ７０に入力されるデータや、マイクロコンピュータ７０によって処理されたデータが格納されるメモリである。なお、図７では、論理的な構成単位である命令メモリ７１及びデータメモリ７２を示しているが、これらはそれぞれ、ＲＯＭ（Read Only Memory）若しくはＲＡＭ（Random Access Memory）又はこれらの組合せによって構成される。
【０００３】
実行制御部７０１は、命令メモリ７１から命令をフェッチし、フェッチした命令をデコードする。より具体的に述べると、実行制御部７０１は、フェッチした命令の命令種別を判定し、命令オペランドを取得し、命令デコードにより得られたこれらの情報に応じて、後述するプログラムカウンタ（ＰＣ）７０２、汎用レジスタファイル７０３、算術論理演算ユニット（ＡＬＵ）７０４、セレクタ７０７及びセレクタ７０９に対してデータ若しくは制御信号又はこれら両方を出力する。
【０００４】
プログラムカウンタ７０２は、実行制御部７０１によるフェッチ対象の命令が格納されているアドレスが保持されるレジスタである。プログラムカウンタ７０２の値は実行制御部７０１によって更新される。なお、命令が逐次実行されている場合には、プログラムカウンタ７０２の値は命令長に相当する値ずつ更新されるが、分岐命令が存在すると分岐先命令を示すアドレスによって不連続に更新される。
【０００５】
汎用レジスタファイル７０３は、１６個の汎用レジスタＲ０乃至Ｒ１５を有する。汎用レジスタＲ０乃至Ｒ１５は、それぞれ８ビットのレジスタである。汎用レジスタＲ０乃至Ｒ１５は、ＡＬＵ７０４の入力データ及び出力データの格納場所としての使用、レジスタ間接アドレッシングモードを使用する場合のベースアドレスやインデックス値の格納場所としての使用など、様々な用途に使用可能なレジスタ群である。
【０００６】
なお、少なくとも、レジスタＲ０及びＲ１のペア、Ｒ２及びＲ３のペア、Ｒ１２及びＲ１３のペア、並びにＲ１４及びＲ１５のペアは、これら８ビットレジスタのペアによって１６ビットレジスタとして使用することができる。また、これらの汎用レジスタには、アセンブリ言語の命令オペランドにおけるレジスタ指定の便宜を図るために別名称が付与されている。具体的には、レジスタＲ０はＸレジスタ、レジスタＲ１はＡレジスタ、レジスタＲ２はＣレジススタ、レジスタＲ３はＢレジスタ、レジスタＲ１２はＥレジスタ、レジスタＲ１３はＤレジスタ、レジスタＲ１４はＬレジスタ、レジスタＲ１５はＨレジスタと呼ばれるもとする。
【０００７】
ＡＬＵ７０４は、実行制御部７０１による命令デコード結果に応じた演算を実行する演算器であり、算術演算（加減算）と、論理和、論理積及び排他的論理和などの論理演算を実行する。なお、図７では、ＡＬＵ７０４へのデータ入力及びＡＬＵ７０４による演算後のデータ出力は、全て汎用レジスタファイル７０３との間で行う構成としている。ＡＬＵ７０４のデータ入力元レジスタ及び出力先レジスタは、命令のオペランドに基づいて実行制御部７０１によって決定される。
【０００８】
ゼロ判定回路７０５は、ＡＬＵ７０４による算術演算結果がゼロであるか否かを判定し、判定結果に応じて１ビット論理信号を出力する回路である。ゼロ判定回路７０５は、ＡＬＵ７０４による演算結果がゼロである場合に"１"を出力し、演算結果がゼロでない場合に"０"を出力する。
【０００９】
ゼロフラグ（Ｚフラグ）７０６は、ゼロ判定回路７０５による判定結果を保持する１ビットレジスタである。
【００１０】
セレクタ７０７は、２入力１出力のセレクタ回路である。セレクタ７０７の入力ポートの選択は実行制御部７０１が出力する制御信号に応じて行われる。具体的には、実行制御部７０１が算術演算命令をデコードしてＡＬＵ７０４に算術演算を実行させる場合に、ゼロ判定回路７０５側の入力端子が選択される。一方、ＡＬＵ７０４にこれ以外の演算を行わせる場合にもう一方の入力端子が選択される。
【００１１】
キャリーフラグ（ＣＹフラグ）７０８は、ＡＬＵ７０４による加算演算で発生するキャリー及び減算演算で発生するボローを記憶するために設けられた１ビットレジスタである。
【００１２】
セレクタ７０９は、２入力１出力のセレクタ回路である。セレクタ７０９の入力ポートの選択は実行制御部７０１が出力する制御信号に応じて行われる。具体的には、実行制御部７０１が算術演算命令をデコードし、ＡＬＵ７０４に算術演算を実行させる場合に、ＡＬＵ７０４におけるキャリー及びボローの発生を示すｃａｒｒｙ／ｂｏｒｒｏｗ信号を入力する端子が選択され、ＡＬＵ７０４にこれ以外の演算を行わせる場合にもう一方の入力端子が選択される。
【００１３】
このようなマイクロコンピュータ７０が実行する処理の１つに、データメモリ７２のある記憶領域に格納されたデータを異なるアドレスによって指定される他の記憶領域に転送又はコピーする処理がある。本明細書では、このようなデータの転送又はコピーを行う処理を総称して"データ転送処理"と呼ぶ。例えば、特許文献１には、データ長が既知であるブロックデータのデータ転送処理を実行するマイクロコンピュータが開示されている。
【特許文献１】特開昭６４−５８０３９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
特許文献１に開示されたデータ転送処理のように、転送されるブロックデータのデータ長が既知である場合には、転送すべきブロックデータのデータ長を始めに汎用レジスタ（例えばレジスタＲ２）に保持しておき、データ転送を行う度に転送済みデータ長に応じてレジスタＲ２の値をデクリメントし、レジスタＲ２の値がゼロになるまでデータ転送をすればよい。このようなデータ転送処理によって、ブロックデータの効率的な転送又はコピーを行うことができる。
【００１５】
しかしながら、例えば文字列データを転送する場合など、転送すべきブロックデータのデータ長が予め決まっていない場合には、転送されるデータの内容に基づいてブロックデータの終了位置を判定する必要がある。すなわち、ブロックデータの終了位置を示す何らかの終了コードを転送されるデータ列から検出することで、データ転送処理の終了を判定しなければならない。例えば、文字列データを転送する場合には、文字列の終了位置を示すＮＵＬＬ文字を終了コードとして検出することによって、転送すべき文字列データの終了位置を検出することができる。
【００１６】
このように、転送すべきデータ長が予め決定されていない文字列データ等のデータ転送処理を実行する場合には、転送されるデータが所定の終了コードと一致するか否かを判定する比較演算を繰り返し実行する必要がある。このため、データ転送処理の処理効率が悪化するという問題がある。なお、転送すべきデータ長が予め決定されていないブロックデータ及び文字列データのことを、本明細書ではそれぞれ未確定ブロックデータ及び未確定文字列データと呼ぶ。
【００１７】
上述した問題が発生する具体例を図８（ａ）及び（ｂ）のプログラムを参照して説明する。図８（ａ）及び（ｂ）は、未確定文字列データのデータ転送処理をアセンブリ言語によって記述したプログラムの一例である。このうち、図８（ａ）は、データ転送処理を１バイト単位のデータ転送を繰り返すループ処理によって記述したプログラム例である。
【００１８】
図８（ａ）の１行目は、単なるコメント行である。図８（ａ）の２行目のＭＯＶ命令はデータ転送命令であり、第１オペランドはデータの転送先を示し、第２オペランドはデータの転送元を示している。より具体的に述べると、ニーモニック"MOV A,[DE]"で表される２行目の命令は、ＤＥレジスタに格納された１６ビットアドレスによって指定されるデータメモリ７２の記憶領域から１バイトデータを読み出してＡレジスタに格納する処理を示している。ここで、ＤＥレジスタとは、ＤレジスタとＥレジスタのペアによる１６ビットレジスタを意味する。
【００１９】
図８（ａ）の３行目のＭＯＶ命令は、ＨＬレジスタに格納された１６ビットアドレスによって指定されるデータメモリ７２の記憶領域に対して、Ａレジスタに格納されたデータを転送する処理を示している。
【００２０】
図８（ａ）の４行目のＣＭＰ０命令は、Ａレジスタに格納された８ビットデータが、"0x00"であるかを判定するための比較命令である。なお、ＮＵＬＬ文字には "0x00"が使用されるため、この命令はデータメモリ７２から取得したデータがＮＵＬＬ文字であるかを判定するための命令である。より具体的に述べると、ニーモニック"COMP0 A"で表される４行目の命令によって、Ａレジスタの格納データから０を減算する演算が実行され、演算結果がゼロであるときにＺフラグ７０６に"１"がセットされる。
【００２１】
図８（ａ）の５行目のＩＮＣＷ命令は、データ転送元アドレスを格納するＤＥレジスタをインクリメントする命令である。また、図８（ａ）の６行目のＩＮＣＷ命令は、データ転送先アドレスを格納するＨＬレジスタをインクリメントする命令である。最後に、図８（ａ）の７行目のＢＮＺ命令は、Ｚフラグ７０６に"０"がセットされているときに１行目に分岐する条件付き分岐命令である。
【００２２】
図８（ａ）に示したように、未確定文字列データのデータ転送では、文字列データの終了を示すＮＵＬＬ文字を検出するための比較命令（ＣＭＰ０命令）を繰り返し実行する必要がある。このため、比較命令の繰り返し実行に消費される時間だけ、データ転送処理の効率が悪化してしまう。
【００２３】
一方、図８（ｂ）は、図８(ａ)に比べてループ展開を進めたプログラム例であり、４バイト単位のデータ転送を繰り返すループ処理によってデータ転送処理を記述したプログラム例である。また、図８（ｂ）のプログラムは、データメモリ７２から汎用レジスタファイル７０３へのデータ転送を２バイト単位のデータ転送命令（ＭＯＶＷ命令）を用いて記述している。図８（ｂ）の２行目のＭＯＶＷ命令は、ＤＥレジスタの格納値にオフセット値"０"を加算したアドレスによって指定されるデータメモリ７２の記憶領域から２バイトデータを読み出してＡＸレジスタに格納する転送処理を示している。２行目のＭＯＶＷ命令によって読み出された２バイトデータを転送先メモリ領域に格納する処理は３行目のＭＯＶ命令から８行目のＢＺ命令までで完了する。しかしながら、この間には、Ａレジスタ及びＸレジスタの格納値がＮＵＬＬ文字であるかを判定するための２つの比較命令（図８（ｂ）の４行目及び７行目）が含まれている。このため、図８（ｂ）のプログラムによるデータ転送処理も図８（ａ）の場合と同様に、比較命令の繰り返し実行によって消費される時間だけ、データ転送処理の効率が悪化してしまう。
【課題を解決するための手段】
【００２４】
本発明にかかるマイクロコンピュータは、命令をデコードする実行制御部と、前記実行制御部の命令デコード結果に基づいて演算処理を実行する演算部と、第１のデータ格納部と、前記演算部による前記第１のデータ格納部と第２のデータ格納部との間のデータ転送命令の実行に応じて、前記第１のデータ格納部の格納データが所定の識別コードであるか否かを検出する検出回路とを備える。
【００２５】
このような構成により、データ転送命令の実行に併せて、転送データに含まれる識別コード、例えば文字列データの終了位置を示すＮＵＬＬ文字などの検出を行うことができる。このため、従来のマイクロコンピュータ７０において、未確定ブロックデータのデータ転送処理を実行する際に、ＮＵＬＬ文字などの終了コードを検出するために必要であった比較命令の実行が不要となる。つまり、本発明にかかるマイクロコンピュータは、未確定ブロックデータのデータ転送処理を実行する際の実行命令数を削減できるため、従来に比べて、データ転送処理効率を向上させることができる。
【発明の効果】
【００２６】
本発明により、未確定ブロックデータのデータ転送処理効率を向上させたマイクロコンピュータを提供できる。
【発明を実施するための最良の形態】
【００２７】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００２８】
発明の実施の形態１．
本実施の形態にかかるマイクロコンピュータ１０は、データメモリ７２に格納されている未確定文字列データに対するデータ転送処理を効率よく行うことができるように構成されたマイクロコンピュータである。マイクロコンピュータ１０の構成を図１に示す。
【００２９】
図１において、終了コード判定回路１１０は、入力されるデータと、ブロックデータの終了位置を示す終了コードとの一致を検出する回路である。本実施の形態では、終了コード判定回路１１０は、文字列データの終了位置を示すＮＵＬＬ文字との一致を検出するものとする。具体的には、終了コード判定回路１１０は、入力されるデータがＮＵＬＬ文字と一致する場合に"１"を出力し、ＮＵＬＬ文字と一致しない場合に"０"を出力する。なお、データ転送処理の対象であるブロックデータが文字列データでない場合は、転送対象のブロックデータに対応した終了コードとの一致を終了コード判定回路１１０において検出すればよい。
【００３０】
終了コード判定回路１１０には、Ａレジスタに格納されたデータが入力される。これは、後述するように、未確定文字列データのデータ転送処理を実行する際にデータメモリ７２から取得した１バイトデータを格納するレジスタをＡレジスタに固定しているためである。なお、データメモリ７２から取得されたデータがＡレジスタとは異なる他の汎用レジスタに格納される場合は、このレジスタを終了コード判定回路１１０の入力元レジスタとすればよい。また、終了コード判定回路１１０に対する入力元レジスタを選択可能としてもよい。この場合は、データメモリ７２から汎用レジスタへのデータ転送命令をデコードした実行制御部１０１によって、データ転送命令のオペランドに示された汎用レジスタが、終了コード判定回路１１０の入力元レジスタに選択されるよう構成してもよい。
【００３１】
セレクタ１１１は、２入力１出力のセレクタ回路である。セレクタ１１１の入力ポートの選択は、実行制御部１０１が出力する制御信号に応じて行われる。具体的には、実行制御部１０１がＭＯＶＳ命令をデコードした場合に終了コード判定回路１１０側の入力端子が選択され、実行制御部１０１がＭＯＶＳ命令以外の命令をデコードした場合にもう一方の入力端子が選択される。ここで、ＭＯＶＳ命令とは、所定の識別コードを含むデータのデータ転送処理を行うために新規に定義された転送命令である。
【００３２】
実行制御部１０１は、上述した従来の実行制御部７０１と同様に、命令メモリ７１からフェッチした命令をデコードし、命令デコードにより得られた情報に応じて、プログラムカウンタ７０２、汎用レジスタファイル７０３、ＡＬＵ７０４、セレクタ７０７及びセレクタ７０９に対してデータ若しくは制御信号又はこれら両方を出力する。これに加えて、実行制御部１０１は、命令デコードの結果に応じてセレクタ１１１に対する制御信号を出力する。
【００３３】
なお、図１に示したその他の構成要素は、従来のマイクロコンピュータ７０が有するものと同一であるため、これらの構成要素には同一の符号を付与し、これらに関する詳細な説明を省略する。
【００３４】
続いて、実行制御部１０１における命令デコード結果に応じたセレクタ７０７及び１１１の動作について、図２を用いて説明する。図２（ａ）は、ＡＤＤ命令等の算術演算命令及びＭＯＶＳ命令を除く他の命令がデコードされた場合におけるセレクタ７０７及び１１１の選択状態を示している。このときは、Ｚフラグ７０６の格納値が維持されるように、Ｚフラグ７０６に保持されている値がＺフラグ７０６に繰り返し入力される。
【００３５】
図２（ｂ）は、加算命令（ＡＤＤ命令）等の算術命令がデコードされた場合におけるセレクタ７０７及び１１１の選択状態を示している。このときは、ゼロ判定回路７０５の判定結果がＺフラグ７０６に入力されるように、セレクタ７０７及び１１１が動作する。
【００３６】
図２（ｃ）は、ＭＯＶＳ命令がデコードされた場合におけるセレクタ７０７及び１１１の選択状態を示している。このときは、終了コード判定回路１１０の判定結果がＺフラグ７０６に入力されるように、セレクタ７０７及び１１１が動作する。これによって、終了コード判定回路１１０の判定結果がＺフラグ７０６に保持されるため、データメモリ７２から読み出されてＡレジスタに格納されたデータがＮＵＬＬ文字であるか否かをＺフラグ７０６の値によって判定することができる。
【００３７】
図３は、未確定文字列データのデータ転送処理をマイクロコンピュータ１０によって実行する場合のプログラムの記述例を示している。図３のプログラムは、図８（ａ）と同様に、データ転送処理を１バイト単位のデータ転送を繰り返すループ処理によって記述している。図３の１行目は、図８（ａ）の１行目と同様に、単なるコメント行である。図３の２行目のＭＯＶ命令はデータ転送命令であり、ＤＥレジスタに格納された１６ビットアドレスによって指定されるデータメモリ７２の記憶領域から１バイトデータを読み出してＡレジスタに格納する。この命令は、図３（ａ）の２行目のＭＯＶ命令と同じである。
【００３８】
図３の３行目は、未確定文字列データのデータ転送を行うために新たに定義されたＭＯＶＳ命令である。ＭＯＶＳ命令の第１オペランドはデータの転送先を示し、第２オペランドはデータの転送元を示している。ニーモニック"MOVS [HL],A"で表される転送命令は、ＨＬレジスタに格納されている１６ビットアドレスによって指定されるデータメモリ７２の記憶領域に対して、Ａレジスタに格納されたデータを転送する処理を示している。
【００３９】
さらに、図２を参照して説明したように、図３の３行目のＭＯＶＳ命令の実行時には、終了コード判定回路１１０による判定の結果がＺフラグ７０６に入力される。すなわち、Ａレジスタに格納された転送元データがＮＵＬＬ文字（0x00）である場合にＺフラグ７０６に"１"がセットされ、ＮＵＬＬ文字でない場合にＺフラグ７０６に"０"がセットされる。したがって、図８（ａ）のプログラムと対比すると、マイクロコンピュータ１０は、図８（ａ）の３行目のＭＯＶ命令と４行目のＣＭＰ０命令によって実行される処理と同等の処理を図３の３行目のＭＯＶＳ命令のみで実行することができる。
【００４０】
図３の４行目及び５行目のＩＮＣＷ命令は、図８（ａ）の５行目及び６行目のＩＮＣＷ命令と同一の命令であり、これらの命令によってデータ転送元アドレスを格納するＤＥレジスタ及びデータ転送先アドレスを格納するＨＬレジスタがインクリメントされる。
【００４１】
最後に、図３の６行目のＢＮＺ命令は、図８（ａ）の７行目のＢＮＺ命令と同一であり、Ｚフラグ７０６に"０"がセットされているときに１行目に分岐する条件付き分岐命令である。
【００４２】
このように、本実施の形態にかかるマイクロコンピュータ１０は、データメモリ７２から汎用レジスタファイル７０３に転送されたデータとＮＵＬＬ文字との一致を検出する終了コード判定回路１１０を有している。さらに、汎用レジスタファイル７０３からデータメモリ７２へのデータ転送を指示する所定の転送命令、具体的にはＭＯＶＳ命令を実行する際に、終了コード判定回路１１０によるＮＵＬＬ文字の検出を併せて実行し、終了コード判定回路１１０の検出結果を所定のフラグレジスタ、具体的にはＺフラグ７０６に保持する構成とした。このような構成によって、従来のマイクロコンピュータ７０においてＮＵＬＬ文字を検出するために必要であった比較命令の実行が不要となる。つまり、マイクロコンピュータ１０は、未確定文字列データのデータ転送処理を実行する際の実行命令数を削減できるため、従来に比べてデータ転送処理の処理効率を向上させることができる。
【００４３】
発明の実施の形態２．
本実施の形態にかかるマイクロコンピュータ２０は、データメモリ７２と汎用レジスタファイル７０３の間でのデータ転送を２バイト単位で実行するのに適した構成となるように、上述したマイクロコンピュータ１０を改良したものである。本実施の形態にかかるマイクロコンピュータ２０の構成を図４に示す。
【００４４】
図４において、終了コード判定回路２１０及び２１１は、上述した終了コード判定回路１１０と同様の回路である。つまり、終了コード判定回路２１０及び２１１は、入力されるデータと、ブロックデータの終了位置を示す終了コードとの一致を検出する回路である。具体的には、終了コード判定回路２１０及び２１１は、入力されるデータがＮＵＬＬ文字と一致する場合に"１"を出力し、ＮＵＬＬ文字と一致しない場合に"０"を出力する。
【００４５】
終了コード判定回路２１０には、Ｘレジスタに格納されたデータが入力される。一方、終了コード判定回路２１１には、Ａレジスタに格納されたデータが入力される。これは、後述するように、文字列データのデータ転送処理を実行する際にデータメモリ７２から取得した２バイトデータを格納するレジスタをＡレジスタ及びＸレジスタに固定しているためである。なお、終了コード判定回路２１０及び２１１の入力元の変更が適宜可能であることは、発明の実施の形態１において終了コード判定回路１１０に関して述べた通りである。
【００４６】
ＯＲ回路２１２は、終了コード判定回路２１０及び２１１の出力信号を入力し、これらのＯＲ判定（論理和演算）結果を出力する。つまり、Ａレジスタ及びＸレジスタの格納データの少なくとも一方がＮＵＬＬ文字であるために終了コード判定回路２１０及び２１１の少なくとも一方の出力が"１"になったとき、ＯＲ回路２１２の出力が"１"になる。
【００４７】
セレクタ２１３及びセレクタ２１４は、それぞれ２入力１出力のセレクタ回路である。セレクタ２１３及び２１４の入力ポートの選択は実行制御部２０１が出力する制御信号に応じて行われる。具体的には、実行制御部２０１がＭＯＶＳ命令をデコードした場合、セレクタ２１３は終了コード判定回路２１０側の入力端子を選択し、セレクタ２１４はＯＲ回路２１２側の入力端子を選択する。一方、実行制御部２０１がＭＯＶＳ命令以外の命令をデコードした場合、セレクタ２１３及び２１４はもう一方の入力端子を選択さする。
【００４８】
実行制御部２０１は、上述した従来の実行制御部７０１と同様に、命令メモリ７１からフェッチした命令をデコードし、命令デコードにより得られた情報に応じて、プログラムカウンタ７０２、汎用レジスタファイル７０３、ＡＬＵ７０４、セレクタ７０７及びセレクタ７０９に対してデータ若しくは制御信号又はこれら両方を出力する。これに加えて、実行制御部２０１は、命令デコードの結果に応じてセレクタ２１３及び２１４に対する制御信号を出力する。
【００４９】
図５は、実行制御部２０１がＭＯＶＳ命令をデコードした場合のセレクタ７０７、７０９、２１３及び２１４の動作を示す図である。すなわち、終了コード判定回路２１０の出力がＺフラグ７０６に入力されるとともに、ＯＲ回路２１２の出力がＣＹフラグ７０８に入力されるように、４つのセレクタ７０７、７０８、２１３及び２１４が動作する。これによって、データメモリ７２から読み出されてＡレジスタ及びＸレジスタに格納された２バイトデータの少なくとも一方がＮＵＬＬ文字であることをＣＹフラグ７０８の値によって判定することができる。また、データメモリ７２から読み出されてＸレジスタに格納されたデータがＮＵＬＬ文字であることをＺフラグ７０６の値によって判定することができる。
【００５０】
図６は、未確定文字列データのデータ転送処理をマイクロコンピュータ２０によって実行する場合のプログラム例である。図６のプログラムは、図８（ｂ）に示したプログラムと対比すべく記述されたものであって、データ転送処理を４バイト単位のデータ転送を繰り返すループ処理で記述するとともに、データメモリ７２から汎用レジスタファイル７０３へのデータ転送を２バイト単位のデータ転送命令（ＭＯＶＷ命令）を用いて記述している。
【００５１】
図６の１行目は、図８（ｂ）の１行目と同様に、単なるコメント行である。図６の２行目のＭＯＶＷ命令は、図８（ｂ）の２行目のＭＯＶＷ命令と同様である。つまり、ＤＥレジスタの格納値にオフセット値"０"を加算した１６ビットアドレスによって指定されるデータメモリ７２の記憶領域から２バイトデータを読み出してＡＸレジスタに格納させる転送命令を示している。
【００５２】
図６の３行目のＭＯＶＳ命令は、ＨＬレジスタの格納値にオフセット値"０"を加算した１６ビットアドレスによって指定されるデータメモリ７２の記憶領域に対して、Ｘレジスタに格納されたデータを転送する処理を示している。さらに、図６の３行目のＭＯＶＳ命令の実行時には、図５を参照して説明したように、終了コード判定回路２１０の判定結果がＺフラグ７０６に入力されるとともに、ＯＲ回路２１２の出力がＣＹフラグ７０８に入力される。
【００５３】
図８（ｂ）のプログラムにおいて図６の３行目のＭＯＶＳ命令に対応する命令群は、３行目のＭＯＶ命令、４行目のＣＭＰ０命令及び７行目のＣＭＰ０命令である。つまり、マイクロコンピュータ２０は、図６の３行目のＭＯＶＳ命令によって、従来の３命令に相当する処理を１命令で実行可能である。
【００５４】
図６の４行目のＢＣ命令は、ＣＹフラグ７０８の値が"１"であるときに１９行目に分岐する条件付き分岐命令である。つまり、このＢＣ命令は、Ａレジスタ及びＸレジスタの格納データの少なくとも一方がＮＵＬＬ文字であると判定される場合に、ループ処理を終了するための命令である。このＢＣ命令は、図８（ｂ）の５行目及び８行目の２つのＢＺ命令に相当する。本実施の形態では、Ａレジスタ及びＸレジスタに格納された２バイトデータに対するＯＲ判定結果をＣＹフラグ７０８に設定しているため、１つの条件付き分岐命令（ＢＣ命令）のみによってループ終了を判定できる。
【００５５】
図６の５行目のＭＯＶ命令は、ＨＬレジスタの格納値にオフセット値"１"を加算した１６ビットアドレスによって指定されるデータメモリ７２の記憶領域に対して、Ａレジスタに格納されたデータを転送する処理を示している。これは、図８（ｂ）の６行目のＭＯＶ命令と同様である。
【００５６】
図６の６行目から９行目までの命令は、図６の２行目から５行目までの命令の繰り返しであるため説明を省略する。図６の１０行目から１５行目までは、データ転送元アドレスを格納するＤＥレジスタ及びデータ転送先アドレスを格納するＨＬレジスタをインクリメントするための命令である。これらの命令群は、図８（ｂ）の１６行目から２１行目の命令と同様である。また、図６の１６行目の無条件分岐命令（ＢＲ命令）は、図８（ｂ）の２２行目の命令と同様である。
【００５７】
図６の１７行目から２２行目は、２行目から１６行目までのループ処理を抜けた後の後処理を実行させるための命令群である。図６の１７行目は、ループ処理を終了する際の分岐先を示すコメント行である。図６の１８行目は、オフセット値を算出すためのカウンタとして使用されるＢＣレジスタをインクリメントするための命令である。図６の１９行目は、ループ処理の終了時の分岐先を示すコメント行である。図６の２０行目のＲＯＬＷＣ命令は、第１オペランドで指定されるレジスタ（つまりＢＣレジスタ）の内容をＣＹフラグ７０８も含めて、第２オペランドで指定される回数（つまり１回）だけ左方向に回転させる命令である。なお、２０行目のＲＯＬＷＣ命令の実行時には、ＣＹフラグ７０８に"１"がセットされている。したがって、ＲＯＬＷＣ命令の実行によって、ＢＣレジスタの内容が左方向にシフトされるとともに、ＣレジスタのＬＳＢ（Least Significant Bit）に"１"がセットされる。つまり、元のＢＣレジスタの値を１０進数表記でｎとすると、２０行目のＲＯＬＷＣ命令の実行によってＢＣレジスタの値が２ｎ＋１に更新される。
【００５８】
図６の２１行目のＳＫＺ命令及び２２行目のＭＯＶ命令は、２行目から１６行目までのループ処理を抜けた後に、Ａレジスタの格納値が未確定文字列データの最後、つまりＮＵＬＬ文字である場合に、これをデータメモリ７２に転送するための命令である。具体的には、２１行目のＳＫＺ命令は、Ｚフラグ７０６の値が"１"であるときに後続の１命令をスキップする命令である。一方、Ｚフラグ７０６の値が"０"であることは、Ａレジスタの格納データが未確定文字列データの終了を示すＮＵＬＬ文字であることを意味している。したがって、Ｚフラグ７０６の値が"０"のときは、２２行目のＭＯＶ命令によってＡレジスタの値がデータメモリ７２に転送される。
【００５９】
本実施の形態にかかるマイクロコンピュータ２０は、従来のマイクロコンピュータ７０においてＮＵＬＬ文字を検出ために必要であった比較命令の実行が不要となる。つまり、マイクロコンピュータ２０は、未確定文字列データのデータ転送処理を実行する際の実行命令数を削減できるため、従来に比べてデータ転送処理の処理効率を向上させることができる。
【００６０】
さらに、マイクロコンピュータ２０は、データメモリ７２と汎用レジスタファイル７０３の間で２バイト単位でのデータ転送を行うこととしている。文字データの構成単位である１バイト単位より大きな２バイト単位でデータ転送を行うと、転送データ単位の途中で文字列データが終了する可能性がある。このため、２バイト単位でデータメモリ７２から読み出されたデータのどちらがＮＵＬＬ文字であるかを判定する必要がある。
【００６１】
この判定を行うために、マイクロコンピュータ２０は、複数のフラグによってＮＵＬＬ文字位置の識別ができるよう構成されている。具体的には、Ａレジスタ及びＸレジスタに読み出されたデータのうちの少なくとも一方がＮＵＬＬ文字であるか否かの判定結果をＣＹフラグ７０８に設定し、Ｘレジスタに格納されたデータがＮＵＬＬ文字であるか否かの判定結果をＺフラグ７０６に設定する。つまり、２つのフラグのうちの一方（ＣＹフラグ７０８）を２バイトデータに対するＯＲ判定結果に応じてセットする構成としている。
【００６２】
このような構成により、図６の４行目及び８行目のＢＣ命令のように、２バイトデータに対するＯＲ判定に応じてセットされるＣＹフラグ７０８に対する１つの条件付き分岐命令によって、データ転送のためのループ処理の終了を判断することができる。つまり、ループ処理の終了を判断するに際して、Ｚフラグ７０６及びＣＹフラグ７０８に対する２つの条件付き分岐命令を必要としない。したがって、未確定文字列データのデータ転送処理の効率をいっそう向上させることが可能である。
【００６３】
なお、本実施の形態では、２バイト単位でのデータ転送に対応するため、２つの１ビットフラグを使用することにしたが、これを任意のＮバイト単位に拡張することも容易である。具体的には、Ｎバイトの転送データのいずれか１バイトが終了コード（ＮＵＬＬ文字）であった場合にセットされる１つのフラグと、Ｎバイトの転送データのどの位置が終了コード（ＮＵＬＬ文字）であったかを示すＮ−１個のフラグ、合計Ｎ個の１ビットフラグを設ければよい。このように１ビットフラグの１つをＮバイトデータに対するＯＲ判定結果によりセットすることで、データ転送のためのループ処理の終了を１つのフラグの値のみによって判定することができる。
【００６４】
その他の実施の形態．
発明の実施の形態１及び２では、ＮＵＬＬ文字、つまり終了コードの検出結果を保持するフラグレジスタを既存のＺフラグ７０６及びＣＹフラグ７０８と共用させる構成とした。しかしながら、これらと共用させずに、独立したフラグレジスタを設けてもよい。また、これらのフラグレジスタに、汎用レジスタファイル７０３のレジスタを割り当ててもよい。しかしながら、既存のＺフラグ７０６及びＣＹフラグ７０８を利用すれば、上述したＢＺ命令やＢＣ命令など既存の命令セットに用意された命令群を流用することができる。このため、本発明を既存のマイクロコンピュータに適用する際の開発負担を軽減できるという利点がある。
【００６５】
発明の実施の形態１及び２において説明したプログラム例では、汎用レジスタファイル７０３からデータメモリ７２へのデータ転送命令の実行に併せて終了コード検出回路１１０、２１０及び２１１の検出結果をＺフラグ７０６又はＣＹフラグ７０８に出力するものとして説明した。しかしながら、この転送命令に先立って行われるデータメモリ７２から汎用レジスタファイル７０３へのデータ転送命令の実行に併せて、終了コード検出回路１１０、２１０及び２１１の検出結果をＺフラグ７０６又はＣＹフラグ７０８に出力してもよい。
【００６６】
発明の実施の形態１及び２では、未確定文字列データのデータ転送処理を対象としたが、本発明は任意の未確定ブロックデータの転送に適用可能である。この場合は、終了コード判定回路１１０、２１０及び２１１において、データ転送処理の対象となる未確定ブロックデータに応じた終了コードを検出すればよい。
【００６７】
発明の実施の形態１及び２では、マイクロコンピュータ１０及び２０の外部にデータメモリ７２が存在する構成を示した。しかしながら、例えば、データメモリ７２を含めて１チップに集積されたマイクロコンピュータなど、データメモリ７２がマイクロコンピュータ１０及び２０の内部に存在する構成としてもよい。つまり、本発明は、発明の実施の形態１及び２に示した具体的な実装に限られず、様々な実装形態のマイクロコンピュータに適用可能である。
【００６８】
発明の実施の形態１及び２では、データメモリ７２を不確定ブロックデータの転送元及び転送先とするデータ転送処理について説明した。しかしながら、不確定ブロックデータの転送元若しくは転送先、又は転送元及び転送先の両方が命令メモリ７１であってもよい。例えば、命令メモリ７１内にテーブルデータとして格納されたデータを汎用レジスタファイル７０３にロードし、これを他のメモリ（例えば、データメモリ７２）に転送するデータ転送処理に本発明を適用することができる。
【００６９】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００７０】
【図１】発明の実施の形態１にかかるマイクロコンピュータの構成図である。
【図２】発明の実施の形態１にかかるマイクロコンピュータの動作を説明するための図である。
【図３】発明の実施の形態１にかかるマイクロコンピュータにデータ転送処理を行わせるためのプログラム記述例である。
【図４】発明の実施の形態２にかかるマイクロコンピュータの構成図である。
【図５】発明の実施の形態２にかかるマイクロコンピュータの動作を説明するための図である。
【図６】発明の実施の形態２にかかるマイクロコンピュータにデータ転送処理を行わせるためのプログラム記述例である。
【図７】従来のマイクロコンピュータの構成図である。
【図８】従来のマイクロコンピュータにデータ転送処理を行わせるためのプログラム記述例である。
【符号の説明】
【００７１】
１０、２０  マイクロコンピュータ
１０１、２０１  実行制御部
１１０、２１０、２１１  終了コード判定回路
１１１、２１３、２１４  セレクタ
２１２  ＯＲ回路
７１  命令メモリ
７２  データメモリ
７３  アドレスバス
７４  データバス
７０２  プログラムカウンタ（ＰＣ）
７０３  汎用レジスタファイル
７０４  算術論理演算ユニット（ＡＬＵ）
７０５  ゼロ判定回路
７０６  ゼロフラグ（Ｚフラグ）
７０７、７０９  セレクタ
７０８  キャリーフラグ（ＣＹフラグ）
Ｒ０〜Ｒ１５  汎用レジスタ
【図１】
2008083762.tif 000003
【図２】
2008083762.tif 000004
【図３】
2008083762.tif 000005
【図４】
2008083762.tif 000006
【図５】
2008083762.tif 000007
【図６】
2008083762.tif 000008
【図７】
2008083762.tif 000009
【図８】
2008083762.tif 000010