JP2004252807A - ソフトウェア開発支援装置 - Google Patents
ソフトウェア開発支援装置 Download PDFInfo
- Publication number
- JP2004252807A JP2004252807A JP2003043637A JP2003043637A JP2004252807A JP 2004252807 A JP2004252807 A JP 2004252807A JP 2003043637 A JP2003043637 A JP 2003043637A JP 2003043637 A JP2003043637 A JP 2003043637A JP 2004252807 A JP2004252807 A JP 2004252807A
- Authority
- JP
- Japan
- Prior art keywords
- language
- instruction
- assembly
- source code
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】マイコンのCPUを変更する際、変更前のCPUのアセンブリ言語ソースコードから、変更後のCPUのソースコードを生成する際、変更後のCPUのアセンブリ言語に置き換え命令が存在しない場合や、レジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合でも、新たなCPUに適したソースコードを容易に得ることを可能にする。
【解決手段】アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15を生成するのではなく、一旦、逆コンパイラ12によりC言語またはC++言語ソースコード13を生成する。生成されたC言語またはC++言語ソースコード13を、変更するCPU2のコンパイラ14でコンパイルすることにより、早期に新たなCPU2に適したアセンブリ言語2ソースコード15を容易に得ることが可能となる
【選択図】 図2
【解決手段】アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15を生成するのではなく、一旦、逆コンパイラ12によりC言語またはC++言語ソースコード13を生成する。生成されたC言語またはC++言語ソースコード13を、変更するCPU2のコンパイラ14でコンパイルすることにより、早期に新たなCPU2に適したアセンブリ言語2ソースコード15を容易に得ることが可能となる
【選択図】 図2
Description
【0001】
【発明の属する技術分野】
本発明は、あるマイクロコンピュータ(以降、マイコン)のCPUで実行可能なアセンブリ言語で記述されたソースコード(アセンブリ言語ソースコード)を、別のCPUを搭載したマイコンで実行可能なコードに変換する方法を実現するソフトウェア開発支援装置に関する。
【0002】
【従来の技術】
図4にマイコンの構成を示す。図4に示すように、マイコン41は、CPU42、ROM43、RAM44、周辺回路45で構成されている。そして、ROM43にはCPU42を実行する手順を記した機械語コードが格納されている。
【0003】
図5(a),(b)に示すように、アセンブリ言語ソースコード(51,54)をアセンブラ(52,55)でアセンブルすることでオブジェクトコード(53,55)が生成される。複数またはひとつのオブジェクトコードをリンクし、アドレスを確定させてCPUで実行できるようにしたコードが機械語コードである。
【0004】
このアセンブリ言語とアセンブラは、CPU毎に異なり、あるCPUのアセンブリ言語で記述されたソースコードは、別のCPUを搭載したマイコンには流用できない。そのため、別のCPUに変更する場合には、そのCPUに適したアセンブリ言語、またはC言語などで新たにソースコードを組み直す必要があった。
【0005】
この課題に対し、従来は、オブジェクトコードをC言語などの高水準プログラミング言語のソースコードに変換する方法(以下、オブジェクト−C言語変換方法という)(例えば、特許文献1参照)や、図6に示すように、アセンブリ言語1ソースコード51をアセンブリ言語2のソースコード54に、アセンブリ−アセンブリ変換する(57)方法が採られていた。
【0006】
このアセンブリ−アセンブリ変換方法は、例えば、
MOV A,ram
ADD A,#2
MOV ram,A
のようなアセンブリ言語1ソースコードに対し、
MOV (ram),D1
ADD 2,D1
MOV D1,(ram)
のように、対応するアセンブリ言語2の命令をそれぞれ当てはめて置き換える方法である。
【0007】
【特許文献1】
特表2001−515240号公報(第20頁、第一図)
【0008】
【発明が解決しようとする課題】
しかし、従来のオブジェクト−C言語変換方法では、オブジェクトコードの中の各コードに対し、命令を示すコードなのか、定数データを示すコードなのかを判断するために、命令領域と定数データ領域が別領域として確定していなければならず、命令と定数データが同じROM領域内で混在するマイコンなどの場合には判断がつかず、オブジェクトコードからのプログラムコードへの変換は不可能であった。
【0009】
また、仮に命令領域と定数データ領域を別領域として確定させた場合においても、オブジェクト−C言語変換方法では、アセンブリ言語ソースコードに存在し、オブジェクトコードに存在しない注釈やアセンブラ擬似命令といった情報が、生成されたC言語ソースコード上から消失してしまうという課題があった。
【0010】
また、従来のアセンブリ−アセンブリ変換方法では、アセンブリ言語がCPUに依存するという特性から置き換えられない命令や制御文が多数存在した。
【0011】
例えば、アセンブリ言語1による
ADD ram,#2
は絶対アドレスramの示すRAM領域に即値2を加算するアセンブリ命令の一例であるが、アセンブリ言語2の加算命令が絶対アドレスを指定できない場合にはその命令に対する置き換えができなかった。
【0012】
また、アセンブリ言語が具備されたレジスタセットを用いて命令を構成するという特性から、従来は図7に示すように、アセンブリ言語1の各レジスタに対し、対応するアセンブリ言語2のレジスタを当てはめて置き換える必要があった。
【0013】
図7はアセンブリ言語1とアセンブリ言語2のレジスタセットの一例を示し、71はレジスタ数の多いCPUのアセンブリ言語1のレジスタセット、72はレジスタ数の少ないCPUのアセンブリ言語2のレジスタセットである。図7に示すように、レジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合には73、74、75のレジスタのように置き換えられないレジスタが存在した。
【0014】
例えば、アセンブリ言語1による
ADD R5,#2
はアセンブリ言語2では置き換えられなかったレジスタR5を使用したアセンブリ命令の一例であるが、このようにレジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合には置き換えられないレジスタを使用した命令に対する置き換えができなかった。
【0015】
また、アセンブリ言語でソフトウェア開発が行われているケースでは、上記のようにアセンブリ言語がCPUに依存するという特性から、CPUを変更する際に、置き換えられない命令が多数存在し、早期に新たなCPUに適したソースコードを用意することが困難であった。
【0016】
本発明の目的は、マイコンのCPUを変更する際、変更前のCPUのアセンブリ言語ソースコードから、変更後のCPUに適したソースコードを容易に得ることが可能となるソフトウェア開発支援装置を提供することである。
【0017】
【課題を解決するための手段】
本発明の請求項1記載のソフトウェア開発支援装置は、アセンブリ言語ソースコードを解析し、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令を、対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコードを生成することを特徴とする。
【0018】
本発明の請求項2記載のソフトウェア開発支援装置は、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令に対応するC言語またはC++言語命令が登録された命令変換ライブラリと、アセンブリ言語ソースコード上の各アセンブリ命令が順に入力され、命令変換ライブラリに基づいて入力されるアセンブリ命令に対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコード上に出力するソースコード変換部とを備えている。
【0019】
請求項1、請求項2の構成によれば、アセンブリ言語ソースコードを、CPUに依存しないC言語またはC++言語に逆コンパイルし、C言語またはC++言語ソースコードを生成する。この生成されたC言語またはC++言語ソースコードを、変更するCPUのコンパイラでコンパイルすることにより、新たなCPUに適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【0020】
そして請求項2の構成の場合、命令変換ライブラリに、変換するアセンブリ命令と対応するC言語またはC++言語命令の組み合わせを登録しておくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのC言語またはC++言語変換が可能となる。
【0021】
本発明の請求項3記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、ラベルにRAMのアドレスを定義する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてラベルを変数として定義する命令であることを特徴とする。
【0022】
この請求項3記載の構成によれば、例えば、第1のCPUから第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコードにRAMのアドレスの指定を含む加算命令が存在し、第2のCPUのアセンブリ言語の加算命令がRAMのアドレスを指定できない場合、第1のCPUのアセンブリ言語ソースコード上のラベルにRAMのアドレスを定義する命令をC言語またはC++言語にてラベルを変数として定義する命令に変換し、第1のCPUのアセンブリ言語ソースコードのRAMのアドレスの指定を含む加算命令をC言語またはC++言語による加算命令に変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、第2のCPUのアセンブリ言語の加算命令がRAMのアドレス(絶対アドレス)を指定できない場合にも置き換え命令を割り当てることが可能となる。
【0023】
本発明の請求項4記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、データレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてデータレジスタを変数として定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とからなることを特徴とする。
【0024】
この請求項4記載の構成によれば、例えば、データレジスタ数の多い第1のCPUからデータレジスタ数の少ない第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコード上のデータレジスタの指定を含み所定の処理を実行する命令を、C言語またはC++言語にてデータレジスタを変数として定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とに変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、データレジスタ数の多いCPUからデータレジスタ数の少ないCPUに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【0025】
本発明の請求項5記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、アドレスレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とからなることを特徴とする。
【0026】
この請求項5記載の構成によれば、例えば、アドレスレジスタ数の多い第1のCPUからアドレスレジスタ数の少ない第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコード上のアドレスレジスタの指定を含み所定の処理を実行する命令を、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とに変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、アドレスレジスタ数の多いCPUからアドレスレジスタ数の少ないCPUに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【0027】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
【0028】
図1は本発明の実施の形態におけるソフトウェア開発支援装置である逆コンパイラを示す。図1において、11はアセンブリ言語1ソースコード、12は逆コンパイラ、13はC言語ソースコードである。アセンブリ言語1ソースコード11は、アセンブリ命令(機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈)で構成されている。
【0029】
図1に示すように、アセンブリ言語1ソースコード11上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈を、逆コンパイラ12が解析し、C言語またはC++言語命令に変換して、C言語またはC++言語ソースコード13を生成する。
【0030】
これにより、すでに存在するアセンブリ言語ソースコードからC言語またはC++言語ソースコードを得ることが可能となる。
【0031】
図2は、図1の逆コンパイラ12を用いることで直接アセンブリ−アセンブリ変換することなく、新たなCPU(CPU2)に合ったアセンブリ言語ソースコードを生成する方法を示す図である。図2において、11〜13は図1と同様であり、14はCPU2コンパイラ、15はアセンブリ言語2ソースコードである。
【0032】
図2に示すように、アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15を生成するのではなく、一旦、逆コンパイラ12によりC言語またはC++言語ソースコード13を生成し、CPU2コンパイラ14により、アセンブリ言語2ソースコード15を生成する。
【0033】
これにより、アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15が生成できない場合でも、早期に新たなCPU2に適したアセンブリ言語2ソースコード15を容易に得ることが可能となる。
【0034】
なお、C言語、C++言語はCPUに依存しない言語であり、機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈といった全てのアセンブリ言語の構成要素に対し、置き換えが可能であり、アセンブリ言語ソースコード(11)に備えられた全ての情報をC言語またはC++言語ソースコード(13)上に復元することができる。さらに、現在では、ほとんどのマイコンのCPUにC言語またはC++言語のコンパイラが準備されているので、生成されたC言語またはC++言語ソースコード(13)を、変更するCPU2のコンパイラでコンパイルすることにより、早期に新たなCPU2に適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【0035】
次に、本実施の形態における逆コンパイラ12について、より詳しく説明する。図3は逆コンパイラ12の構成例を示す図であり、31はアセンブリ言語ソースコード(図1の11に相当)、32はソースコード変換部、33はC言語またはC++言語ソースコード(図1の13に相当)、34は命令変換ライブラリである。
【0036】
図3に示すように、アセンブリ言語ソースコード31上のアセンブリ命令が順にソースコード変換部32に入力され、ソースコード変換部32は入力されたアセンブリ命令を命令変換ライブラリ34から検索し、対応するC言語またはC++言語命令をC言語またはC++言語ソースコード33上に出力していく。
【0037】
これにより、命令変換ライブラリ34に、変換するアセンブリ命令と対応するC言語またはC++言語命令の組み合わせを登録していくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのC言語またはC++言語変換が可能となる。
【0038】
たとえば、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0039】
ram equ 00000H
ADD ram,#2
はラベルramに絶対アドレスを定義するアセンブラ擬似命令と、絶対アドレスramの示すRAM領域に即値2を加算するアセンブリ命令の一例である。
【0040】
このような絶対アドレスを指定した命令に対し、
unsigned char ram;
のように、RAMのアドレスとして定義されたラベルを変数として定義することで、
ADD ram,#2
は、
ram += 2;
のようなC言語命令に変換することができる。
【0041】
このように、RAMのアドレスとして定義されたラベルを変数として定義することにより、新たなCPUのアセンブリ言語2の加算命令が絶対アドレスを指定できない場合にも置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、ラベルにRAMのアドレス(絶対アドレス)を定義するアセンブラ擬似命令に対応して、C言語またはC++言語にて上記ラベルを変数として定義する命令を登録しておけばよい。
【0042】
次に、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0043】
ADD R5,#2
はデータレジスタR5に即値2を加算するアセンブリ命令の一例である。
【0044】
このようなデータレジスタを指定した命令に対し、
unsigned char R5;
のように、アセンブリ言語1に具備されたデータレジスタを変数として定義することで、
ADD R5,#2
は、
R5 += 2;
のようなC言語命令に変換することができる。
【0045】
このように、アセンブリ言語1に具備されたデータレジスタを変数として定義することにより、データレジスタ数の多いCPUからデータレジスタ数の少ないCPUに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、アセンブリ言語1に具備されたデータレジスタに対して加算するアセンブリ命令に対応して、C言語またはC++言語にてデータレジスタを変数として定義する命令とその変数に対して加算する命令とを登録しておけばよい。
【0046】
次に、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0047】
ADD A,[HL]
はデータレジスタAにアドレスレジスタHLの指し示すアドレスのデータを加算するアセンブリ命令の一例である。
【0048】
このようなアドレスレジスタを指定した命令に対し、
unsigned char *HL;
のように、アセンブリ言語1に具備されたアドレスレジスタをポインタとして定義することで、
ADD A,[HL]
は、
A += *HL;
のようなC言語命令に変換することができる。
【0049】
このように、アセンブリ言語1に具備されたアドレスレジスタをポインタとして定義することにより、アドレスレジスタ数の多いCPUからアドレスレジスタ数の少ないCPUに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、アセンブリ言語1に具備されたアドレスレジスタに対して加算するアセンブリ命令に対応して、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令とそのポインタに対して加算する命令とを登録しておけばよい。
【0050】
【発明の効果】
以上のように本発明によると、変更するCPUのアセンブリ言語に置き換え命令が存在しない場合や、レジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合でも、新たなCPUに適したソースコードを容易に得ることが可能となる。したがって、アセンブリ言語でソフトウェア開発が行われている場合でも、CPUを変更する際に、早期に新たなCPUに適したソースコードを用意することが可能となる。
【0051】
さらに、C言語またはC++言語ソースコードが得られるため、そのソースコードを基にC言語またはC++言語にてソフトウェア開発を続けることも可能となる。
【図面の簡単な説明】
【図1】本発明の実施の形態の逆コンパイラによるアセンブリ−C変換のフロー図
【図2】本発明の実施の形態におけるアセンブリ−アセンブリ変換のフロー図
【図3】本発明の実施の形態におけるアセンブリ−C変換の構成図
【図4】マイコンの構成図
【図5】アセンブルのフロー図
【図6】従来のCPU変更時のアセンブリ−アセンブリ変換方法を示す図
【図7】従来のCPU変更時のアセンブリ−アセンブリ変換方法による問題点の一例を示す図
【符号の説明】
11 アセンブリ言語1ソースコード
12 逆コンパイラ
13 C言語またはC++言語ソースコード
14 CPU2コンパイラ
15 アセンブリ言語2ソースコード
31 アセンブリ言語ソースコード
32 ソースコード変換部
33 C言語またはC++言語ソースコード
34 命令変換ライブラリ
【発明の属する技術分野】
本発明は、あるマイクロコンピュータ(以降、マイコン)のCPUで実行可能なアセンブリ言語で記述されたソースコード(アセンブリ言語ソースコード)を、別のCPUを搭載したマイコンで実行可能なコードに変換する方法を実現するソフトウェア開発支援装置に関する。
【0002】
【従来の技術】
図4にマイコンの構成を示す。図4に示すように、マイコン41は、CPU42、ROM43、RAM44、周辺回路45で構成されている。そして、ROM43にはCPU42を実行する手順を記した機械語コードが格納されている。
【0003】
図5(a),(b)に示すように、アセンブリ言語ソースコード(51,54)をアセンブラ(52,55)でアセンブルすることでオブジェクトコード(53,55)が生成される。複数またはひとつのオブジェクトコードをリンクし、アドレスを確定させてCPUで実行できるようにしたコードが機械語コードである。
【0004】
このアセンブリ言語とアセンブラは、CPU毎に異なり、あるCPUのアセンブリ言語で記述されたソースコードは、別のCPUを搭載したマイコンには流用できない。そのため、別のCPUに変更する場合には、そのCPUに適したアセンブリ言語、またはC言語などで新たにソースコードを組み直す必要があった。
【0005】
この課題に対し、従来は、オブジェクトコードをC言語などの高水準プログラミング言語のソースコードに変換する方法(以下、オブジェクト−C言語変換方法という)(例えば、特許文献1参照)や、図6に示すように、アセンブリ言語1ソースコード51をアセンブリ言語2のソースコード54に、アセンブリ−アセンブリ変換する(57)方法が採られていた。
【0006】
このアセンブリ−アセンブリ変換方法は、例えば、
MOV A,ram
ADD A,#2
MOV ram,A
のようなアセンブリ言語1ソースコードに対し、
MOV (ram),D1
ADD 2,D1
MOV D1,(ram)
のように、対応するアセンブリ言語2の命令をそれぞれ当てはめて置き換える方法である。
【0007】
【特許文献1】
特表2001−515240号公報(第20頁、第一図)
【0008】
【発明が解決しようとする課題】
しかし、従来のオブジェクト−C言語変換方法では、オブジェクトコードの中の各コードに対し、命令を示すコードなのか、定数データを示すコードなのかを判断するために、命令領域と定数データ領域が別領域として確定していなければならず、命令と定数データが同じROM領域内で混在するマイコンなどの場合には判断がつかず、オブジェクトコードからのプログラムコードへの変換は不可能であった。
【0009】
また、仮に命令領域と定数データ領域を別領域として確定させた場合においても、オブジェクト−C言語変換方法では、アセンブリ言語ソースコードに存在し、オブジェクトコードに存在しない注釈やアセンブラ擬似命令といった情報が、生成されたC言語ソースコード上から消失してしまうという課題があった。
【0010】
また、従来のアセンブリ−アセンブリ変換方法では、アセンブリ言語がCPUに依存するという特性から置き換えられない命令や制御文が多数存在した。
【0011】
例えば、アセンブリ言語1による
ADD ram,#2
は絶対アドレスramの示すRAM領域に即値2を加算するアセンブリ命令の一例であるが、アセンブリ言語2の加算命令が絶対アドレスを指定できない場合にはその命令に対する置き換えができなかった。
【0012】
また、アセンブリ言語が具備されたレジスタセットを用いて命令を構成するという特性から、従来は図7に示すように、アセンブリ言語1の各レジスタに対し、対応するアセンブリ言語2のレジスタを当てはめて置き換える必要があった。
【0013】
図7はアセンブリ言語1とアセンブリ言語2のレジスタセットの一例を示し、71はレジスタ数の多いCPUのアセンブリ言語1のレジスタセット、72はレジスタ数の少ないCPUのアセンブリ言語2のレジスタセットである。図7に示すように、レジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合には73、74、75のレジスタのように置き換えられないレジスタが存在した。
【0014】
例えば、アセンブリ言語1による
ADD R5,#2
はアセンブリ言語2では置き換えられなかったレジスタR5を使用したアセンブリ命令の一例であるが、このようにレジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合には置き換えられないレジスタを使用した命令に対する置き換えができなかった。
【0015】
また、アセンブリ言語でソフトウェア開発が行われているケースでは、上記のようにアセンブリ言語がCPUに依存するという特性から、CPUを変更する際に、置き換えられない命令が多数存在し、早期に新たなCPUに適したソースコードを用意することが困難であった。
【0016】
本発明の目的は、マイコンのCPUを変更する際、変更前のCPUのアセンブリ言語ソースコードから、変更後のCPUに適したソースコードを容易に得ることが可能となるソフトウェア開発支援装置を提供することである。
【0017】
【課題を解決するための手段】
本発明の請求項1記載のソフトウェア開発支援装置は、アセンブリ言語ソースコードを解析し、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令を、対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコードを生成することを特徴とする。
【0018】
本発明の請求項2記載のソフトウェア開発支援装置は、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令に対応するC言語またはC++言語命令が登録された命令変換ライブラリと、アセンブリ言語ソースコード上の各アセンブリ命令が順に入力され、命令変換ライブラリに基づいて入力されるアセンブリ命令に対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコード上に出力するソースコード変換部とを備えている。
【0019】
請求項1、請求項2の構成によれば、アセンブリ言語ソースコードを、CPUに依存しないC言語またはC++言語に逆コンパイルし、C言語またはC++言語ソースコードを生成する。この生成されたC言語またはC++言語ソースコードを、変更するCPUのコンパイラでコンパイルすることにより、新たなCPUに適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【0020】
そして請求項2の構成の場合、命令変換ライブラリに、変換するアセンブリ命令と対応するC言語またはC++言語命令の組み合わせを登録しておくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのC言語またはC++言語変換が可能となる。
【0021】
本発明の請求項3記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、ラベルにRAMのアドレスを定義する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてラベルを変数として定義する命令であることを特徴とする。
【0022】
この請求項3記載の構成によれば、例えば、第1のCPUから第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコードにRAMのアドレスの指定を含む加算命令が存在し、第2のCPUのアセンブリ言語の加算命令がRAMのアドレスを指定できない場合、第1のCPUのアセンブリ言語ソースコード上のラベルにRAMのアドレスを定義する命令をC言語またはC++言語にてラベルを変数として定義する命令に変換し、第1のCPUのアセンブリ言語ソースコードのRAMのアドレスの指定を含む加算命令をC言語またはC++言語による加算命令に変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、第2のCPUのアセンブリ言語の加算命令がRAMのアドレス(絶対アドレス)を指定できない場合にも置き換え命令を割り当てることが可能となる。
【0023】
本発明の請求項4記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、データレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてデータレジスタを変数として定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とからなることを特徴とする。
【0024】
この請求項4記載の構成によれば、例えば、データレジスタ数の多い第1のCPUからデータレジスタ数の少ない第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコード上のデータレジスタの指定を含み所定の処理を実行する命令を、C言語またはC++言語にてデータレジスタを変数として定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とに変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、データレジスタ数の多いCPUからデータレジスタ数の少ないCPUに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【0025】
本発明の請求項5記載のソフトウェア開発支援装置は、請求項1または2記載のソフトウェア開発支援装置において、アドレスレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とからなることを特徴とする。
【0026】
この請求項5記載の構成によれば、例えば、アドレスレジスタ数の多い第1のCPUからアドレスレジスタ数の少ない第2のCPUに変更する際、第1のCPUのアセンブリ言語ソースコード上のアドレスレジスタの指定を含み所定の処理を実行する命令を、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令と、C言語またはC++言語にて所定の処理を実行する命令とに変換する。このようにして生成されたC言語またはC++言語ソースコードを、第2のCPUのコンパイラでコンパイルすることにより、第2のCPUに適したアセンブリ言語ソースコードを得ることができる。したがって、アドレスレジスタ数の多いCPUからアドレスレジスタ数の少ないCPUに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。
【0027】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
【0028】
図1は本発明の実施の形態におけるソフトウェア開発支援装置である逆コンパイラを示す。図1において、11はアセンブリ言語1ソースコード、12は逆コンパイラ、13はC言語ソースコードである。アセンブリ言語1ソースコード11は、アセンブリ命令(機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈)で構成されている。
【0029】
図1に示すように、アセンブリ言語1ソースコード11上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈を、逆コンパイラ12が解析し、C言語またはC++言語命令に変換して、C言語またはC++言語ソースコード13を生成する。
【0030】
これにより、すでに存在するアセンブリ言語ソースコードからC言語またはC++言語ソースコードを得ることが可能となる。
【0031】
図2は、図1の逆コンパイラ12を用いることで直接アセンブリ−アセンブリ変換することなく、新たなCPU(CPU2)に合ったアセンブリ言語ソースコードを生成する方法を示す図である。図2において、11〜13は図1と同様であり、14はCPU2コンパイラ、15はアセンブリ言語2ソースコードである。
【0032】
図2に示すように、アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15を生成するのではなく、一旦、逆コンパイラ12によりC言語またはC++言語ソースコード13を生成し、CPU2コンパイラ14により、アセンブリ言語2ソースコード15を生成する。
【0033】
これにより、アセンブリ言語1ソースコード11から直接、アセンブリ言語2ソースコード15が生成できない場合でも、早期に新たなCPU2に適したアセンブリ言語2ソースコード15を容易に得ることが可能となる。
【0034】
なお、C言語、C++言語はCPUに依存しない言語であり、機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令、注釈といった全てのアセンブリ言語の構成要素に対し、置き換えが可能であり、アセンブリ言語ソースコード(11)に備えられた全ての情報をC言語またはC++言語ソースコード(13)上に復元することができる。さらに、現在では、ほとんどのマイコンのCPUにC言語またはC++言語のコンパイラが準備されているので、生成されたC言語またはC++言語ソースコード(13)を、変更するCPU2のコンパイラでコンパイルすることにより、早期に新たなCPU2に適したアセンブリ言語ソースコードを容易に得ることが可能となる。
【0035】
次に、本実施の形態における逆コンパイラ12について、より詳しく説明する。図3は逆コンパイラ12の構成例を示す図であり、31はアセンブリ言語ソースコード(図1の11に相当)、32はソースコード変換部、33はC言語またはC++言語ソースコード(図1の13に相当)、34は命令変換ライブラリである。
【0036】
図3に示すように、アセンブリ言語ソースコード31上のアセンブリ命令が順にソースコード変換部32に入力され、ソースコード変換部32は入力されたアセンブリ命令を命令変換ライブラリ34から検索し、対応するC言語またはC++言語命令をC言語またはC++言語ソースコード33上に出力していく。
【0037】
これにより、命令変換ライブラリ34に、変換するアセンブリ命令と対応するC言語またはC++言語命令の組み合わせを登録していくだけで、様々なソースコード、様々なアセンブリ言語に対応したソースコードのC言語またはC++言語変換が可能となる。
【0038】
たとえば、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0039】
ram equ 00000H
ADD ram,#2
はラベルramに絶対アドレスを定義するアセンブラ擬似命令と、絶対アドレスramの示すRAM領域に即値2を加算するアセンブリ命令の一例である。
【0040】
このような絶対アドレスを指定した命令に対し、
unsigned char ram;
のように、RAMのアドレスとして定義されたラベルを変数として定義することで、
ADD ram,#2
は、
ram += 2;
のようなC言語命令に変換することができる。
【0041】
このように、RAMのアドレスとして定義されたラベルを変数として定義することにより、新たなCPUのアセンブリ言語2の加算命令が絶対アドレスを指定できない場合にも置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、ラベルにRAMのアドレス(絶対アドレス)を定義するアセンブラ擬似命令に対応して、C言語またはC++言語にて上記ラベルを変数として定義する命令を登録しておけばよい。
【0042】
次に、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0043】
ADD R5,#2
はデータレジスタR5に即値2を加算するアセンブリ命令の一例である。
【0044】
このようなデータレジスタを指定した命令に対し、
unsigned char R5;
のように、アセンブリ言語1に具備されたデータレジスタを変数として定義することで、
ADD R5,#2
は、
R5 += 2;
のようなC言語命令に変換することができる。
【0045】
このように、アセンブリ言語1に具備されたデータレジスタを変数として定義することにより、データレジスタ数の多いCPUからデータレジスタ数の少ないCPUに変更する場合でも、あらゆるデータレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、アセンブリ言語1に具備されたデータレジスタに対して加算するアセンブリ命令に対応して、C言語またはC++言語にてデータレジスタを変数として定義する命令とその変数に対して加算する命令とを登録しておけばよい。
【0046】
次に、アセンブリ言語ソースコード31上に以下の命令が記述されていたとする。
【0047】
ADD A,[HL]
はデータレジスタAにアドレスレジスタHLの指し示すアドレスのデータを加算するアセンブリ命令の一例である。
【0048】
このようなアドレスレジスタを指定した命令に対し、
unsigned char *HL;
のように、アセンブリ言語1に具備されたアドレスレジスタをポインタとして定義することで、
ADD A,[HL]
は、
A += *HL;
のようなC言語命令に変換することができる。
【0049】
このように、アセンブリ言語1に具備されたアドレスレジスタをポインタとして定義することにより、アドレスレジスタ数の多いCPUからアドレスレジスタ数の少ないCPUに変更する場合でも、あらゆるアドレスレジスタを使用した命令に対して置き換え命令を割り当てることが可能となる。この場合、図3の命令変換ライブラリ34に、アセンブリ言語1に具備されたアドレスレジスタに対して加算するアセンブリ命令に対応して、C言語またはC++言語にてアドレスレジスタをポインタとして定義する命令とそのポインタに対して加算する命令とを登録しておけばよい。
【0050】
【発明の効果】
以上のように本発明によると、変更するCPUのアセンブリ言語に置き換え命令が存在しない場合や、レジスタ数の多いCPUからレジスタ数の少ないCPUに変更する場合でも、新たなCPUに適したソースコードを容易に得ることが可能となる。したがって、アセンブリ言語でソフトウェア開発が行われている場合でも、CPUを変更する際に、早期に新たなCPUに適したソースコードを用意することが可能となる。
【0051】
さらに、C言語またはC++言語ソースコードが得られるため、そのソースコードを基にC言語またはC++言語にてソフトウェア開発を続けることも可能となる。
【図面の簡単な説明】
【図1】本発明の実施の形態の逆コンパイラによるアセンブリ−C変換のフロー図
【図2】本発明の実施の形態におけるアセンブリ−アセンブリ変換のフロー図
【図3】本発明の実施の形態におけるアセンブリ−C変換の構成図
【図4】マイコンの構成図
【図5】アセンブルのフロー図
【図6】従来のCPU変更時のアセンブリ−アセンブリ変換方法を示す図
【図7】従来のCPU変更時のアセンブリ−アセンブリ変換方法による問題点の一例を示す図
【符号の説明】
11 アセンブリ言語1ソースコード
12 逆コンパイラ
13 C言語またはC++言語ソースコード
14 CPU2コンパイラ
15 アセンブリ言語2ソースコード
31 アセンブリ言語ソースコード
32 ソースコード変換部
33 C言語またはC++言語ソースコード
34 命令変換ライブラリ
Claims (5)
- アセンブリ言語ソースコードを解析し、アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令を、対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコードを生成することを特徴とするソフトウェア開発支援装置。
- アセンブリ言語ソースコード上の機械語命令、擬似命令、アセンブラ制御命令、マクロ制御命令および注釈であるアセンブリ命令に対応するC言語またはC++言語命令が登録された命令変換ライブラリと、
前記アセンブリ言語ソースコード上の各アセンブリ命令が順に入力され、前記命令変換ライブラリに基づいて前記入力されるアセンブリ命令に対応するC言語またはC++言語命令に変換し、C言語またはC++言語ソースコード上に出力するソースコード変換部とを備えたソフトウェア開発支援装置。 - ラベルにRAMのアドレスを定義する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にて前記ラベルを変数として定義する命令であることを特徴とする請求項1または2記載のソフトウェア開発支援装置。
- データレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にて前記データレジスタを変数として定義する命令と、C言語またはC++言語にて前記所定の処理を実行する命令とからなることを特徴とする請求項1または2記載のソフトウェア開発支援装置。
- アドレスレジスタの指定を含み所定の処理を実行する命令であるアセンブリ命令に対応するC言語またはC++言語命令は、C言語またはC++言語にて前記アドレスレジスタをポインタとして定義する命令と、C言語またはC++言語にて前記所定の処理を実行する命令とからなることを特徴とする請求項1または2記載のソフトウェア開発支援装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003043637A JP2004252807A (ja) | 2003-02-21 | 2003-02-21 | ソフトウェア開発支援装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003043637A JP2004252807A (ja) | 2003-02-21 | 2003-02-21 | ソフトウェア開発支援装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004252807A true JP2004252807A (ja) | 2004-09-09 |
Family
ID=33026582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003043637A Pending JP2004252807A (ja) | 2003-02-21 | 2003-02-21 | ソフトウェア開発支援装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004252807A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276735A (ja) * | 2007-04-03 | 2008-11-13 | Toshiba Corp | プログラムコード変換装置及びプログラムコード変換方法 |
JP2010160594A (ja) * | 2009-01-07 | 2010-07-22 | Meidensha Corp | ソフトウェアの開発支援システム、開発支援方法およびプログラム |
KR20140139465A (ko) * | 2014-11-11 | 2014-12-05 | 주기홍 | 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 |
CN107402799A (zh) * | 2017-07-25 | 2017-11-28 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
-
2003
- 2003-02-21 JP JP2003043637A patent/JP2004252807A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276735A (ja) * | 2007-04-03 | 2008-11-13 | Toshiba Corp | プログラムコード変換装置及びプログラムコード変換方法 |
JP2010160594A (ja) * | 2009-01-07 | 2010-07-22 | Meidensha Corp | ソフトウェアの開発支援システム、開発支援方法およびプログラム |
KR20140139465A (ko) * | 2014-11-11 | 2014-12-05 | 주기홍 | 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 |
WO2016076583A1 (ko) * | 2014-11-11 | 2016-05-19 | 주기홍 | 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 |
KR101632027B1 (ko) * | 2014-11-11 | 2016-06-20 | 포트리스이노베이션 주식회사 | 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 |
CN107402799A (zh) * | 2017-07-25 | 2017-11-28 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
CN107402799B (zh) * | 2017-07-25 | 2020-07-21 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7559050B2 (en) | Generating software development tools via target architecture specification | |
KR101150003B1 (ko) | 소프트웨어 개발 툴 생성 방법 | |
US6473897B1 (en) | Method and apparatus for generating multiple processor-specific code segments in a single executable | |
JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
CN1577265A (zh) | 用于可扩充编译器和工具基础结构的描述语言 | |
Lozano et al. | Combinatorial register allocation and instruction scheduling | |
US20050097523A1 (en) | System for compiling source programs into machine language programs, a computer implemented method for the compiling and a computer program product for the compiling within the computer system | |
JP2008269569A (ja) | コード変換装置 | |
Stitt et al. | Binary synthesis | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
JP2004252807A (ja) | ソフトウェア開発支援装置 | |
JP4770657B2 (ja) | パイプライン合成システム、方法及びプログラム | |
US6086622A (en) | Method and apparatus for converting an architecture of a program and method, and apparatus for debugging a program by using them | |
JPH08263299A (ja) | プログラム変換方法 | |
JP5360506B2 (ja) | マルチコアにおけるプログラミングシステム、その方法及びそのプログラム | |
JP2009258796A (ja) | プログラム開発装置及びプログラム開発方法 | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
EP1369777A2 (en) | Software development system, simulator, and recording medium | |
Barnes | Compiling CSP. | |
JP2009181558A (ja) | プログラム変換装置 | |
Wendt | Fast code generation using automatically-generated decision trees | |
Tian et al. | Inside the Intel 10.1 Compilers: New Threadizer and New Vectorizer for Intel Core2 Processors. | |
Fürtler et al. | SPOT—development tool for software pipeline optimization for VLIW-DSPs used in real-time image processing | |
JP5071189B2 (ja) | プロセッサ合成装置、コンパイル装置、開発システム、プロセッサ合成方法およびプログラム | |
dos Santos | C Compiler for the VERSAT Reconfigurable Processor |