(57)【特許請求の範囲】
【請求項１】
第１のバイト数Ｂ１のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換元プロセッサで実行可能な変換元プログラムを、第２のバイト数Ｂ２のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換後プロセッサで実行可能な変換後プログラムに変換するアセンブラプログラムのためのアドレス記述変換システムであって、
前記変換元プログラムを入力とし、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を前記変換元プログラムの中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍（Ｌ＝Ｂ１／Ｂ２であり、２以上の整数）する記述に置き換える第１のアドレス記述置換手段と、
該第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換え、レジスタに格納したアドレスを使ってメモリから値を読み込む処理を伴う命令Ｉ１あるいはレジスタに格納したアドレスを使ってメモリへ値を書き込む処理を伴う命令Ｉ２があれば、該命令Ｉ１およびＩ２が参照するアドレスをＬ倍する命令を該命令Ｉ１およびＩ２の前のサイクルで実行されるよう挿入し、さらに該命令Ｉ１およびＩ２が参照するアドレスを１／Ｌ倍する命令を該命令Ｉ１およびＩ２の後のサイクルで実行されるよう挿入するアドレス記述変換手段と、
該アドレス記述変換手段で処理済みのプログラムを、前記変換後プログラムとして出力する出力手段とを備えたことを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項２】
請求項１記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
前記アドレス記述変換手段が、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換える第２のアドレス記述置換手段と、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、レジスタに格納したアドレスを使ってメモリから値を読み込む処理を伴う命令Ｉ３あるいはレジスタに格納したアドレスを使ってメモリへ値を書き込む処理を伴う命令Ｉ４があれば、該命令Ｉ３およびＩ４が参照するアドレスをＬ倍する命令を該命令Ｉ３およびＩ４の前のサイクルで実行されるよう挿入し、さらに該命令Ｉ３およびＩ４が参照するアドレスを１／Ｌ倍する命令を該命令Ｉ３およびＩ４の後のサイクルで実行されるよう挿入するアドレス変換命令挿入手段とを備えたことを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項３】
第１のバイト数Ｂ１のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換元プロセッサで実行可能な変換元プログラムを、第２のバイト数Ｂ２のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換後プロセッサで実行可能な変換後プログラムに変換するアセンブラプログラムのためのアドレス記述変換システムであって、
前記変換元プログラムを入力とし、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を前記変換元プログラムの中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍（Ｌ＝Ｂ１／Ｂ２であり、２以上の整数）する記述に置き換える第１のアドレス記述置換手段と、
該第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換え、アドレスを格納するアドレス専用レジスタに対してシンボル文字列や数値で記述された値を転送する命令があれば、その値を示すシンボル文字列や数値をそのＬ倍の値にする記述へ置き換え、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令Ｉ５があれば、転送元の値をＬ倍する命令を該命令Ｉ５の前のサイクルで実行されるように挿入し、さらに転送元の値を１／Ｌ倍する命令を該命令Ｉ５の後のサイクルで実行されるよう挿入し、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令Ｉ６があれば、該アドレス専用レジスタに格納されたアドレスを１／Ｌ倍する命令を該命令Ｉ６の前のサイクルで実行されるように挿入し、さらに該アドレス専用レジスタに格納された値をＬ倍する命令を該命令Ｉ６の後のサイクルで実行されるよう挿入するアドレス記述変換手段と、
該アドレス記述変換手段で処理済みのプログラムを、前記変換後プログラムとして出力する出力手段とを備えたことを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項４】
請求項３記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
前記アドレス記述変換手段が、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換える第２のアドレス記述置換手段と、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してシンボル文字列や数値で記述された値を転送する命令があれば、その値を示すシンボル文字列や数値をそのＬ倍の値にする記述へ置き換える第３のアドレス記述置換手段と、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令Ｉ７があれば、転送元の値をＬ倍する命令を該命令Ｉ７の前のサイクルで実行されるように挿入し、さらに転送元の値を１／Ｌ倍する命令を該命令Ｉ７の後のサイクルで実行されるよう挿入する第１のアドレス変換命令挿入手段と、
前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、第１のアドレス記述置換手段が出力した文字列において、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令Ｉ８があれば、該アドレス専用レジスタに格納されたアドレスを１／Ｌ倍する命令を該命令Ｉ８の前のサイクルで実行されるように挿入し、さらに該アドレス専用レジスタに格納された値をＬ倍する命令を該命令Ｉ８の後のサイクルで実行されるよう挿入する第２のアドレス変換命令挿入手段とから構成されることを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項５】
請求項４記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
第１のアドレス変換命令挿入手段が、前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令Ｉ９があれば、該アドレス専用レジスタに格納された値をＬ倍する命令を該命令Ｉ９の後のサイクルで実行されるよう挿入する構成を有することを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項６】
請求項４記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
前記第２のアドレス変換命令挿入手段が、前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令Ｉ１０があれば、転送後の値を１／Ｌ倍する命令を該命令Ｉ１０の後のサイクルで実行されるように挿入する構成を有することを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項７】
請求項４記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
前記第１のアドレス変換命令挿入手段が、前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令Ｉ１１があれば、該アドレス専用レジスタに格納された値をＬ倍する命令を該命令Ｉ１１の後のサイクルで実行されるよう挿入する構成を有し、
前記第２のアドレス変換命令挿入手段が、前記第１のアドレス記述置換手段での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令Ｉ１２があれば、転送後の値を１／Ｌ倍する命令を該命令Ｉ１２の後のサイクルで実行されるように挿入する構成を有することを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項８】
請求項１乃至７の何れか１項に記載のアセンブラプログラムのためのアドレス記述変換システムにおいて、
前記アドレス記述変換手段によって挿入される命令の中から、不必要な命令を削除する不要命令削除手段を備えたことを特徴とするアセンブラプログラムのためのアドレス記述変換システム。
【請求項９】
コンピュータを、第１のバイト数Ｂ１のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換元プロセッサで実行可能な変換元プログラムを、第２のバイト数Ｂ２のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換後プロセッサで実行可能な変換後プログラムに変換するアセンブラプログラムのためのアドレス記述変換システムとして機能させるためのプログラムであって、
前記コンピュータを、
前記変換元プログラムを入力とし、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を前記変換元プログラムの中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍（Ｌ＝Ｂ１／Ｂ２であり、２以上の整数）する記述に置き換える第１のアドレス記述置換手段、
該第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換え、レジスタに格納したアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはレジスタに格納したアドレスを使ってメモリへ値を書き込む処理を伴う命令Ｉ１３があれば、該命令Ｉ１３が参照するアドレスをＬ倍する命令を該命令Ｉ１３の前のサイクルで実行されるよう挿入し、さらに該命令Ｉ１３が参照するアドレスを１／Ｌ倍する命令を該命令Ｉ１３の後のサイクルで実行されるよう挿入するアドレス記述変換手段、
該アドレス記述変換手段で処理済みのプログラムを前記変換後プログラムとして出力する出力手段として機能させるためのプログラム。
【請求項１０】
コンピュータを、第１のバイト数Ｂ１のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換元プロセッサで実行可能な変換元プログラムを、第２のバイト数Ｂ２のデータに対して一つのアドレスを割り当てるアドレス方式を採用している変換後プロセッサで実行可能な変換後プログラムに変換するアセンブラプログラムのためのアドレス記述変換システムとして機能させるためのプログラムであって、
前記コンピュータを、
前記変換元プログラムを入力とし、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を前記変換元プログラムの中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍（Ｌ＝Ｂ１／Ｂ２であり、２以上の整数）する記述に置き換える第１のアドレス記述置換手段、
該第１のアドレス記述置換手段での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換え、アドレスを格納するアドレス専用レジスタに対してシンボル文字列や数値で記述された値を転送する命令があれば、その値を示すシンボル文字列や数値をそのＬ倍の値にする記述へ置き換え、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令Ｉ１４があれば、転送元の値をＬ倍する命令を該命令Ｉ１４の前のサイクルで実行されるように挿入し、さらに転送元の値を１／Ｌ倍する命令を該命令Ｉ１４の後のサイクルで実行されるよう挿入し、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令Ｉ１５があれば、該アドレス専用レジスタに格納されたアドレスを１／Ｌ倍する命令を該命令Ｉ１５の前のサイクルで実行されるように挿入し、さらに該アドレス専用レジスタに格納された値をＬ倍する命令を該命令Ｉ１５の後のサイクルで実行されるよう挿入するアドレス記述変換手段、
該アドレス記述変換手段で処理済みのプログラムを前記変換後プログラムとして出力する出力手段として機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、あるプロセッサの命令記述を別のプロセッサの命令記述へ変換する技術に関する。
【０００２】
【従来の技術】
プロセッサは、処理内容を複数の命令からなるプログラムとして与えることができる計算機である。プログラムの最小構成単位は命令である。命令には加算や減算、プロセッサに接続されたメモリからデータを読み込んだり、メモリへデータを書き出したりする処理が含まれる。通常、命令はプロセッサによって異なる。従って、あるプロセッサ用の命令で記述されたプログラムは他のプロセッサでは動作しない。これを動作させるには、プログラムに記述された命令を目的のプロセッサの命令へ変換する必要がある。
【０００３】
変換の方法は大きく分けて２種類ある。ひとつはバイナリコードレベルでの変換であり、もうひとつはソースコードレベルの変換である。バイナリコードレベルでの変換に関しては、IBM社(http://www.ibm.com)のDAISY [文献１, ２]， DEC社のFX!32 [文献３]，Transmeta 社 (http://www.transmeta.com) の Crusoe プロセッサ[文献４]，Transitive 社 (http://www.transitive.com) の Dynamite [文献５] 等が知られている。ソースコードレベルの変換に関しては、 アセンブリ言語で記述されたソースコードの変換の例として[文献６]や[文献７]がある。
【０００４】
・［文献１］；K. Ebcioglu, E. Altman, M. Gschwind, and S. Sathaye, "Dynamic binary translation and optimization," IEEE Transactions on Computers, Vol. 50, Issue 6, pp. 529-548, Jun. 2001.
・［文献２］；Http://oss.software.ibm.com/developerworks/opensource/daisy/
・［文献３］；A. Chernoff, M. Herdeg, R. Hookway, C. Reeve, N. Rubin, T. Tye, S.B. Yadavalli, and J. Yates, "FX!32 A Profile-Directed Binary Translator," IEEE Micro, vol. 18, no. 2, pp. 56-64, Mar. 1998.
・［文献４］；Alexander Klaib, "The Technology Behind Crusoe Processors," Technical report, Transmeta Corp., Santa Clara, Calif. USA, Jan. 2000, available at http://www.transmeta.com.
・［文献５］；"The Technology Behind Crusoe Processors," Product data sheet, Transitive  Technologies Ltd., 2001, available at http://www.transitives.com.
・［文献６］；M. F. Smith and B. E. Luff, "Automatic assembler source translation from the Z80 to the MC6809," IEEE Micro, Vol. 4, No 2, pp. 3-9, Apr. 1984.
・［文献７］；Texas Instruments Europe, "TMS320C5x to TMS320C54x Translation Utility," Literature Number: BPRA075, Feb. 1998.
【０００５】
IBM 社のDAISY は、Intel 社の x86 アーキテクチャや IBM 社の PowerPC アーキテクチャ用のバイナリコードを、実行時にIBM 社のVLIW (very long instruction word) プロセッサへ変換するソフトウェアである[文献１, ２]。 DEC 社の FX!32 は x86 アーキテクチャ用のバイナリコードを、DEC 社の Alphaプロセッサ上で実行できるように変換するソフトウェアである[文献３]。 Transmeta社の Crusoe というプロセッサは Intel 社の x86 アーキテクチャとは異なる命令セットをもっているにもかかわらず、Crusoe はプログラム実行時に x86 命令を Crusoe 命令へバイナリレベルで変換することができるので、 x86 アーキテクチャ用に記述されたプログラムを実行することができる[文献３]。Transitive 社は、あるプロセッサ用のバイナリコードを別のプロセッサ用のバイナリコードへ変換するソフトウェアを提供している[文献５]。
【０００６】
一方、[文献６] では Zilog 社 (http://www.zilog.com) の Z80 プロセッサ用の アセンブリ言語で記述されたソースコードを Motorola 社 (http://www.motorola.com) の MC6809用 プロセッサ用のアセンブリ言語で記述されたソースコードへ変換する技術について述べられている。 [文献７] では Texas Instruments 社 (http://www.ti.com) の TMS320C5x プロセッサ用のアセンブリ言語で記述されたソースコードを 同社の TMS320C54x プロセッサ用のアセンブリ言語で記述されたソースコードへ変換する技術について述べられている。
【０００７】
バイナリレベル変換のメリットは、一度あるプロセッサ用に作成したバイナリコードに何の変更も加えることなく、それを別のプロセッサで実行できることである。元のソースコードがなくてもバイナリコードだけがあればよい。変換後のバイナリコードはそれを実行するプロセッサによって解釈される。プログラムの実行時に変換が行われる場合、ユーザが変換に関わることはなく、プログラムが変換されていることすら意識する必要がない。
【０００８】
一方、バイナリレベル変換のデメリットは変換後バイナリコードをユーザが修正することが非常に困難であることである。なぜなら、変換後バイナリコードを編集するにはそれを逆アセンブルすることが必要であるが、そうして得られるアセンブリソースコードは非常に理解しがたいからである。もし、変換後バイナリコードの実行速度にユーザが満足できないとしても、それを改善することはほとんど不可能である。
【０００９】
もしユーザが変換後バイナリコードの実行時間をできるだけ短くしたい場合、
バイナリレベル変換は適していない。それよりはソースコードレベルの変換が適している。もしユーザが変換元プログラムのソースコードをもっているなら、それをターゲットとなるプロセッサ用に再コンパイルできる。変換元プログラムが C言語などの高級言語で記述されていれば、ターゲットプロセッサへの再コンパイルは非常に簡単である。変換元プログラムがアセンブリ言語で記述されている場合、そのソースコードをターゲットプロセッサのアセンブリ言語で記述されたソースコードへ変換できさえすれば、変換後にユーザが最適化することも可能である。
【００１０】
これまで述べてきた従来のコード変換技術では、アドレス体系が同一のプロセッサを対象にしていた。プロセッサは一般に１バイト(８ビット)のデータごとにひとつのアドレスをつけている。これはバイトアドレス方式と呼ばれる。参考文献として示した従来例のほとんどはバイトアドレス方式にもとづくプロセッサ間でコードを変換する技術である。一方、複数バイトのデータごとにアドレスをつけるプロセッサもある。たとえば、Texas Instruments 社の TMS320C5x やTMS320C54x という信号処理プロセッサは、２バイト(１６ビット，１ワード)ごとにアドレスをつけている。これは一般にワードアドレス方式と呼ばれる。
【００１１】
アドレス体系が異なるプロセッサ間でもコード変換は理論的に可能ではあるが、そのようなコード変換に関する技術はこれまで報告されていない。例えばワードアドレス方式のプロセッサ用に記述されたプログラムをバイトアドレス方式のプロセッサ用のプログラムへ変換することは可能であるが、このような変換に関する報告例はない。報告例がない理由のひとつは、アドレス体系が異なるプロセッサ間でプログラムを変換する場合、プログラムに含まれるアドレス記述を変換することが困難だったからである。従来は元プログラムに含まれる全てのアドレス記述を自動的に効率よく変換できなかった。変換後プログラムの実行時間やコードサイズが元プログラムに比べて著しく劣化したり、アドレス記述変換を手作業で行う必要があったために、アドレス体系が異なるプロセッサ間での効率のよいコード変換ができなかった。
【００１２】
アドレス体系が異なるプロセッサ間でプログラムを変換する場合、従来はエミュレーションという技術を用いていた。エミュレーションとはあるプロセッサ用に記述されたプログラムを別のプロセッサで実行するための技術である。例えば、エミュレーションを使って、プロセッサA用のプログラムをプロセッサBで実行する場合、まず仮想的なプロセッサAをプロセッサB上に構築する。そして、その仮想的プロセッサAがプロセッサA用のプログラムを実行する。エミュレーションは、仮想的プロセッサを介在して他のプロセッサ用のプログラムを実行することになるので、プログラムの実行速度は劣化する。プログラムを高速に実行するためには、プログラムを変換して、プロセッサAがプログラムを直接実行する方がよいのは明らかである。
【００１３】
【発明が解決しようとする課題】
複数バイトのデータに対してひとつのアドレスを割り当てるワードアドレス方式にもとづくプロセッサから１バイトのデータに対してひとつのアドレスを割り当てるバイトアドレス方式にもとづくプロセッサへプログラムを変換する場合に、元プログラムに含まれる全てのアドレス記述を自動的に効率よく変換できなかったので、変換後プログラムの実行時間やコードサイズが元プログラムに比べて著しく劣化したり、アドレス記述変換を手作業で行う必要があった。
【００１４】
本発明はこの点に注目し、アドレス体系が互いに異なる二つのプロセッサにおけるコード変換において、効率よくアドレス記述を変換することを目的とする。具体的には、第１のバイト数のデータに対してひとつのアドレスを割り当てるアドレス方式に基づく変換元プロセッサ用の変換元プログラムから、第２のバイト数のデータに対してひとつのアドレスを割り当てるアドレス方式に基づく変換後プロセッサ用の変換後プログラムへ変換において、変換後プログラムの実行時間やコードサイズに関して、効率よくアドレス記述を変換することを目的とする。
【００１５】
【課題を解決するための手段】
本発明の文字列変換システム（図１の１００）は、上記目的を達成するため、文字列置換手段（図１の１１０）と、文字列置換手段（図１の１２１）と、文字列挿入手段（図１の１２２）と、不要命令削除手段（図１の１３０）と、出力手段（図１の１４０）とを持つ。
【００１６】
文字列変換システム（図１の１００）には変換元プログラムが入力される。文字列置換手段（図１の１１０）は、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を、上記入力された変換元プログラム中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍［Ｌ＝（変換元プロセッサが一つのアドレスを割り当てるデータのバイト数）／（変換後プロセッサが一つのアドレスを割り当てるバイト数）であり、２以上の整数）］する記述に置き換える。
【００１７】
文字列置換手段（図１の１２１）は、第１の文字列置換手段（図１の１１０）での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使っメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換える。
【００１８】
文字列挿入手段（図１の１２２）は、第１の文字列置換手段（図１の１１０）での置き換えが済んだプログラム中に、プロセッサの汎用レジスタに格納したアドレスを使ってメモリから値を読み込む処理を伴う命令あるいは汎用レジスタに格納したアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、該命令が参照するアドレスを格納した汎用レジスタをＬ倍する命令を該命令の前のサイクルで実行されるよう挿入し、さらに該汎用レジスタを１／Ｌ倍する命令を該命令の後のサイクルで実行されるよう挿入する。
【００１９】
不要命令削除手段（図１の１３０）は、文字列置換手段（図１の１２１）と文字列挿入手段（図１の１２２）によって処理された文字列を含む全ての文字列から不必要な命令を削除する。出力手段（図１の１４０）は、不要命令削除手段（図１の１３０）によって削除されなかった命令を含む全ての文字列を出力する。
【００２０】
また、本発明の文字列変換システム（図２の２００）は、上記目的を達成するため、第１の文字列置換手段（図２の２１０）と、第２の文字列置換手段（図２の２２１）と、第３の文字列置換手段（図２の２２２）と、第１の文字列挿入手段（図２の２２３）と、第２の文字列挿入手段（図２の２２４）と、不要命令削除手段（図２の２３０）と、出力手段（図２の２４０）とを持つ。
【００２１】
文字列置換手段（図２の２１０）は、他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列を参照する記述を入力された変換元プログラム中から見つけ、そのシンボル文字列が分岐命令の分岐先を示すシンボル文字列でなければ、そのシンボル文字列を、そのシンボル文字列に割り当てられるアドレスを１／Ｌ倍のアドレスにする記述へ置き換える。
【００２２】
文字列置換手段（図２の２２１）は、文字列置換手段（図２の２１０）での置き換えが済んだプログラム中に、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む処理を伴う命令あるいはシンボル文字列や数値で記述されたアドレスを使ってメモリへ値を書き込む処理を伴う命令があれば、メモリのアドレスを示すシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換える。
【００２３】
文字列置換手段（図２の２２２）は、文字列置換手段（図２の２１０）での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してシンボル文字列や数値で記述された値を転送する命令があればそれらシンボル文字列や数値をそのＬ倍のアドレスにする記述へ置き換える。
【００２４】
文字列挿入手段（図２の２２３）は、文字列置換手段（図２の２１０）での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタに対してアドレス専用レジスタ以外の場所から値を転送する命令があれば、該アドレス専用レジスタに格納された値をＬ倍する命令を該命令の後のサイクルで実行されるよう挿入する。もしくは転送元の値をＬ倍する命令を該命令の前のサイクルで実行されるように挿入し、転送元の値を１／Ｌ倍する命令を該命令の後のサイクルで実行されるよう挿入する。
【００２５】
文字列挿入手段（図２の２２４）は、文字列置換手段（図２の２１０）での置き換えが済んだプログラム中に、アドレスを格納するアドレス専用レジスタからアドレス専用レジスタ以外の場所に対して値を転送する命令があれば、転送後の値を１／Ｌ倍する命令を該命令の後のサイクルで実行されるように挿入する。もしくは該アドレス専用レジスタに格納された値を１／Ｌ倍する命令を該命令の前のサイクルで実行されるように挿入し、さらに該アドレス専用レジスタに格納された値をＬ倍する命令を該命令の後のサイクルで実行されるように挿入する。
【００２６】
不要命令削除手段（図２の２３０）は、文字列変換手段（図２の２２０）によって挿入された命令の中から、不要な命令を探し出し削除する。出力手段（図２の２４０）は不要命令削除手段（図２の２３０）が削除しなかった命令を含む全ての文字列を出力する。
【００２７】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２８】
【構成の説明】
プロセッサのプログラムにおいて、アドレスを表す値は一般にベースアドレスとオフセットアドレスとにわけられる。一般にベースアドレスはシンボル文字列として参照される。例えばメモリ上の配列の先頭アドレスを参照するために、配列の名称（シンボル文字列）が使用される。オフセットアドレスは数値で直接記述されたり、もしくは数値を割り当てたシンボル文字列で記述される。あるいは、配列の名称として自動的にアドレスを与えられるシンボル文字列どおしの差分としてオフセットアドレスが表されることもある。
【００２９】
以降では、Ｌバイト（Ｌは２以上の整数）のデータに対してひとつのアドレスを割り当てるアドレス方式をワードアドレス方式と呼ぶことにする。ワードアドレスを使用するプロセッサを仮にプロセッサW、バイトアドレスを使用するプロセッサを仮にプロセッサBとする。プロセッサ W 用に記述されたプログラムでは、リンカ等のツールが自動的に配列の名称を示すシンボル文字列にワードアドレスを割り当てる。プロセッサB用にアセンブリ言語で記述されたソースコードでは、リンカ等のツールが自動的に配列の名称を示すシンボル文字列にバイトアドレスを割り当てる。
【００３０】
仮に、プロセッサWとプロセッサBがアドレス体系だけを除いて同一のアーキテクチャであって、全く同一の命令セットをもっているとする。この場合、プロセッサWの命令が記述されたプログラムを、そのままの状態でプロセッサB用のプログラムとして解釈すると、リンカなどによって自動的にアドレスが割り当てられるシンボル文字列だけがバイトアドレスをもち、それ以外のアドレスを示す数値やシンボル文字列はワードアドレスを保持することになる。
【００３１】
仮にプロセッサWとプロセッサBが全く同一の命令セットを持っていても、アドレス体系が異なるのでプロセッサWの命令が記述されたプログラムをプロセッサB用のプログラムとして解釈するには、アドレスに関する記述を変換する必要がある。仮にプロセッサWとプロセッサBが異なる命令セットを持っていたとしたら、個々の命令を変換することに加えて、やはりアドレスに関する記述を変換する必要がある。
【００３２】
本発明は、あるアドレス方式のプログラムを他のアドレス方式のプログラムに変換する際（例えば、ワードアドレス方式にもとづくプロセッサWの命令が記述されたプログラムを、バイトアドレス方式にもとづくプロセッサB用のプログラムへ変換する際や、一つのアドレスを割り当てるデータのバイト数が異なり、その比が２以上の整数であるワードアドレス方式のプロセッサ間でプログラムを変換する際等）に必要となる、プログラムの中のアドレス記述を変換するシステムである。
【００３３】
まず、プロセッサWとプロセッサBが全く同一の命令セットを持っていて、 アセンブリ言語仕様も全く同じで、アドレス体系だけが異なる場合について、 アドレス記述を変換するシステムについて述べる。
【００３４】
図１を参照すると、本発明にかかる文字列変換システム１００の第１の実施の形態は、文字列置換手段１１０、文字列変換手段１２０、不要命令削除手段１３０、出力手段１４０及び記録媒体Ｋ１から構成される。文字列変換手段１２０は、文字列置換手段１２１と、文字列挿入手段１２２とから構成される。記録媒体Ｋ１は、ディスク、半導体メモリ、その他の記録媒体であり、コンピュータを文字列変換システム１００として機能させるためのプログラムが記録されている。このプログラムは、コンピュータによって読み取られ、その動作を制御することで、コンピュータ上に、文字列置換手段１１０、文字列変換手段１２０、不要命令削除手段１３０、出力手段１４０を実現する。
【００３５】
まず、文字列置換手段１１０について説明する。文字列置換手段１１０は、リンカなど他のソフトウェアによって自動的にアドレスが割り当てられるシンボル文字列がプログラムの中で参照されたら、そのシンボル文字列に割り当てられるアドレスをその1/L倍のアドレスにする記述へ変換する。ここで、LはプロセッサWにおいてアドレスが割り当てられる最小のデータ幅を示すバイト数である。例えば、２バイトのデータに対してひとつアドレスが割り当てられる場合、Ｌは２である。
【００３６】
例えば、変換元プログラムにおいて、他のソフトウェアによってワードアドレスが自動的に割り当てられるシンボル文字列labelが参照されている場合、変換後プログラムでは labelを(label/L) へ変換する。あるいはxを1/L倍する関数div(x,L)を定義して、labelをdiv(label,L)へ変換する。変換後プログラムではlabel がバイトアドレスをもつので、(label/L) やdiv(x,L)は変換元プロセッサにおけるワードアドレスを示す。
【００３７】
ただし、分岐命令においてプログラムの分岐先を示すために使用されているシンボル文字列は置き換えの対象とされない。分岐命令とはプログラムの実行の流れを切り替える命令である。
【００３８】
次に、文字列変換手段１２０について説明する。文字列変換手段１２０は、文字列置換手段１１０の処理が終了したプログラムの中のアドレス記述を含んだ命令を変換する。アドレス記述を含んだ命令とは、メモリからデータを読み込む処理を伴う命令、メモリへデータを書き込む処理を伴う命令などである。
【００３９】
以下、文字列変換手段１２０について詳しく述べる。文字列変換手段１２０の動作を説明するには、プロセッサのアーキテクチャや命令セットを仮定する必要がある。そこで、図３にプロセッサWおよびプロセッサBのレジスタ構成を示す。プロセッサWおよびプロセッサBはN個の汎用レジスタとM個のアドレス専用レジスタを持つ。NとMは0以上の整数である。ここでは汎用レジスタRnと呼ぶことにする。nには0からN-1のいずれかの数字が当てはまる。Nが0の場合には汎用レジスタRnは存在しないとする。ここではアドレス専用レジスタをAmと呼ぶことにする。mには0からM-1のいずれかの数字が当てはまる。Mが0の場合にはアドレス専用レジスタAmが存在しないとする。汎用レジスタRnはプロセッサが計算に使用する値や計算結果を格納する場所である。また汎用レジスタRnにはメモリ上のデータや命令の位置を示すアドレスを格納することもできる。一方アドレス専用レジスタAmはメモリ上のデータや命令の位置を示すアドレスを格納する場所である。
【００４０】
本実施の形態にかかる文字列変換システム１００では、プロセッサがメモリからデータを読み込んだりメモリへデータを書き込んだりする際に使用するアドレスに関して、メモリのアドレスの一部または全てをシンボル文字列や数値で直接記述したり、汎用レジスタにメモリのアドレスの一部または全てを格納しておくと仮定する。
【００４１】
文字列変換手段１２０において、処理の対象となるプロセッサの命令はメモリからデータを読み込む処理を伴う命令と、メモリへデータを書き込む処理を伴う命令である。これらの命令において、データの場所を示すアドレスがどのように命令の中に記述されているかで処理内容が異なる。以下に処理内容を決定するルールを示す。
【００４２】
ルール(1)
「アドレスの一部または全てがシンボル文字列や数値で記述されているなら、メモリのアドレスを示すシンボル文字列や数値をそのL倍のアドレスにする記述へ置き換える。」
ルール(2)
「アドレスの一部または全てが汎用レジスタ Rn に格納されているなら、汎用レジスタRnに格納されているアドレスをL倍する命令を当該命令の前のサイクルで実行されるよう挿入し、さらに該汎用レジスタRnに格納されているアドレスを1/L倍する命令を該命令の後のサイクルで実行されるよう挿入する。」
【００４３】
文字列変換手段１２０は、文字列置換手段１２１と、文字列挿入手段１２２とを含んでいる。ルール(1)に該当する命令があれば、文字列置換手段１２１がルール(1)に記述された処理を実行する。ルール(2)に該当する命令があれば、文字列挿入手段１２２がルール(2)に記述された処理を実行する。複数のルールに該当する命令があれば、 該当する全てのルールに記述された処理が実行される。
【００４４】
プロセッサWおよびプロセッサBの基本命令セット２１(図４)を使って、上記ルール(1)、(2)の具体例について説明する。図４には変換対象となる命令と変換に必要な命令が示されている。図４に示した命令を参照するために、図４の命令参照記号を使用する。命令の記述方法はプロセッサによって異なるし、命令が記述されるファイル形式によっても異なるが、ここでは図４に示した記述例を使って説明する。
【００４５】
命令LDST0の変換方法
命令LDST0は、シンボル文字列や数値によって記述されたアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(1)を適用する。命令LDST0において、アドレスの一部または全てを示すシンボル文字列や数値をL倍する記述へ変換する。例えば、
R0=＊[label+K]
を
R0=＊[(label+K)＊L]
へ変換する。ここでlabelはリンカなど他のソフトウェアによってアドレスが自動的に割り当てられるシンボル文字列であり、Kは任意の定数を表すシンボル文字列または数値である。
【００４６】
命令LDST1の変換方法
命令LDST1は、汎用レジスタが示すアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(2)を適用する。 命令 LDST1において、アドレスの一部または全てを保持する汎用レジスタを L倍する命令を変換対象命令の前のサイクルで実行されるように挿入する。さらにアドレスの一部または全てを保持する汎用レジスタを 1/L 倍する命令を変換対象命令の後のサイクルで実行されるように挿入する。例えばL=2の場合は、
R0=＊[R4]
を
R4=R4+R4
R0=＊[R4]
R4=R4>>1
の三つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令 R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。
【００４７】
命令LDST2の変換方法
命令LDST2 は、シンボル文字列や数値によって記述されたアドレスと汎用レジスタの和が示すアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(1)およびルール(2)を適用する。命令LDST2において、アドレスの一部または全てを示すシンボル文字列や数値をL倍する記述へ変換する。さらにアドレスの一部または全てを保持する汎用レジスタをL倍する命令を変換対象命令の前のサイクルで実行されるように挿入する。 さらにアドレスの一部または全てを保持する汎用レジスタを1/L倍する命令を変換対象命令の後のサイクルで実行されるように挿入する。例えばL=2の場合は、
R0=＊[R4+K]
を
R4=R4+R4
R0=＊[R4+(K)＊2]
R4=R4>>1
の三つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令 R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。
【００４８】
命令LDST3の変換方法
命令LDST3は、ある汎用レジスタと別の汎用レジスタの和で示されるアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(2)を適用する。命令LDST3において、アドレスの一部または全てを保持する汎用レジスタをそれぞれL倍する命令を変換対象命令の前のサイクルで実行されるように挿入する。さらにアドレスの一部または全てを保持する汎用レジスタをそれぞれ1/L倍する命令を変換対象命令の後のサイクルで実行されるように挿入する。例えばL=2 の場合は、
R0=＊[R4+R5]
を
R4=R4+R4
R5=R5+R5
R0=＊[R4+R5]
R4=R4>>1
R5=R5>>1
の五つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。同様に、加算命令R5=R5+R5の代わりに左シフト命令R5=R5<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。同様に、右1ビットシフト命令の代わりにR4を1/2倍する他の命令を使用してもよい。
【００４９】
命令ADD1の変換方法
命令ADD1は、汎用レジスタに格納された値と、メモリからロードした値とを加算してその結果を汎用レジスタへ転送する命令である。命令ADD1において、例えばメモリからロードすべきデータのアドレスの一部または全てがシンボル文字列や数値で記述される場合、メモリのアドレスを示すシンボル文字列や数値をそのL倍のアドレスにする記述へ置き換える。あるいは命令ADD1において、例えばメモリからロードすべきデータのアドレスの一部または全てが汎用レジスタに格納される場合、汎用レジスタに格納されたアドレスをL倍する命令を変換対象命令の前のサイクルで実行されるように挿入し、さらに汎用レジスタに格納されたアドレスを1/L倍する命令を変換対象命令の後のサイクルで実行されるように挿入する。
【００５０】
命令 ADD1 において、例えばシンボル文字列や数値によってアドレスが記述される場合、ルール(1)を適用する。例えば、
R0=R0+＊[label+K]
を
R0=R0+＊[(label+K)＊L]
へ変換する。ここで、labelはリンカなど他のソフトウェアによってアドレスが自動的に割り当てられるシンボル文字列であり、Kは任意の定数を表すシンボル文字列または数値である。
【００５１】
命令ADD1において、例えばL=2で、汎用レジスタ R4 にアドレスが格納される場合、ルール(2)を適用する。例えば、
R0=R0+＊[R4]
を
R4=R4+R4
R0=R0+＊[R4]
R4=R4>>1
の三つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令 R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。
【００５２】
命令ADD1において、例えばL=2で、汎用レジスタR4とシンボル文字列Kの和でアドレスが表される場合、ルール(1)およびルール(2)を適用する。例えば、
R0=R0+＊[R4+K]
を
R4=R4+R4
R0=R0+＊[R4+(K)＊2]
R4=R4>>1
の三つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令 R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。
【００５３】
命令ADD1において、例えばL=2で、汎用レジスタR4と汎用レジスタR5の和でアドレスが表される場合、ルール(2)を適用する。例えば、
R0=R0+＊[R4+R5]
を
R4=R4+R4
R5=R5+R5
R0=R0+＊[R4+R5]
R4=R4>>1
R5=R5>>1
の五つの命令へ変換する。ここでは汎用レジスタR4を2倍するために加算命令 R4=R4+R4を使用したが、左シフト命令R4=R4<<1を使用してもよい。同様に、加算命令R5=R5+R5の代わりに左シフト命令R5=R5<<1を使用してもよい。汎用レジスタR4を1/2倍するために右1ビットシフト命令を使用したが、R4を1/2倍する他の命令を使用してもよい。同様に、右1ビットシフト命令の代わりにR4を1/2倍する他の命令を使用してもよい。
【００５４】
図４には記述されていない他の命令、例えば減算命令、乗算命令、除算命令、シフト命令、論理演算命令などにおいて、メモリから値を読み込んだり、あるいはメモリへ値を書き込んだりする処理を伴う命令があれば、その命令に含まれるアドレスに関する記述を上記のように変換する。
【００５５】
図４に示した命令のうちこれまでに変換方法を述べていない命令 (MV0 命令、ADD0命令、SHFT0命令 ) は、ルール(1)にも ルール(2)にも該当しないので、何も変更されない。
【００５６】
次に、不要命令削除手段１３０について説明する。不要命令削除手段１３０は、文字列変換手段１２０の処理結果を引き取って、プログラムを解析し、不要な命令を削除する。
【００５７】
文字列変換手段１２０によって変換されたプログラムは不必要な命令を含む場合がある。不要な命令はプログラムの実行時間やコードサイズを増加させるので好ましくない。そこで不要命令を削除する。ここでいう不要命令とは、文字列変換手段１２０によって挿入された命令であって、プログラムの実行結果に影響を与えない命令である。
【００５８】
例えば、文字列変換手段１２０が、あるプログラムに加算命令R0=R0+R0(汎用レジスタR0と汎用レジスタR0の和を汎用レジスタR0へ格納する)を挿入し、その命令の直後に右１ビットシフト命令 R0=R0>>1 (汎用レジスタR0を右１ビットシフトして再び汎用レジスタ R0 へ格納する) を挿入したとする。そして、加算命令 R0=R0+R0の実行前も実行後も汎用レジスタR0の最上位ビットが0であることがわかっている場合、文字列変換手段１２０によって挿入された加算命令と直後の右１ビットシフト命令は不要である。なぜなら、加算命令R0=R0+R0の直後に右１ビットシフト命令R0=R0>>1を実行するとR0は加算命令R0=R0+R0を実行する前の値に戻るからである。
【００５９】
あるいは、文字列変換手段１２０が、あるプログラムに右１ビットシフト命令R0=R0>>1を挿入し、その命令の直後に加算命令R0=R0+R0を挿入したとする。そして、右１ビットシフト命令R0=R0>>1の実行前に汎用レジスタR0の最下位ビットが0であることがわかっている場合、文字列変換手段２によって挿入された右１ビットシフト命令と直後の加算命令は不要である。なぜなら、右１ビットシフト命令R0=R0>>1の直後に加算命令R0=R0+R0を実行すると、R0右１ビットシフト命令R0=R0>>1を実行する前の値に戻るからである。
【００６０】
不要な命令を削除することはプログラムを変換しながらでも可能である。例えば命令を変換する際に既に変換した命令との関係を調べれば、不要な命令かどうか判断することができる。あるいは、変換前にプログラムを解析しておき、不要な命令を挿入しないようにプログラムを変換することもできる。本発明の文字列変換システムはどちらの構成に対しても応用することが可能である。
【００６１】
次に、出力手段１４０について説明する。出力手段１４０は、不要命令削除手段１３０によって削除されなかった命令を含む全ての文字列を出力する。
【００６２】
次に、図２を参照して本発明にかかる文字列変換システムの第２の実施の形態について説明する。本実施の形態の文字列変換システム２００は、文字列置換手段２１０と、文字列変換手段２２０と、不要命令削除手段２３０と、出力手段２４０と、記録媒体Ｋ２とから構成されている。記録媒体Ｋ２は、ディスク、半導体メモリ、その他の記録媒体であり、コンピュータを文字列変換システム２００として機能させるためのプログラムが記録されている。このプログラムは、コンピュータによって読み取られ、コンピュータ上に、文字列置換手段２１０、文字列変換手段２２０、不要命令削除手段２３０、出力手段２４０を実現する。
【００６３】
文字列置換手段２１０、不要命令削除手段２３０、出力手段２４０は、それぞれ図１に示した文字列置換手段１１０、不要命令削除手段１３０、出力手段１４０と同様の構成を有しているので、ここでは、文字列変換手段２２０についてのみ説明する。なお、本実施の形態の文字列変換システム２００では、プロセッサがメモリからデータを読み込んだりメモリへデータを書き込んだりする際に使用するアドレスに関して、アドレスの一部または全てをシンボル文字列や数値で直接記述したり、アドレス専用レジスタにアドレスの一部または全てを格納しておくと仮定する。
【００６４】
文字列変換手段２２０において、処理の対象となるプロセッサの命令はメモリからデータを読み込む処理を伴う命令と、メモリへデータを書き込む処理を伴う命令と、アドレス専用レジスタへ値を転送する命令と、アドレス専用レジスタに格納された値をアドレス専用レジスタ以外へ転送する命令である。これらの命令において、アドレスがどのように記述されているか、転送される値がどのように命令の中に記述されているか、値がどこへ転送されるのかなどによって処理内容が異なる。
【００６５】
以下に処理内容を決定するルールを示す。
【００６６】
ルール(3)
「メモリから値を読み込む処理を伴う命令やメモリへ値を書き込む処理を伴う命令において、アドレスの一部または全てがシンボル文字列や数値で記述されているなら、メモリのアドレスを示すシンボル文字列や数値をそのL倍のアドレスにする記述へ置き換える。」
ルール(4)
「アドレス専用レジスタ Am へ値を転送する命令において、転送する値の一部または全てがシンボル文字列や数値で記述されているなら、メモリのアドレスを示すシンボル文字列や数値をそのL倍のアドレスにする記述へ置き換える。」
ルール(5)
「アドレス専用レジスタAmへ値を転送する命令において、転送する値の一部または全てがアドレス専用レジスタ以外の場所に格納されているなら、アドレス専用レジスタAmをL倍する命令を当該命令の後のサイクルで実行されるように挿入する。または転送元の値をL倍する命令を当該命令の前のサイクルで実行されるよう挿入し、さらに転送元の値を1/L倍する命令を当該命令の後のサイクルで実行されるよう挿入する。」
ルール(6)
「アドレス専用レジスタAmに格納された値をアドレス専用レジスタ以外の場所へ転送する命令において、転送される値の一部または全てがアドレス専用レジスタAmに格納されている場合、転送後の値を1/L倍する命令を当該命令の後のサイクルで実行されるように挿入する。またはアドレス専用レジスタAmに格納された値を1/L倍する命令を当該命令の前のサイクルで実行されるよう挿入し さらにアドレス専用レジスタAmに格納された値をL倍する命令を当該命令の後のサイクルで実行されるよう挿入する。」
【００６７】
文字列変換手段２２０は文字列置換手段２２１と、文字列置換手段２２２と、文字列挿入手段２２３と、文字列挿入手段２２４とを含んでいる。ルール(3)に該当する命令があれば、文字列置換手段２２１がルール(3)に記述された処理を実行する。ルール(4)に該当する命令があれば、文字列置換手段２２２がルール(4)に記述された処理を実行する。ルール(5)に該当する命令があれば、文字列挿入手段２２３がルール(5)に記述された処理を実行する。ルール(6)に該当する命令があれば、文字列挿入手段２２４がルール(6)に記述された処理を実行する。複数のルールに該当する命令があれば、該当する全てのルールに記述された処理が実行される。
【００６８】
プロセッサWおよびプロセッサBの基本命令セット２２，２３(図５、図６)を使って、上記ルール(3)、(4)、(5)、(6) の具体例について説明する。図５、図６には変換の対象となる命令と変換に必要な命令が示されている。図５、図６に示した命令を参照するために、図５、図６の命令参照記号を使用する。命令の記述方法はプロセッサによって異なるし、命令が記述されるファイル形式によっても異なるが、ここでは図５、図６に示した記述例を使って説明する。
【００６９】
命令LDST0の変換方法
命令LDST0は、シンボル文字列や数値によって記述されたアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(3)を適用する。命令LDST0においてアドレスの一部または全てを示すシンボル文字列や数値をL倍する記述へ変換する。つまり、
R0=＊[label+K]
を
R0=＊[(label+K)＊L]
へ変換する。ここで、labelはリンカなど他のソフトウェアによってアドレスが自動的に割り当てられるシンボル文字列であり、Kは任意の定数を表すシンボル文字列または数値である。
【００７０】
命令LDST5の変換方法
命令 LDST5 は、シンボル文字列や数値によって記述されたアドレスとアドレス専用レジスタの和が示すアドレスからデータを読み込む命令、あるいはそのアドレスへデータを書き込む命令である。従ってルール(3)を適用する。命令LDST5において、アドレス専用レジスタに格納されたアドレスは、アドレス専用レジスタへ転送された時点でバイトアドレスへ変換されているとみなし、アドレスの一部または全てを示すシンボル文字列や数値だけをL倍する記述へ変換する。例えばL=2の場合、
R0=＊[A0+K]
を
R0=＊[A0+(K)＊L]
へ変換する。
【００７１】
命令LDST7の変換方法
命令LDST7は、メモリから値を読み込み、それをアドレス専用レジスタAmへ転送する命令である。命令 LDST7 において、メモリから読み込んだ値のL倍の値がアドレス専用レジスタAmへ転送されるように変換する。さらにメモリのアドレスの一部または全てがシンボル文字列や数値で記述されていたら、それらをL倍する記述へ変換する。例えば命令LDST7においてL=2で、シンボル文字列や数値で記述されたアドレスを使ってメモリから値を読み込む場合、ルール(3)およびルール(5)を適用する。例えば、
A0=＊[label+K]
を
A0=＊[(label+K)＊2]
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令A0=A0<<1を使用してもよい。
【００７２】
あるいは命令LDST7においてL=2で、アドレス専用レジスタに格納したアドレスを使ってメモリから値を読み込む場合、ルール(5)を適用する。例えば、
A0=＊[A1]
を
A0=＊[A1]
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令A0=A0<<1を使用してもよい。
【００７３】
あるいは命令LDST7においてL=2で、アドレス専用レジスタに格納したアドレスと シンボル文字列や数値で記述されたアドレスとの和で表されるアドレスを使ってメモリから値を読み込む場合、ルール(3)とルール(5)を適用する。例えば、
A0=＊[A1+K]
を
A0=＊[A1+(K)＊2]
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令 A0=A0<<1 を使用してもよい。
【００７４】
命令LDST8の変換方法
命令LDST8は、アドレス専用レジスタAmに格納された値をメモリへ転送する命令である。命令LDST8において、アドレス専用レジスタに格納された値の1/L倍の値がメモリへ転送されるように変換する。さらにメモリのアドレスの一部または全てがシンボル文字列や数値で記述されていたら、それらをL倍する記述へ変換する。例えば命令LDST8においてL=2で、シンボル文字列や数値で記述されたアドレスを使ってメモリへ値を転送する場合、ルール(3)とルール(6)を適用する。例えば、
＊[label+K]=A0
を
A0=A0>>1
＊[(label+K)＊2]=A0
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令 A0=A0<<1を使用してもよい。アドレス専用レジスタA0を1/2倍するために右1ビットシフト命令を使用したが、A0を1/2倍する他の命令を使用してもよい。
【００７５】
あるいは命令LDST8においてL=2で、アドレス専用レジスタに格納したアドレスを使ってメモリへ値を転送する場合、ルール(6)を適用する。例えば、
＊[A1]=A0
を
A0=A0>>1
＊[A1]=A0
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令A0=A0<<1を使用してもよい。アドレス専用レジスタA0を1/2倍するために右1ビットシフト命令を使用したが、A0を1/2倍する他の命令を使用してもよい。
【００７６】
あるいは命令LDST8においてL=2で、アドレス専用レジスタに格納したアドレスとシンボル文字列や数値で記述されたアドレスとの和で表されるアドレスを使ってメモリへ値を転送する場合、ルール(3)とルール(6)を適用する。例えば、
＊[A1+K]=A0
を
A0=A0>>1
＊[A1+(K)＊2]=A0
A0=A0+A0
へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令 A0=A0+A0を使用したが、左シフト命令A0=A0<<1を使用してもよい。アドレス専用レジスタA0を1/2倍するために右1ビットシフト命令を使用したが、A0を1/2倍する他の命令を使用してもよい。
【００７７】
命令MV1の変換方法
命令MV1はシンボル文字列や数値で記述された値をアドレス専用レジスタへ転送する命令である。従ってルール(4)を適用する。命令MV1において、命令実行後にアドレス専用レジスタがL倍の値をもつように変換する。つまり、
A0=K
を
A0=(K)＊L
へ変換する。
【００７８】
命令MV2の変換方法
命令MV2は汎用レジスタからアドレス専用レジスタへ値を転送する命令である。従ってルール(5)を適用する。命令MV2において、命令実行後にアドレス専用レジスタが汎用レジスタの L 倍の値をもつように変換する。例えばL=2の場合は、
A0=R0
を
A0=R0
A0=A0+A0
の二つの命令へ変換する。あるいは、
R0=R0+R0
A0=R0
R0=R0>>1
の三つの命令へ変換する。ここでは汎用レジスタR0を2倍するために加算命令 R0=R0+R0を使用したが、左シフト命令R0=R0<<1を使用してもよい。汎用レジスタR0を1/2倍するために右1ビットシフト命令を使用したが、R0を1/2倍する他の命令を使用してもよい。
【００７９】
命令MV3の変換方法
命令MV3はアドレス専用レジスタから汎用レジスタへ値を転送する命令である。従ってルール(6)を適用する。命令MV3において、命令実行後に汎用レジスタがアドレス専用レジスタの1/L倍の値をもつように変換する。例えばL=2の場合は、
R0=A0
を
R0=A0
R0=R0>>1
の二つの命令へ変換する。あるいは、
A0=A0>>1
R0=A0
A0=A0+A0
の三つの命令へ変換する。ここではアドレス専用レジスタA0を2倍するために加算命令A0=A0+A0を使用したが、左シフト命令A0=A0<<1を使用してもよい。汎用レジスタR0を1/2倍するために右1ビットシフト命令を使用したが、R0を1/2倍する他の命令を使用してもよい。アドレス専用レジスタA0を1/2倍するために右1ビットシフト命令を使用したが、A0を1/2倍する他の命令を使用してもよい。
【００８０】
命令ADD1の変換方法
命令ADD1は、汎用レジスタに格納された値と、メモリからロードした値とを加算してその結果を汎用レジスタへ転送する命令である。従ってルール(3)を適用する。命令ADD1において、例えばメモリからロードすべきデータのアドレスの一部または全てがシンボル文字列や数値で記述される場合、メモリのアドレスを示すシンボル文字列や数値をそのL倍のアドレスにする記述へ置き換える。例えば、シンボル文字列labelとシンボル文字列Kの和でアドレスが表される場合、
R0=R0+＊[label+K]
を
R0=R0+＊[(label+K)＊L]
へ変換する。
【００８１】
あるいは命令ADD1において、アドレス専用レジスタA0とシンボル文字列Kの和でアドレスが表される場合、そのシンボル文字列部分をL倍する記述へ置き換える。例えば、
R0=R0+＊[A0+K]
を
R0=R0+＊[A0+(K)＊L]
へ変換する。
【００８２】
図５、図６には記述されていない他の命令、例えば減算命令、乗算命令、除算命令、シフト命令、論理演算命令などにおいて、メモリから値を読み込んだり、あるいはメモリへ値を書き込んだりする処理を伴う命令があれば、その命令に含まれるアドレスに関する記述を上記のように変換する。
【００８３】
図５及び図６に示した命令のうちこれまでに変換方法を述べていない命令 (LDST4命令、LDST6命令、ADD0命令、ADD2命令、MV0命令、SHFT0命令、SHFT1 命令) はルール(3)、(4)、(5)、(6) に該当しないので、何も変更されない。
【００８４】
これまで述べてきた本発明の文字列変換システムは、プログラムのファイル形式に依存していない。つまり、どのようなファイル形式にも応用することができる。例えばプログラムがソースコードとして記述されていてもよいし、バイナリコードとして記述されていてもよい。入力となるプログラムを含む文字列がテキスト形式ならば、変換後のプログラムもテキスト形式で出力する。入力となるプログラムを含む文字列がバイナリ形式ならば、変換後のプログラムはテキスト形式あるいはバイナリ形式のどちらかで出力する。
【００８５】
さらに本発明の文字列変換システムは、静的な変換はもとより動的な変換にも応用できる。静的な変換とは、プログラムを実行前に変換することを意味する。 動的な変換とは、プログラムを実行中に変換することを意味する。
【００８６】
これまでは、特にL=2バイトのデータに対してひとつのアドレスを割り当てる ワードアドレス方式にもとづくプロセッサWから1バイトのデータに対してひとつのアドレスを割り当てる バイトアドレス方式にもとづくプロセッサBへプログラムを変換する場合についてだけ説明した。
【００８７】
本発明の文字列変換システムはL=2だけでなく、Lが2よりも大きな整数の場合にも簡単に応用できる。また、２台のプロセッサが、共にワードアドレス方式に基づくものであっても、一つのアドレスを割り当てるバイト数の比Lが2以上の整数の場合は、本発明を適用することができる。
【００８８】
また、これまではプロセッサWとプロセッサBが全く同一の命令セットをもっていて、アセンブリ言語も全く同じで、アドレス体系だけが異なる場合に、プロ セッサW用に記述されたプログラムをプロセッサB用のプログラムへ変換する方法についてだけ述べた。本発明の文字列変換システムはこのような場合だけでなく、プロセッサWとプロセッサBが異なる命令セットをもつ場合にも応用できる。
【００８９】
例えば、まず本発明の文字列変換システムによりアドレス体系だけを変換してから、次に命令セットを変換する。その逆に、先に命令セットを変換してから、本発明の文字列変換システムによりアドレス体系を変換することも可能である。 あるいは、アドレス体系の変換と命令セットの変換を同時に行うことも考えられる。アドレス体系と命令セットを同時に変換する場合、本発明の文字列変換システム図１において、文字列変換手段２が命令セットを変換する機能を有することになる。つまり第１の実施の形態にかかる文字列変換システム１００では文字列変換手段１２０が、第２の実施の形態にかかる文字列変換システム２００では文字列変換手段２２０が命令セットを変換する手段を有することになる。
【００９０】
さらに、より一般的な変換を行うために、変換元プロセッサ用に記述されたプログラムを仮想的なプロセッサ用のプログラムへ変換し、さらにそれを目的のプロセッサ用プログラムへ変換するという方法も考えられる。この場合、プログラムを二回変換することになるが、そのどちらかで本発明を使用する。二回の変換はどちらも命令セットの変換を必要とするので、そのうちのどちらかで、前述のように本発明の文字列変換システムと命令セット変換を組み合わせて使用する。
【００９１】
【動作の説明】
まず、プロセッサWとプロセッサBとが全く同一の命令セットを持っていて、アセンブリ言語も全く同じで、アドレス体系だけが異なる場合に、プロセッサW用に記述されたプログラムをプロセッサB用のプログラムへ変換する場合の動作を図１の文字列変換システム１００を用いて説明する。プロセッサWはLバイトのデータに対してひとつのアドレスを割り当てるワードアドレス方式にもとづくプロセッサでありここでは仮にL=2とする。プロセッサBは1バイトのデータに対してひとつのアドレスを割り当てるバイトアドレス方式に基づくプロセッサである。プロセッサWとプロセッサBは図３に示すように汎用レジスタとアドレス専用レジスタをもつと仮定する。さらに図４に示す基本命令セット２１をもつと仮定する。
【００９２】
図８は、プロセッサ W 用にアセンブリ言語で記述されたプログラムである。１行にひとつの命令が記述され、命令の終端にはセミコロン；が記述される。/＊と＊/で囲まれているのはコメントである。図８において、label1 というシンボル文字列はメモリ上のあるアドレスを示すラベルであり、実際のアドレスはリンカによって自動的に割り当てられるものとする。
【００９３】
図８の変換元プログラムが入力されると、文字列変換システム１００内の文字列置換手段１１０が、文字列置換処理を行う（図７、ステップＳ１）。文字列置換手段１１０は、ツールによって自動的にアドレスが割り当てられるシンボル文字列記述を参照する記述を、変換先プロセッサにおいてワードアドレスが参照されるように変換する。図８では、ツールによって自動的にアドレスが割り当てられるシンボル文字列はlabel1だけである。従って、文字列置換手段１１０によってlabel1が (label1/2)という記述へ変換される。文字列置換手段１１０による処理を終えたプログラムを図９に示す。
【００９４】
次に文字列変換手段１２０がアドレス記述を含む命令の変換を行う（ステップＳ２）。文字列変換手段１２０は図９のプログラムを読み込んでアドレス記述を含む命令をひとつひとつ変換する。以下に各命令がどのように変換されるかを述べる。命令を参照するために、図９の命令参照記号を使用する。
●  転送命令move0とmove1では何も変更されない。
●  ロード命令load0では、アドレスを示すシンボル文字列や数値が2倍される。
●  ロード命令load1では、load1の前にアドレスを格納したR4を2倍する命令が挿入され、load1の後にR4を1/2 倍する命令が挿入される。
●  ロード命令load2では、load2の前にアドレスを格納したR4を2倍する命令が挿入され、load2の後にR4を1/2倍する命令が挿入される。さらにアドレスを示すシンボル文字列や数値が2倍される。
●  ロード命令load3では、load3の前にアドレスを格納したR4およびR5を 2倍する命令が挿入され、load3の後にR4およびR5を1/2 倍する命令が挿入される。
●  加算命令add0とadd1では、何も変換されない。
【００９５】
図１０に文字列変換手段１２０による処理を終えたプログラムを示す。 図１０では、変換元プログラムには元々無く、変換によって追加された命令を字下げして示している。
【００９６】
次に不要命令削除手段１３０が文字列変換手段１２０によって挿入された命令の中から不要な命令を削除する（ステップＳ３）。文字列変換手段１２０によって処理されたプログラム図１０をよく見ると、変換によって追加された加算命令やシフト命令のうち、いくつかは不必要であることがわかる。例えば、シフト命令R4=R4>>1 (第８行目) の直後に、このシフト結果を利用した加算命令R4=R4+R4(第９行目) がある。これらはどちらも文字列変換手段１２０によって挿入された。第６行目で加算命令R4=R4+R4によって汎用レジスタR4の最下位ビットは0になっているので、第８行目と第９行目の二つの命令を実行しても、汎用レジスタR4は変化しない。従って、これらの命令を実行することは無意味である。同様なことが、シフト命令R4=R4>>1(第１１行目) と加算命令R4=R4+R4 (第１２行目)にも当てはまる。不要命令削除手段１３０はこうした命令を削除したプログラムを出力手段１４０へ渡す。
【００９７】
そして、出力手段１４０は不要命令削除手段１３０から引き取ったプログラムを出力する（ステップＳ４）。出力手段１４０が出力した変換後プログラムを図１１に示す。
【００９８】
次に、プロセッサWとプロセッサBが全く同一の命令セットをもっていて、アセンブリ言語も全く同じで、アドレス体系だけが異なる場合に、プロセッサW用に記述されたプログラムをプロセッサBへ変換する場合の動作を図２の文字列変換システム２００を用いて説明する。プロセッサWはLバイトのデータに対してひとつのアドレスを割り当てるワードアドレス方式にもとづくプロセッサであり、ここでは仮にL=2とする。プロセッサBは1バイトのデータに対してひとつのアドレスを割り当てるバイトアドレス方式に基づくプロセッサである。プロセッサWとプロセッサBは図３に示すように汎用レジスタとアドレス専用レジスタをもつと仮定する。さらに図６に示す基本命令セット２２をもつと仮定する。
【００９９】
図１２は、プロセッサW用にアセンブリ言語で記述されたプログラムである。
１行にひとつの命令が記述され、命令の終端にはセミコロン；が記述される。/＊と＊/で囲まれているのはコメントである。図１２において、label1というシンボル文字列はメモリ上のあるアドレスを示すラベルであり、実際のアドレスはリンカによって自動的に割り当てられるものとする。
【０１００】
図１２の変換元プログラムが入力されると、文字列変換システム２００内の文字列置換手段２１０が、文字列置換処理を行う（図７、ステップＳ１）。文字列置換手段２１０は、ツールによって自動的にアドレスが割り当てられるシンボル文字列記述を参照する記述を、変換後プロセッサにおいてワードアドレスが参照されるように変換する。図１２では、ツールによって自動的にアドレスが割り当てられるシンボル文字列はlabel1だけである。従って、文字列置換手段２１０によってlabel1が(label1/2) という記述へ変換される。文字列置換手段２１０による処理を終えたプログラムを図１３に示す。
【０１０１】
次に文字列変換手段２２０がアドレス記述を含む命令の変換を行う（ステップＳ２）。文字列変換手段２２０は図１３のプログラムを読み込んでアドレス記述を含む命令をひとつひとつ変換する。以下に各命令がどのように変換されるかを述べる。命令を参照するために、図１３の命令参照記号を使用する。
●  転送命令move0とmove1では何も変更されない。
●  転送命令move2とmove3では、アドレス専用レジスタへ転送する数値が2 倍される。
●  転送命令move4とmove5では、アドレス専用レジスタを2倍する命令がそれぞれの命令の後へ挿入される。
●  ロード命令load0では、アドレスを示すシンボル文字列や数値が2倍される。
●  ロード命令load4では、何も変換されない。
●  ロード命令load5では、アドレスを示すシンボル文字列や数値が2倍される。
●  ロード命令load6では、何も変換されない。
●  加算命令add0とadd1では、何も変換されない。
●  加算命令add2では、アドレスを示すシンボル文字列や数値が2倍される。
●  転送命令move6では、move6の後に汎用レジスタR4の値を1/2 倍する命令が挿入される。
●  転送命令 move7では、move7の後に汎用レジスタR5の値を1/2倍する命令が挿入される。
【０１０２】
図１４に文字列変換手段２２０による処理を終えたプログラムを示す。図１４では、変換元プログラムには元々無く、変換によって追加された命令を字下げして示している。
【０１０３】
次に不要命令削除手段２３０が文字列変換手段２２０によって挿入された命令の中から不要な命令削除する（ステップＳ３）。ただし、文字列変換手段２２０によって処理されたプログラム図１４にはたまたま不要な命令がないので、図１４のプログラムをそのまま出力手段２４０へ渡す。
【０１０４】
そして、出力手段２４０は不要命令削除手段２３０から引き取ったプログラムを出力する（ステップＳ４）。文字列変換手段２２０によって処理されたプログラム図１４にはたまたま不要な命令がなかったので、出力手段２４０が出力する変換後プログラムも図１４と同じになる。
【０１０５】
次に、異なる命令セットをもつプロセッサW,B間でプログラムを変換する場合の動作を、図２の文字列変換システム２００を使って説明する。プロセッサWはLバイトのデータに対してひとつのアドレスを割り当てるワードアドレス方式にもとづくプロセッサとする。ここでは仮にL=2とする。プロセッサBは1バイトのデータに対してひとつのアドレスを割り当てるバイトアドレス方式にもとづくプロセッサとする。プロセッサWとプロセッサBは互いに異なる命令セットをもっていて、アセンブリ言語も異なるとする。図５にプロセッサWの基本命令セット２２を示す。図６にプロセッサBの基本命令セット２３を示す。以上のような仮定のもとで、プロセッサW用に記述されたプログラムをプロセッサB用のプログラムへ変換する方法について説明する。
【０１０６】
プロセッサW用にアセンブリ言語で記述されたプログラムとして図１２を使用する。既に説明したように、1行にひとつの命令が記述され、命令の終端にはセミコロン；が記述される。/＊と＊/で囲まれているのはコメントである。label1というシンボル文字列はメモリ上のあるアドレスを示すラベルであり、実際のアドレスはリンカ等の他のツールによって自動的に割り当てられるものとする。
【０１０７】
図１２の変換元プログラムが入力されると、まず文字列置換手段２１０が文字列の置き換えを行う（図７、ステップＳ１）。文字列置換手段２１０は、他のツールによって自動的にアドレスが割り当てられるシンボル文字列記述を参照する記述を、全てワードアドレスが参照されるように変換する。図１２では、他のツールによって自動的にアドレスが割り当てられるシンボル文字列はlabel1だけである。従って、文字列置換手段２１０によってlabel1が (label/2) という記述へ変換される。文字列置換手段２１０による処理を終えたプログラムを図１３に示す。ここまでは、既に述べた命令セットが同一である場合の動作と同じである。
【０１０８】
次に文字列変換手段２２０がアドレス記述を含む命令の変換を行う。さらに命令セット変換も行う（ステップＳ２）。命令セットが異なる場合には、ステップＳ２で、アドレス記述の変換に加えて命令セットの変換も同時に行う。命令セット変換とはプログラムの入力文字列に含まれていた全てのプロセッサW用命令を対応するひとつ以上のプロセッサB用命令へ変換することである。文字列変換手段２２０は、図１３のプログラムを読み込んで、アドレス記述を含む命令をひとつひとつ変換する。変換後の命令はプロセッサB用の命令である。さらにアドレス記述を含まない命令についてもプロセッサB用の命令へ変換する。以下に各命令がどのように変換されるかを述べる。
【０１０９】
●  転送命令R4=(label1/2)は命令セット変換によってプロセッサB用命令MV R4，(label1/2) へ変換される。
●  転送命令R5=4は命令セット変換によってプロセッサB用命令 MV R5，4 へ変換される。
●  転送命令A0=(label1/2)はアドレス専用レジスタへ転送される値が2倍される。さらに命令セット変換によってプロセッサB用命令MV A0，((label1/2))＊2 へ変換される。
●  転送命令A1=4はアドレス専用レジスタへ転送される値が2倍される。さらに命令セット変換によってプロセッサB用命令MV A0，(4)＊2 へ変換される。
●  転送命令A0=R4の直後のサイクルに、アドレス専用レジスタA1の値を2倍するプロセッサB用命令( ADD A0，A0，A0)が挿入される。さらに命令セット変換によって転送命令A0=R4はプロセッサB用命令MV A0，R4 へ変換される。
●  転送命令A1=R5の直後のサイクルに、アドレス専用レジスタA1の値を2倍するプロセッサB用命令(ADD A1，A1，A1)が挿入される。さらに命令セット変換によって転送命令A1=R4はプロセッサB用命令MV A1，R5へ変換される。
●  ロード命令R0=＊[(label1/2)+4] はアドレスを示すシンボル文字列や数値が2倍される。さらに命令セット変換によってプロセッサB用命令MV R0，＊[((label1/2)+4)＊2] へ変換される。
●  ロード命令R1=＊[A0] は命令セット変換によってプロセッサ B 用命令 MV
R1，＊[A0] へ変換される。
●  ロード命令R2=＊[A0+4] はアドレスを示すシンボル文字列や数値が2倍される。さらに命令セット変換によってプロセッサB用命令MV R2，＊[A0+(4)＊2] へ変換される。
●  ロード命令R3=＊[A0+A1] は命令セット変換によってプロセッサB用命令 MV R3，＊[A0+A1] へ変換される。
●  加算命令R4=R4+R5は命令セット変換によってプロセッサB用命令ADD R4，R4，R5へ変換される。
●  加算命令R5=R5+R3は命令セット変換によってプロセッサB用命令ADD R5，R5，R3へ変換される。
●  加算命令R5=R5+＊[(label1/2)+4] はアドレスを示すシンボル文字列や数値が2倍される。さらに命令セット変換によってプロセッサB用命令ADD R5，R5，＊[((label1/2)+4)＊2]へ変換される。
●  転送命令R4=A0の直後のサイクルに、汎用レジスタR4を1/2倍するプロセッサB用命令(SHIFT_R R4，R4，1)が挿入される。さらに命令セット変換によって転送命令R4=A0はプロセッサB用命令MV R4，A0 へ変換される。
●  転送命令R5=A1の直後のサイクルに、汎用レジスタR5を1/2倍するプロセッサB用命令(SHIFT_R R5, R5, 1)が挿入される。さらに命令セット変換によって転送命令 R5=A1はプロセッサB用命令MV R5, A1へ変換される。
【０１１０】
図１５に文字列変換手段２２０による処理を終えたプログラムを示す。
【０１１１】
次に不要命令削除手段２３０が文字列変換手段２２０によって挿入された命令の中から不要な命令削除する（ステップＳ３）。ただし、文字列変換手段２２０によって処理されたプログラム図１５にはたまたま不要な命令がないので、図１５のプログラムをそのまま出力手段２４０へ渡す。
【０１１２】
そして、出力手段２４０は不要命令削除手段２３０から引き取ったプログラムを出力する（ステップＳ３）。文字列変換手段２２０によって処理されたプログラム図１５にはたまたま不要な命令がなかったので、出力手段２４０が出力する変換後プログラムも図１５と同じになる。
【０１１３】
これまで述べた実施例では、プログラムのファイル形式について言及しなかった。なぜなら本発明はファイル形式によらず応用することができるからである。例えば、ファイル形式がバイナリ形式であったとしても、あるいはテキスト形式であったとしても、本発明はどちらにも応用することができる。バイナリ形式のプログラムを変換する場合、入力となるプログラムを含む文字列がバイナリ形式で与えられ、それを変換することになる。変換後のプログラムはバイナリ形式として出力してもよいし、テキスト形式で出力するようにしてもよい。
【０１１４】
また、これまで述べた実施例では、L=2バイトのデータに対してひとつのアドレスを割り当てるワードアドレス方式にもとづくプロセッサWから、1バイトのデータに対してひとつのアドレスを割り当てるバイトアドレス方式にもとづくプロセッサBへプログラムを変換する例を示した。これはLが2よりも大きな整数の場合にも簡単に応用できる。また、２台のプロセッサが、共にワードアドレス方式に基づくものであっても、一つのアドレスを割り当てるバイト数の比Lが2以上の整数の場合は、本発明を適用することができる。さらに本発明の文字列変換システムは、静的な変換はもとより動的な変換にも応用できる。静的な変換とは、プログラムを実行前に変換することを意味する。動的な変換とは、プログラムを実行中に変換することを意味する。
【０１１５】
【発明の効果】
以上説明したように、本発明の文字列変換システムは、変換元プロセッサが一つのアドレスを割り当てているデータのバイト数と、変換後プロセッサが一つのアドレスを割り当てているデータのバイト数との比にもとづいて、変換元プロセッサで動作可能な変換元プログラム中のアドレス記述を、変換後プロセッサが採用しているアドレス方式に合ったアドレス記述に変換する構成を有しているので、或るアドレス体系を持つ変換元プロセッサ用のプログラムを、自動的に他のアドレス体系を持つ変換後プロセッサ用のプログラムに変換することが可能になる。従って、アドレス記述を手作業で行っていた従来の技術に比較して、効率的に変換後プログラムを得ることが可能になる。また、本発明の文字列変換システムで作成した変換後プログラムを、変換後プロセッサで実行するようにすれば、エミュレーションを使用していた従来の技術に比較して、プログラムの実行速度を向上させることが可能になる。
【０１１６】
また、本発明の文字列変換システムは、プログラム中の不要命令を削除する不要命令削除手段を備えているので、実行効率の良いプログラムを作成することが可能になる。
【図面の簡単な説明】
【図１】本発明にかかる文字列変換システムの第１の実施の形態の構成例を示すブロック図である。
【図２】本発明にかかる文字列変換システムの第２の実施の形態の構成例を示すブロック図である。
【図３】プロセッサのレジスタ構成を示す図である。
【図４】プロセッサの基本命令セット２１を示す図である。
【図５】プロセッサの基本命令セット２２を示す図である。
【図６】プロセッサの基本命令セット２３を示す図である。
【図７】文字列変換システムの処理例を示す流れ図である。
【図８】変換元プログラムの一例を示す図である。
【図９】文字列置換手段１１０による処理を終えたプログラムの一例を示す図である。
【図１０】文字列変換手段１２０による処理を終えたプログラムの一例を示す図である。
【図１１】出力手段１４０によって出力された変換後プログラムの一例を示す図である。
【図１２】変換元プログラムの他の例を示す図である。
【図１３】文字列置換手段２１０による処理を終えたプログラムの一例を示す図である。
【図１４】文字列変換手段２２０による処理を終えたプログラムあるいは出力手段２４０によって出力された変換後プログラムの一例を示す図である。
【図１５】文字列変換手段２２０による処理を終えたプログラムあるいは出力手段２４０によって出力された変換後プログラムの一例を示す図である。
【符号の説明】
１００：文字列変換システム
１１０：文字列置換手段
１２０：文字列変換手段
１２１：文字列置換手段
１２２：文字列挿入手段
１３０：不要命令削除手段
１４０：出力手段
２００：文字列変換システム
２１０：文字列置換手段
２２０：文字列変換手段
２２１：文字列置換手段
２２２：文字列置換手段
２２３：文字列挿入手段
２２４：文字列挿入手段
２３０：不要命令削除手段
２４０：出力手段
１１  ：プロセッサが計算用の入力データや計算結果等を格納する汎用レジスタ
１２  ：プロセッサがメモリ上のデータや命令の位置を示すアドレスを格納するアドレス専用レジスタ
２１  ：プロセッサの基本命令セット
２２  ：プロセッサの基本命令セット
２３  ：プロセッサの基本命令セット
【図１】
0004032822.tif 000002
【図２】
0004032822.tif 000003
【図３】
0004032822.tif 000004
【図４】
0004032822.tif 000005
【図５】
0004032822.tif 000006
【図６】
0004032822.tif 000007
【図７】
0004032822.tif 000008
【図８】
0004032822.tif 000009
【図９】
0004032822.tif 000010
【図１０】
0004032822.tif 000011
【図１１】
0004032822.tif 000012
【図１２】
0004032822.tif 000013
【図１３】
0004032822.tif 000014
【図１４】
0004032822.tif 000015
【図１５】
0004032822.tif 000016