(57)【要約】【課題】マイコンのＣＰＵを変更する際、変更前のＣＰＵのアセンブリ言語ソースコードから、変更後のＣＰＵのソースコードを生成する際、変更後のＣＰＵのアセンブリ言語に置き換え命令が存在しない場合や、レジスタ数の多いＣＰＵからレジスタ数の少ないＣＰＵに変更する場合でも、新たなＣＰＵに適したソースコードを容易に得ることを可能にする。【解決手段】アセンブリ言語１ソースコード１１から直接、アセンブリ言語２ソースコード１５を生成するのではなく、一旦、逆コンパイラ１２によりＣ言語またはＣ＋＋言語ソースコード１３を生成する。生成されたＣ言語またはＣ＋＋言語ソースコード１３を、変更するＣＰＵ２のコンパイラ１４でコンパイルすることにより、早期に新たなＣＰＵ２に適したアセンブリ言語２ソースコード１５を容易に得ることが可能となる【選択図】        図２
2004252807.tif 000002
【特許請求の範囲】
【請求項１】
アセンブリ言語ソースコードを解析し、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令を、対応するＣ言語またはＣ＋＋言語命令に変換し、Ｃ言語またはＣ＋＋言語ソースコードを生成することを特徴とするソフトウェア開発支援装置。
【請求項２】
アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令が登録された命令変換ライブラリと、
前記アセンブリ言語ソースコード上の各アセンブリ命令が順に入力され、前記命令変換ライブラリに基づいて前記入力されるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令に変換し、Ｃ言語またはＣ＋＋言語ソースコード上に出力するソースコード変換部とを備えたソフトウェア開発支援装置。
【請求項３】
ラベルにＲＡＭのアドレスを定義する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にて前記ラベルを変数として定義する命令であることを特徴とする請求項１または２記載のソフトウェア開発支援装置。
【請求項４】
データレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にて前記データレジスタを変数として定義する命令と、Ｃ言語またはＣ＋＋言語にて前記所定の処理を実行する命令とからなることを特徴とする請求項１または２記載のソフトウェア開発支援装置。
【請求項５】
アドレスレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にて前記アドレスレジスタをポインタとして定義する命令と、Ｃ言語またはＣ＋＋言語にて前記所定の処理を実行する命令とからなることを特徴とする請求項１または２記載のソフトウェア開発支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、あるマイクロコンピュータ（以降、マイコン）のＣＰＵで実行可能なアセンブリ言語で記述されたソースコード（アセンブリ言語ソースコード）を、別のＣＰＵを搭載したマイコンで実行可能なコードに変換する方法を実現するソフトウェア開発支援装置に関する。
【０００２】
【従来の技術】
図４にマイコンの構成を示す。図４に示すように、マイコン４１は、ＣＰＵ４２、ＲＯＭ４３、ＲＡＭ４４、周辺回路４５で構成されている。そして、ＲＯＭ４３にはＣＰＵ４２を実行する手順を記した機械語コードが格納されている。
【０００３】
図５（ａ），（ｂ）に示すように、アセンブリ言語ソースコード（５１，５４）をアセンブラ（５２，５５）でアセンブルすることでオブジェクトコード（５３，５５）が生成される。複数またはひとつのオブジェクトコードをリンクし、アドレスを確定させてＣＰＵで実行できるようにしたコードが機械語コードである。
【０００４】
このアセンブリ言語とアセンブラは、ＣＰＵ毎に異なり、あるＣＰＵのアセンブリ言語で記述されたソースコードは、別のＣＰＵを搭載したマイコンには流用できない。そのため、別のＣＰＵに変更する場合には、そのＣＰＵに適したアセンブリ言語、またはＣ言語などで新たにソースコードを組み直す必要があった。
【０００５】
この課題に対し、従来は、オブジェクトコードをＣ言語などの高水準プログラミング言語のソースコードに変換する方法（以下、オブジェクト−Ｃ言語変換方法という）（例えば、特許文献１参照）や、図６に示すように、アセンブリ言語１ソースコード５１をアセンブリ言語２のソースコード５４に、アセンブリ−アセンブリ変換する（５７）方法が採られていた。
【０００６】
このアセンブリ−アセンブリ変換方法は、例えば、
ＭＯＶ  Ａ，ｒａｍ
ＡＤＤ  Ａ，＃２
ＭＯＶ  ｒａｍ，Ａ
のようなアセンブリ言語１ソースコードに対し、
ＭＯＶ  （ｒａｍ），Ｄ１
ＡＤＤ  ２，Ｄ１
ＭＯＶ  Ｄ１，（ｒａｍ）
のように、対応するアセンブリ言語２の命令をそれぞれ当てはめて置き換える方法である。
【０００７】
【特許文献１】
特表２００１−５１５２４０号公報（第２０頁、第一図）
【０００８】
【発明が解決しようとする課題】
しかし、従来のオブジェクト−Ｃ言語変換方法では、オブジェクトコードの中の各コードに対し、命令を示すコードなのか、定数データを示すコードなのかを判断するために、命令領域と定数データ領域が別領域として確定していなければならず、命令と定数データが同じＲＯＭ領域内で混在するマイコンなどの場合には判断がつかず、オブジェクトコードからのプログラムコードへの変換は不可能であった。
【０００９】
また、仮に命令領域と定数データ領域を別領域として確定させた場合においても、オブジェクト−Ｃ言語変換方法では、アセンブリ言語ソースコードに存在し、オブジェクトコードに存在しない注釈やアセンブラ擬似命令といった情報が、生成されたＣ言語ソースコード上から消失してしまうという課題があった。
【００１０】
また、従来のアセンブリ−アセンブリ変換方法では、アセンブリ言語がＣＰＵに依存するという特性から置き換えられない命令や制御文が多数存在した。
【００１１】
例えば、アセンブリ言語１による
ＡＤＤ  ｒａｍ，＃２
は絶対アドレスｒａｍの示すＲＡＭ領域に即値２を加算するアセンブリ命令の一例であるが、アセンブリ言語２の加算命令が絶対アドレスを指定できない場合にはその命令に対する置き換えができなかった。
【００１２】
また、アセンブリ言語が具備されたレジスタセットを用いて命令を構成するという特性から、従来は図７に示すように、アセンブリ言語１の各レジスタに対し、対応するアセンブリ言語２のレジスタを当てはめて置き換える必要があった。
【００１３】
図７はアセンブリ言語１とアセンブリ言語２のレジスタセットの一例を示し、７１はレジスタ数の多いＣＰＵのアセンブリ言語１のレジスタセット、７２はレジスタ数の少ないＣＰＵのアセンブリ言語２のレジスタセットである。図７に示すように、レジスタ数の多いＣＰＵからレジスタ数の少ないＣＰＵに変更する場合には７３、７４、７５のレジスタのように置き換えられないレジスタが存在した。
【００１４】
例えば、アセンブリ言語１による
ＡＤＤ  Ｒ５，＃２
はアセンブリ言語２では置き換えられなかったレジスタＲ５を使用したアセンブリ命令の一例であるが、このようにレジスタ数の多いＣＰＵからレジスタ数の少ないＣＰＵに変更する場合には置き換えられないレジスタを使用した命令に対する置き換えができなかった。
【００１５】
また、アセンブリ言語でソフトウェア開発が行われているケースでは、上記のようにアセンブリ言語がＣＰＵに依存するという特性から、ＣＰＵを変更する際に、置き換えられない命令が多数存在し、早期に新たなＣＰＵに適したソースコードを用意することが困難であった。
【００１６】
本発明の目的は、マイコンのＣＰＵを変更する際、変更前のＣＰＵのアセンブリ言語ソースコードから、変更後のＣＰＵに適したソースコードを容易に得ることが可能となるソフトウェア開発支援装置を提供することである。
【００１７】
【課題を解決するための手段】
本発明の請求項１記載のソフトウェア開発支援装置は、アセンブリ言語ソースコードを解析し、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令を、対応するＣ言語またはＣ＋＋言語命令に変換し、Ｃ言語またはＣ＋＋言語ソースコードを生成することを特徴とする。
【００１８】
本発明の請求項２記載のソフトウェア開発支援装置は、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令が登録された命令変換ライブラリと、アセンブリ言語ソースコード上の各アセンブリ命令が順に入力され、命令変換ライブラリに基づいて入力されるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令に変換し、Ｃ言語またはＣ＋＋言語ソースコード上に出力するソースコード変換部とを備えている。
【００１９】
請求項１、請求項２の構成によれば、アセンブリ言語ソースコードを、ＣＰＵに依存しないＣ言語またはＣ＋＋言語に逆コンパイルし、Ｃ言語またはＣ＋＋言語ソースコードを生成する。この生成されたＣ言語またはＣ＋＋言語ソースコードを、変更するＣＰＵのコンパイラでコンパイルすることにより、新たなＣＰＵに適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【００２０】
そして請求項２の構成の場合、命令変換ライブラリに、変換するアセンブリ命令と対応するＣ言語またはＣ＋＋言語命令の組み合わせを登録しておくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのＣ言語またはＣ＋＋言語変換が可能となる。
【００２１】
本発明の請求項３記載のソフトウェア開発支援装置は、請求項１または２記載のソフトウェア開発支援装置において、ラベルにＲＡＭのアドレスを定義する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にてラベルを変数として定義する命令であることを特徴とする。
【００２２】
この請求項３記載の構成によれば、例えば、第１のＣＰＵから第２のＣＰＵに変更する際、第１のＣＰＵのアセンブリ言語ソースコードにＲＡＭのアドレスの指定を含む加算命令が存在し、第２のＣＰＵのアセンブリ言語の加算命令がＲＡＭのアドレスを指定できない場合、第１のＣＰＵのアセンブリ言語ソースコード上のラベルにＲＡＭのアドレスを定義する命令をＣ言語またはＣ＋＋言語にてラベルを変数として定義する命令に変換し、第１のＣＰＵのアセンブリ言語ソースコードのＲＡＭのアドレスの指定を含む加算命令をＣ言語またはＣ＋＋言語による加算命令に変換する。このようにして生成されたＣ言語またはＣ＋＋言語ソースコードを、第２のＣＰＵのコンパイラでコンパイルすることにより、第２のＣＰＵに適したアセンブリ言語ソースコードを得ることができる。したがって、第２のＣＰＵのアセンブリ言語の加算命令がＲＡＭのアドレス（絶対アドレス）を指定できない場合にも置き換え命令を割り当てることが可能となる。
【００２３】
本発明の請求項４記載のソフトウェア開発支援装置は、請求項１または２記載のソフトウェア開発支援装置において、データレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にてデータレジスタを変数として定義する命令と、Ｃ言語またはＣ＋＋言語にて所定の処理を実行する命令とからなることを特徴とする。
【００２４】
この請求項４記載の構成によれば、例えば、データレジスタ数の多い第１のＣＰＵからデータレジスタ数の少ない第２のＣＰＵに変更する際、第１のＣＰＵのアセンブリ言語ソースコード上のデータレジスタの指定を含み所定の処理を実行する命令を、Ｃ言語またはＣ＋＋言語にてデータレジスタを変数として定義する命令と、Ｃ言語またはＣ＋＋言語にて所定の処理を実行する命令とに変換する。このようにして生成されたＣ言語またはＣ＋＋言語ソースコードを、第２のＣＰＵのコンパイラでコンパイルすることにより、第２のＣＰＵに適したアセンブリ言語ソースコードを得ることができる。したがって、データレジスタ数の多いＣＰＵからデータレジスタ数の少ないＣＰＵに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【００２５】
本発明の請求項５記載のソフトウェア開発支援装置は、請求項１または２記載のソフトウェア開発支援装置において、アドレスレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するＣ言語またはＣ＋＋言語命令は、Ｃ言語またはＣ＋＋言語にてアドレスレジスタをポインタとして定義する命令と、Ｃ言語またはＣ＋＋言語にて所定の処理を実行する命令とからなることを特徴とする。
【００２６】
この請求項５記載の構成によれば、例えば、アドレスレジスタ数の多い第１のＣＰＵからアドレスレジスタ数の少ない第２のＣＰＵに変更する際、第１のＣＰＵのアセンブリ言語ソースコード上のアドレスレジスタの指定を含み所定の処理を実行する命令を、Ｃ言語またはＣ＋＋言語にてアドレスレジスタをポインタとして定義する命令と、Ｃ言語またはＣ＋＋言語にて所定の処理を実行する命令とに変換する。このようにして生成されたＣ言語またはＣ＋＋言語ソースコードを、第２のＣＰＵのコンパイラでコンパイルすることにより、第２のＣＰＵに適したアセンブリ言語ソースコードを得ることができる。したがって、アドレスレジスタ数の多いＣＰＵからアドレスレジスタ数の少ないＣＰＵに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【００２７】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
【００２８】
図１は本発明の実施の形態におけるソフトウェア開発支援装置である逆コンパイラを示す。図１において、１１はアセンブリ言語１ソースコード、１２は逆コンパイラ、１３はＣ言語ソースコードである。アセンブリ言語１ソースコード１１は、アセンブリ命令（機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈）で構成されている。
【００２９】
図１に示すように、アセンブリ言語１ソースコード１１上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈を、逆コンパイラ１２が解析し、Ｃ言語またはＣ＋＋言語命令に変換して、Ｃ言語またはＣ＋＋言語ソースコード１３を生成する。
【００３０】
これにより、すでに存在するアセンブリ言語ソースコードからＣ言語またはＣ＋＋言語ソースコードを得ることが可能となる。
【００３１】
図２は、図１の逆コンパイラ１２を用いることで直接アセンブリ−アセンブリ変換することなく、新たなＣＰＵ（ＣＰＵ２）に合ったアセンブリ言語ソースコードを生成する方法を示す図である。図２において、１１〜１３は図１と同様であり、１４はＣＰＵ２コンパイラ、１５はアセンブリ言語２ソースコードである。
【００３２】
図２に示すように、アセンブリ言語１ソースコード１１から直接、アセンブリ言語２ソースコード１５を生成するのではなく、一旦、逆コンパイラ１２によりＣ言語またはＣ＋＋言語ソースコード１３を生成し、ＣＰＵ２コンパイラ１４により、アセンブリ言語２ソースコード１５を生成する。
【００３３】
これにより、アセンブリ言語１ソースコード１１から直接、アセンブリ言語２ソースコード１５が生成できない場合でも、早期に新たなＣＰＵ２に適したアセンブリ言語２ソースコード１５を容易に得ることが可能となる。
【００３４】
なお、Ｃ言語、Ｃ＋＋言語はＣＰＵに依存しない言語であり、機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈といった全てのアセンブリ言語の構成要素に対し、置き換えが可能であり、アセンブリ言語ソースコード（１１）に備えられた全ての情報をＣ言語またはＣ＋＋言語ソースコード（１３）上に復元することができる。さらに、現在では、ほとんどのマイコンのＣＰＵにＣ言語またはＣ＋＋言語のコンパイラが準備されているので、生成されたＣ言語またはＣ＋＋言語ソースコード（１３）を、変更するＣＰＵ２のコンパイラでコンパイルすることにより、早期に新たなＣＰＵ２に適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【００３５】
次に、本実施の形態における逆コンパイラ１２について、より詳しく説明する。図３は逆コンパイラ１２の構成例を示す図であり、３１はアセンブリ言語ソースコード（図１の１１に相当）、３２はソースコード変換部、３３はＣ言語またはＣ＋＋言語ソースコード（図１の１３に相当）、３４は命令変換ライブラリである。
【００３６】
図３に示すように、アセンブリ言語ソースコード３１上のアセンブリ命令が順にソースコード変換部３２に入力され、ソースコード変換部３２は入力されたアセンブリ命令を命令変換ライブラリ３４から検索し、対応するＣ言語またはＣ＋＋言語命令をＣ言語またはＣ＋＋言語ソースコード３３上に出力していく。
【００３７】
これにより、命令変換ライブラリ３４に、変換するアセンブリ命令と対応するＣ言語またはＣ＋＋言語命令の組み合わせを登録していくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのＣ言語またはＣ＋＋言語変換が可能となる。
【００３８】
たとえば、アセンブリ言語ソースコード３１上に以下の命令が記述されていたとする。
【００３９】
ｒａｍ  ｅｑｕ  ０００００Ｈ
ＡＤＤ  ｒａｍ，＃２
はラベルｒａｍに絶対アドレスを定義するアセンブラ擬似命令と、絶対アドレスｒａｍの示すＲＡＭ領域に即値２を加算するアセンブリ命令の一例である。
【００４０】
このような絶対アドレスを指定した命令に対し、
ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ｒａｍ；
のように、ＲＡＭのアドレスとして定義されたラベルを変数として定義することで、
ＡＤＤ  ｒａｍ，＃２
は、
ｒａｍ  ＋＝  ２；
のようなＣ言語命令に変換することができる。
【００４１】
このように、ＲＡＭのアドレスとして定義されたラベルを変数として定義することにより、新たなＣＰＵのアセンブリ言語２の加算命令が絶対アドレスを指定できない場合にも置き換え命令を割り当てることが可能となる。この場合、図３の命令変換ライブラリ３４に、ラベルにＲＡＭのアドレス（絶対アドレス）を定義するアセンブラ擬似命令に対応して、Ｃ言語またはＣ＋＋言語にて上記ラベルを変数として定義する命令を登録しておけばよい。
【００４２】
次に、アセンブリ言語ソースコード３１上に以下の命令が記述されていたとする。
【００４３】
ＡＤＤ  Ｒ５，＃２
はデータレジスタＲ５に即値２を加算するアセンブリ命令の一例である。
【００４４】
このようなデータレジスタを指定した命令に対し、
ｕｎｓｉｇｎｅｄ  ｃｈａｒ  Ｒ５；
のように、アセンブリ言語１に具備されたデータレジスタを変数として定義することで、
ＡＤＤ  Ｒ５，＃２
は、
Ｒ５  ＋＝  ２；
のようなＣ言語命令に変換することができる。
【００４５】
このように、アセンブリ言語１に具備されたデータレジスタを変数として定義することにより、データレジスタ数の多いＣＰＵからデータレジスタ数の少ないＣＰＵに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図３の命令変換ライブラリ３４に、アセンブリ言語１に具備されたデータレジスタに対して加算するアセンブリ命令に対応して、Ｃ言語またはＣ＋＋言語にてデータレジスタを変数として定義する命令とその変数に対して加算する命令とを登録しておけばよい。
【００４６】
次に、アセンブリ言語ソースコード３１上に以下の命令が記述されていたとする。
【００４７】
ＡＤＤ  Ａ，［ＨＬ］
はデータレジスタＡにアドレスレジスタＨＬの指し示すアドレスのデータを加算するアセンブリ命令の一例である。
【００４８】
このようなアドレスレジスタを指定した命令に対し、
ｕｎｓｉｇｎｅｄ  ｃｈａｒ  ＊ＨＬ；
のように、アセンブリ言語１に具備されたアドレスレジスタをポインタとして定義することで、
ＡＤＤ  Ａ，［ＨＬ］
は、
Ａ  ＋＝  ＊ＨＬ；
のようなＣ言語命令に変換することができる。
【００４９】
このように、アセンブリ言語１に具備されたアドレスレジスタをポインタとして定義することにより、アドレスレジスタ数の多いＣＰＵからアドレスレジスタ数の少ないＣＰＵに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図３の命令変換ライブラリ３４に、アセンブリ言語１に具備されたアドレスレジスタに対して加算するアセンブリ命令に対応して、Ｃ言語またはＣ＋＋言語にてアドレスレジスタをポインタとして定義する命令とそのポインタに対して加算する命令とを登録しておけばよい。
【００５０】
【発明の効果】
以上のように本発明によると、変更するＣＰＵのアセンブリ言語に置き換え命令が存在しない場合や、レジスタ数の多いＣＰＵからレジスタ数の少ないＣＰＵに変更する場合でも、新たなＣＰＵに適したソースコードを容易に得ることが可能となる。したがって、アセンブリ言語でソフトウェア開発が行われている場合でも、ＣＰＵを変更する際に、早期に新たなＣＰＵに適したソースコードを用意することが可能となる。
【００５１】
さらに、Ｃ言語またはＣ＋＋言語ソースコードが得られるため、そのソースコードを基にＣ言語またはＣ＋＋言語にてソフトウェア開発を続けることも可能となる。
【図面の簡単な説明】
【図１】本発明の実施の形態の逆コンパイラによるアセンブリ−Ｃ変換のフロー図
【図２】本発明の実施の形態におけるアセンブリ−アセンブリ変換のフロー図
【図３】本発明の実施の形態におけるアセンブリ−Ｃ変換の構成図
【図４】マイコンの構成図
【図５】アセンブルのフロー図
【図６】従来のＣＰＵ変更時のアセンブリ−アセンブリ変換方法を示す図
【図７】従来のＣＰＵ変更時のアセンブリ−アセンブリ変換方法による問題点の一例を示す図
【符号の説明】
１１  アセンブリ言語１ソースコード
１２  逆コンパイラ
１３  Ｃ言語またはＣ＋＋言語ソースコード
１４  ＣＰＵ２コンパイラ
１５  アセンブリ言語２ソースコード
３１  アセンブリ言語ソースコード
３２  ソースコード変換部
３３  Ｃ言語またはＣ＋＋言語ソースコード
３４  命令変換ライブラリ
【図１】
2004252807.tif 000003
【図２】
2004252807.tif 000004
【図３】
2004252807.tif 000005
【図４】
2004252807.tif 000006
【図５】
2004252807.tif 000007
【図６】
2004252807.tif 000008
【図７】
2004252807.tif 000009