JP2009211491A - プログラム作成方法およびその装置 - Google Patents
プログラム作成方法およびその装置 Download PDFInfo
- Publication number
- JP2009211491A JP2009211491A JP2008054801A JP2008054801A JP2009211491A JP 2009211491 A JP2009211491 A JP 2009211491A JP 2008054801 A JP2008054801 A JP 2008054801A JP 2008054801 A JP2008054801 A JP 2008054801A JP 2009211491 A JP2009211491 A JP 2009211491A
- Authority
- JP
- Japan
- Prior art keywords
- segment
- program
- instruction
- code
- source program
- 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
- Devices For Executing Special Programs (AREA)
Abstract
【課題】メモリの記憶領域が固定長物理セグメントに分割されている中央処理装置向けのプログラム作成方法およびその装置を提供。
【解決手段】ソースプログラムが記述されたソースファイル12を入力するとコンパイラ14は、一時レジスタを利用してデータのストアを命令する擬似命令「H_STORE R1, Array[R2], tenmporary:R0」を含むオブジェクトファイル16を生成し、リンカ22では、固定長物理空間の固有のアドレスを有するセグメント#1、#2を含むメモリ空間に展開する際に、データがセグメント境界を跨ぐか否かを判断し、跨ぐと判別した場合には、コンパイラ14が生成した擬似命令を、メモリ内の物理セグメントを更新するためのセグメントレジスタを更新してデータアクセスを実行する命令コードに自動的に展開する。
【選択図】図1
【解決手段】ソースプログラムが記述されたソースファイル12を入力するとコンパイラ14は、一時レジスタを利用してデータのストアを命令する擬似命令「H_STORE R1, Array[R2], tenmporary:R0」を含むオブジェクトファイル16を生成し、リンカ22では、固定長物理空間の固有のアドレスを有するセグメント#1、#2を含むメモリ空間に展開する際に、データがセグメント境界を跨ぐか否かを判断し、跨ぐと判別した場合には、コンパイラ14が生成した擬似命令を、メモリ内の物理セグメントを更新するためのセグメントレジスタを更新してデータアクセスを実行する命令コードに自動的に展開する。
【選択図】図1
Description
本発明は、固定長物理セグメントに分割されたメモリを含む中央処理装置に組み込むプログラムを作成するプログラム作成方法およびその作成装置に関するものである。
近年、メモリの記憶領域が固定長物理セグメントに分割されて配置されている中央処理装置(Central Processing Unit、以下、CPUと呼ぶ)が利用されている。このようなCPUにおいて、セグメントのベースアドレスからのオフセットを使って、データが配置されたセグメントからデータをロードしたり、データをストアしたりするなどのアクセスを行う。また、命令コードが配置されたセグメントからも、そのセグメントのベースアドレスからのオフセットを使って命令コードをロードし、その命令を実行する。全メモリ空間のアドレスは、セグメントを指定する値と、セグメント内のアドレスを指定する値とで指定する。
メモリに配置された連続データの各要素にアクセスする場合、その要素のアドレスは、連続データの先頭アドレスであるベースアドレスに要素のオフセット値を加算して生成される。ここで、一つの同じセグメント内に配置された連続データにアクセスする場合は、ベースアドレスと要素のオフセット値とを加算して生成されるアドレスはそのセグメント内のアドレスと同じアドレスであるので、データアクセスを行う際には、セグメントと生成したアドレスとの2つを指定することでデータアクセスが可能になる。
しかし、連続データが一つのセグメントを超えて複数のセグメントに配置されている場合は、ベースアドレスと要素のオフセット値とを加算して生成されるアドレスによっては、セグメントを切り替えてアクセスする必要がある。セグメントを切り替える際には切り替え専用の命令が必要になり、そのためにプログラムサイズが大きくなり、プログラムサイズの増大に伴ってプログラムの実行速度が低下する。
対象となる連続データのサイズが一つのセグメントのサイズより小さければ、連続データがセグメント境界を跨がないようにデータを配置し直すことにより、セグメントを切り替えることなく、セグメントと生成したアドレスとの2つを指定する命令でアクセスができる。しかし、連続データのサイズがセグメントのサイズを超える場合には、必ずセグメント境界を跨いで複数のセグメントにデータが配置されることになる。
メモリに連続して配置された命令コードをロードして実行する場合、命令コードのアドレスは、命令コードが配置されているセグメントとそのセグメントの先頭からのオフセット値とを加算して生成される。ロードされた命令が実行される毎にオフセット値が更新され次に実行される命令コードがロードされる。しかし、命令コードが2つのセグメントに跨って配置され、次にロードされる命令が別のセグメント内に配置されている場合は、セグメントを切り替える命令が必要になる。
連続した命令コードのサイズがセグメントのサイズより小さい場合は、連続した命令コードが2つのセグメントを跨がないようにメモリ配置を調整し直すことでこの問題を回避できるが、連続した命令コードのサイズが一つのセグメントのサイズを超える場合は、必ず2つのセグメントを跨ぐことになる。
連続したデータに対してアクセスする命令をソースプログラムから生成する場合、一般的に2つのコンパイラの動作方法がある。第1の方法は、コンパイル時には、どの連続データがセグメント境界を跨ぐか否かが分からないため、すべてのデータアクセスがセグメント境界を跨ぐことを前提としたコードをコンパイラが生成する。
第2の方法は、すべての連続データが一つのセグメント内に配置されることを前提として、コンパイラがデータアクセス命令をオブジェクトファイルに出力する。この場合、コンパイル後にセグメントを超えて配置される連続データがあった場合は、オブジェクトファイルのリンク時にエラーメッセージが出力される。プログラムの作成者、プログラマは、セグメント境界を跨いで連続データが配置される宣言をコンパイラに通知するための拡張キーワードを元のソースプログラムに付加し、再度ソースプログラムをコンパイルする。そしてコンパイラはそのキーワードが付加されたデータアクセスに対しては、セグメントを更新する命令を出力する。
連即した命令コードをソースプログラムから生成する場合は、コンパイル時には連続した命令コードの途中でセグメントを切り替える命令を挿入することはできない。そこで、コンパイラの動作としては、連続した命令コードは2つのセグメントを跨がないことを前提として命令コードを生成する。連続した命令コードが2つのセグメントを跨いで配置される場合は、オブジェクトファイルのリンク時にエラーメッセージが出力される。プログラマはそのエラーメッセージを元に、エラーの対象となった命令コードがセグメントを跨がないようにメモリ配置方法をリンカに設定する。連続した命令コードのサイズがセグメントより小さい場合は、メモリ配置を調整し直すことでこの問題を回避できるが、プログラマは、コンパイラが生成する連続した命令コードが1つのセグメント内に収まるようにソースプログラムを分割することになる。
特開平5−100839号公報
しかしながら、連続したデータに対してアクセスする命令をソースプログラムから生成する場合、上記第1の方法では、プログラマはデータメモリ空間がリニアであることを前提としたプログラミングが可能であるが、コンパイラはすべての連続したデータのアクセスにおいて、セグメントを更新する命令を出力するため、コード量が増加し、コードの実行速度も低下するという問題が発生する。
また、上記第2の方法では、セグメント境界を跨ぐことが分かっている連続データに対して、ソースプログラム上でそのデータの宣言に対してキーワードを指定することにより、そのデータアクセスに対してのみセグメントを更新する命令コードを生成してコード量の増加を最小限に抑えることができる。しかし、この方法では、プログラマはどのデータがセグメント境界を跨ぐか否かを調査するために、プログラムのコンパイル・リンク処理を繰り返し、セグメント境界を跨ぐ連続データに対するエラーメッセージを検出する必要があるという問題が発生する。さらに、ソースプログラム上のデータの宣言に対して付加するキーワードは、対象アーキテクチャ向けのコンパイラに固有のキーワードであるので、このためソースプログラムの移植性を損なうという問題が発生する。
連続した命令コードをソースプログラムから生成する場合も、プログラマは連続した命令コードがセグメント境界を跨ぐか否かを調査するために、プログラムのコンパイル・リンク処理を繰り返し、セグメント境界を跨いで配置された連続した命令コードに対するエラーメッセージを検出する必要があるという問題が発生する。さらに、連続した命令コードのサイズがセグメントのサイズを超える場合は、ソースプログラムを分割する必要があるのでソースプログラムの移植性を損なうという問題が発生する。
本発明はこのような課題に鑑み、メモリのセグメント境界の問題を解決し、固定長物理セグメントに分割されたメモリを含む中央処理装置に組み込むプログラムを作成するプログラム作成方法およびその装置を提供することを目的とする。
本発明は上述の課題を解決するために、メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成方法において、この方法は、連続データの要素へのアクセスを表す擬似命令を用意する工程と、ソースプログラムをコンパイルして、該ソースプログラムの制御構造に対応する命令コードおよび擬似命令をオブジェクトコードとして出力する第1の処理工程と、連続データが物理セグメントの境界を跨いで配置されるか否かを判断する判断工程と、判断工程にて、連続データ前記物理セグメントの境界を跨いで配置されると判断した場合に、アクセス先のセグメントを切り替える制御コードをオブジェクトコードに付加して、オブジェクトコードをメモリの絶対アドレス空間にリンクする第2の処理工程とを含むことを特徴とする。
また、本発明は上述の課題を解決するために、メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成装置において、この作成装置は、ソースプログラムをコンパイルして、ソースプログラムの制御構造に対応する命令コードと連続データの要素へのアクセスを表す擬似命令とをオブジェクトコードとして出力するコンパイラと、連続データが前記物理セグメントの境界を跨いで配置されるか否かを判断し、連続データが物理セグメントの境界を跨いで配置されると判断した場合に、アクセス先のセグメントを切り替える制御コードをオブジェクトコードに付加して、該オブジェクトコードをメモリの絶対アドレス空間にリンクするリンカとを含むことを特徴とする。
また、本発明は上述の課題を解決するために、メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成方法において、この方法は、ソースプログラムをコンパイルして、ソースプログラム中の処理の制御構造に対応する命令コードの先頭と末尾を表す擬似命令を含むオブジェクトコードを出力する第1の処理工程と、命令コードが前記物理セグメントの境界を跨がないようにして命令コードを配置し、制御構造の間にセグメントを切り替える分岐命令を挿入する第2の処理工程とを含むことを特徴とする。
また、本発明は上述の課題を解決するために、メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成装置において、この作成装置は、ソースプログラムをコンパイルして、ソースプログラム中の処理の制御構造に対応する命令コードの先頭と末尾を表す擬似命令を含むオブジェクトコードを出力するコンパイラと、命令コードが前記物理セグメントの境界を跨がないようにして命令コードを配置し、制御構造の間にセグメントを切り替える分岐命令を挿入するリンカとを含むことを特徴とする。
本発明によれば、前記ソースプログラムをコンパイルおよびリンクする処理により、メモリの複数の物理セグメントを跨がないようにオブジェクトコードを配置して実行イメージを作成することができる。
また、ソースプログラム中の処理の制御構造に対応する命令コードの先頭と末尾を表す擬似命令を含むオブジェクトコードを生成し、擬似命令をデータが配置されるセグメントに応じて適切な命令に展開するとともに、命令コードが物理セグメントの境界を跨がないようにして該命令コードを配置し、制御構造の間にセグメントを切り替える分岐命令を挿入して実行イメージを作成することができる。
このように、メモリのセグメント境界の問題を解決し、固定長物理セグメントに分割されたメモリを含む中央処理装置に組み込むプログラムを作成するプログラム作成方法およびその作成装置を提供することができる。
次に添付図面を参照して本発明によるプログラミング方法およびその装置の実施例を詳細に説明する。図1を参照すると、本発明が適用されたプログラム作成装置の実施例が示されている。図示するようにプログラム作成装置10は、ソースプログラムが記述されたソースファイル12を入力してコンパイルするコンパイラ14と、コンパイラにより生成されるオブジェクトコード16を実行可能なイメージである実行プログラム18または20に変換するリンカ22とを含むコンピュータ処理装置にて形成されている。プログラム作成装置10は、生成した実行プログラム18または20を、たとえば図2に示すように複数のセグメント#1、#2を有するメモリ200を有する処理装置(図示せず)のメモリ空間に配置し、実行プログラム18または20はその処理装置にてアクセスされる。
図2に示したメモリ200のメモリ空間は、それぞれ固定長物理空間の固有のアドレス0x000〜0xFFFFを有するセグメント#1、#2を含む。セグメント#1は、i番目の要素を指定する際に、実行プログラムにおいてベースアドレス202と、ベースアドレスからのオフセット204とによりアドレスを指定することができる。また実行プログラムにおいて、セグメントレジスタにキャリを加算する命令を指示することにより、次のセグメントとしてセグメント#2を指定することができる。
図1に戻って本実施例におけるプログラム作成装置10は、連続するデータの要素に対するアクセスにおいて、実行プログラムのコード量をできるだけ削減するために、コンパイル後のオブジェクトファイル16のリンク処理において、連続データがセグメント境界を跨いでいるか否かを判別する機能をリンカ22に有している。
コンパイラ14は、ソースファイル12からオブジェクトコードが記述されたオブジェクトファイル16を生成する際に、一時レジスタを利用してデータのストアを命令するデータアクセス命令を擬似命令としてオブジェクトファイル16内に指示する。このような機能によりソースファイル12のソースコード上へ特別なキーワードを付加することなく実行プログラムを生成することができ、ソースプログラムの移植性を損なうことを防止する。
リンカ22は、対象のデータがセグメント境界を跨いでいると判別した場合には、コンパイラ14が生成した擬似命令を、データメモリ内のセグメントを更新するためのセグメントレジスタを更新してデータアクセスを実行する命令コードに自動的に展開する機能を有している。
本実施例におけるプログラム作成装置10の動作を説明する。まず、ソースファイル12をコンパイラ14に入力すると(S50)、コンパイラ14は、たとえば「要素Array[i]=1;」が記述されたソースプログラムを命令コードに変換し、オブジェクトコードを生成する。ただしiは自然数である。この例では「MOV R1, 1」、「LOAD R2,i」および擬似命令である「H_STORE R1, Array[R2], tenmporary:R0」が記述されている(S52)。
ここで、コンパイラ14は、ソースプログラム中でアクセスされているすべての連続データが、メモリ200のメモリ空間のセグメント境界を跨いで配置されるか否かが分からないため、コンパイラ14は、連続データの要素へアクセスする命令の代わりに擬似命令を出力している。擬似命令「H_STORE R1, Array[R2], tenmporary:R0」は、Array+R2(i)のアドレスにデータをストアする命令であり、一時レジスタとしてR0を指定している。
擬似命令のオペランドには、メモリ200上のデータからロードする値またはデータメモリ200上のデータへストアする値が格納されるレジスタ、データアクセスに使用するベースアドレス、オフセット値、さらに、連続データがメモリ200のセグメント境界を跨いでいた場合のアドレス計算のために一時的に使用するレジスタを指定することができる。
このようにしてコンパイラ14にて生成されたオブジェクトファイル16はリンカ22に渡される(S54)。リンカ22では、オブジェクトファイル16内のデータが、メモリ200のメモリ空間に配置され、その絶対アドレスが決定される。したがってリンカ22は、ソースプログラム中で宣言された連続データがセグメント境界を跨いでいるか否かを絶対アドレスに基づいて判断する。そこで、リンカ22は連続データの要素へ直接アクセスするのに使用されている擬似命令を以下に述べるような適切な命令に展開する。
Arrayがセグメント境界を跨いでいない場合には、連続データの要素に対してアクセスする擬似命令は、そのデータ要素が存在するセグメントの値に設定しデータアクセスする命令に展開して実行プログラム18を生成する(S56)。実行プログラム18では、Arrayのi番目の要素への代入(Array[i]=1)に必要な命令として、擬似命令が展開されて「MOV R1, 1」、「LOAD R2, i」、Arrayのセグメントを設定する「MOV DSR, SEG(Array)」、ベースアドレスを設定する「MOV R0, BASE(Array)」、Array+iのアドレスを計算する「ADD R0, R2」、データストアを指示する「STORE R1, Array[R2]」が記述される。なお「DSR」はデータアクセス用のセグメントレジスタとする。
「Array」がセグメント境界を跨いで配置される場合は、ベースアドレスとオフセットとを加算した値によってセグメントを更新してデータアクセスを実行する命令に展開して実行プログラム20を生成する(S58)。実行プログラム20では、「MOV R1, 1」、オフセットiを設定する「LOAD R2,i」、「Array」のセグメントを設定する「MOV DSR, SEG(Array)」、ベースアドレスを設定する「MOV R0, BASE(Array)」、Array+iのアドレスを計算する「ADD R0, R2」、セグメントレジスタにキャリを加算し次のセグメントを指示する「ADDC DSR」、データストアを指示する「STORE R1, [R0]」記述される。なお、Array+iのアドレスを計算する「ADD R0, R2」の際に、計算後のアドレスがセグメントを超えた場合にキャリをセットする。この場合は、データ要素のアドレス計算(Array+i)に、一時レジスタが必要になるため、擬似命令で指定された一時レジスタ「R0」を使用している。
このようなコンパイラ14による擬似命令の出力が可能になるのは、データアクセス命令が、ソースプログラム上でデータを直接アクセスしている場合である。たとえばポインタなどを介して間接的にデータをアクセスしている等、ポインタの指し示すデータがセグメント境界を跨ぐか否かを判断できないことが分かっている場合には、コンパイラ14は、S52において擬似命令を出力せずに、ポインタの指し示すベースアドレスとオフセットとを加算した値によってセグメントを更新してデータアクセスする命令に展開する、通常の命令を出力する。
以上説明したように、ソースプログラムに特別なキーワードを指定するなどの変更を加える必要がなく、プログラマはリニアなデータメモリ空間を前提としたプログラミングを行うことが可能であるので、移植性の高いプログラムを作成することができる。さらに、コンパイラ14が出力するデータアクセス命令は擬似命令としておき、リンク時にデータに対するアクセスがセグメント境界を跨ぐか否かに応じてセグメントを切り替える命令の出力を制御することにより、セグメント境界を跨ぐデータを直接アクセスする処理において、生成されるコード量を削減することができる。
次に図4を参照して本発明が連続した命令コードを配置する場合に適用された他の実施例を説明する。本実施例におけるプログラム作成装置300は、図1に示した実施例と同様に、ソースプログラムが記述されたソースファイル302を入力してコンパイルするコンパイラ304と、コンパイラ304により生成されるオブジェクトファイル306を実行可能なイメージである実行プログラム308に変換するリンカ310とを含むコンピュータ処理装置にて形成されている。プログラム作成装置300は、生成した実行プログラム308を、たとえば複数のセグメント#1、#2を有するメモリ312のメモリ空間に配置する。
コンパイラ304は、ソースファイル302からオブジェクトコードを生成してオブジェクトファイル306をリンカ310に出力する。
リンカ310は、オブジェクトファイル内の命令コードがセグメント境界を跨ぐか否かを判別して、命令コードがセグメント境界を跨ぐことを判別すると、メモリ312のセグメント境界の前後に対応する位置で命令コードを分割し、セグメント境界の直前に次のセグメントへの分岐命令を挿入するリンク動作を行う。
通常、コンパイラが出力する命令コードは、条件分岐や、繰り返し処理などの論理的な制御構造を持っている。このような制御構造は、条件分岐処理の組み合わせで構成されるが、これらの分岐がセグメント境界を跨ぐ場合、分岐命令および分岐しなかった場合の処理の途中にセグメントを切り替える処理が必要になる。この場合、セグメント境界を跨ぐすべての分岐命令に対して、セグメントを切り替える処理が追加されるため、コード量が増加することが考えられる。
そこで、コード量の増加を最小限に抑える方法として本実施例では、制御構造の途中で命令コードがセグメント境界を跨がないようにリンカ310が自動的にメモリ配置を調節する。具体的には、リンカ310は、一つの制御構造に含まれる命令コードの集合を単位とした論理ブロックに分割する。次に、論理ブロックがセグメント境界を跨ぐ場合は、ブロックの直前に次のセグメントへの分岐命令を置き、その論理ブロックは次のセグメントへ配置するように変更する。リンカ310がこの論理ブロックを識別できるように、コンパイラ304は、リンク処理に先立って制御構造の先頭と最後とを表す擬似命令を含むオブジェクトファイル306をリンカ310に出力する。
次に図3を参照して本実施例におけるプログラム作成装置300の動作を説明する。まず、ソースプログラムが記述されたソースファイル302をコンパイラ304に入力すると(S400)、コンパイラ304は、ソースプログラムを命令コードに変換し、オブジェクトコードを生成する。このとき一つの制御構造に含まれる命令コードの集合330、332を一つの論理ブロック334、336とみなして、その論理ブロックの先頭および末尾に擬似命令をそれぞれ出力する(S402)。図示の例では、論理ブロック334、336のそれぞれの先頭に「BLOCK_START」を配置し、それらの末尾にそれぞれ「BLOCK_END」を配置している。
次に、リンカ310は、コンパイラ304が出力した擬似命令を検出し、命令コードを論理ブロック単位に分割するとともに、分割された論理ブロック単位で順にメモリ空間への割付けを行う(S404)。この割付け処理において、たとえば論理ブロック336がセグメント境界340を跨ぐことをリンカ310が判断すると、リンカ310は、その論理ブロックの直前の論理ブロック334の末尾に、次のセグメント#2へ制御を切り替える分岐命令「b NEXT」を挿入し(S406)、次の論理ブロック336は、次のセグメント#2へ分岐命令「NEXT:」に挿入した次に続いて配置する(S408)。
以上説明したように、従来のリンカでは、コンパイラがソースプログラム上で記述されたあるまとまった処理単位(関数)ごとに、命令コードのメモリ空間への割付けを行っていたため、命令コードがセグメント境界を跨ぐ場合は、プログラマがメモリ配置を適切に調節するか、または、ソースプログラム上の処理を分割しなければならなかった。しかし上記実施例では、従来の処理単位よりさらに小さい制御構造単位で命令コードを分割し、さらにそれらがセグメント境界を跨がないように自動的にメモリ配置を調節することにより、プログラマがメモリ配置の調整およびソースプログラム上の処理の分割をしなくて済む。これにより、リニアなメモリ空間を前提としたプログラム開発が可能になり、移植性の高いプログラムを作成することができる。
上記実施例では、データおよび命令コードがセグメント境界を跨ぐ場合に、1回のコンパイル・リンク処理で実行イメージのプログラムを作成する方法を述べた。この方法では、1回目のコンパイルの時点ではどのデータおよび命令コードがセグメント境界を跨ぐのか分からないので、擬似命令を出力しておき、リンク時にその擬似命令を適切な命令に展開している。
そこで、コンパイル・リンク処理を2回に分けて行うことによって、同等の結果を得ることができる。すなわち、1回目のコンパイル・リンク処理では、実行イメージを作成するのではなく、コンパイルの結果どのデータおよび命令コードがセグメント境界を跨ぐのかをリンカが判別して情報として出力する。次いで2回目のコンパイル処理にて、その情報をコンパイラの入力に与えることにより、対象となるデータアクセスおよび命令コードに対して、コンパイラがセグメントを切り替える命令を出力するとよい。図1および図4に示した実施例については、各実施例における動作を連続して実行することにより、オブジェクトコードをリンカで実行イメージに、データのアクセスする先のセグメントを切り替える制御コードを付加することにより、データがセグメントを跨いでる場合でもデータにアクセスできるようにするとともに、オブジェクトコードを論理ブロックごとに分割して、実行イメージでは論理ブロックごとに別々のセグメントに配置させるようにすることができる。
10 プログラム作成装置
12 ソースファイル
14 コンパイラ
16 オブジェクトファイル
18、20 実行プログラム
22 リンカ
12 ソースファイル
14 コンパイラ
16 オブジェクトファイル
18、20 実行プログラム
22 リンカ
Claims (6)
- メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成方法において、該方法は、
連続データの要素へのアクセスを表す擬似命令を用意する工程と、
前記ソースプログラムをコンパイルして、該ソースプログラムの制御構造に対応する命令コードおよび前記擬似命令をオブジェクトコードとして出力する第1の処理工程と、
前記連続データが前記物理セグメントの境界を跨いで配置されるか否かを判断する判断工程と、
該判断工程にて、前記連続データが前記物理セグメントの境界を跨いで配置されると判断した場合に、アクセス先の前記セグメントを切り替える制御コードを前記オブジェクトコードに付加して、該オブジェクトコードを前記メモリの絶対アドレス空間にリンクする第2の処理工程とを含むことを特徴とするプログラム作成方法。 - 請求項1に記載の方法において、前記第1の処理工程は、一時レジスタを利用する擬似命令を用意し、
前記第2の処理工程は、前記一時レジスタを利用して前記セグメントのアドレスを計算することを特徴とするプログラム作成方法。 - メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成装置において、該作成装置は、
前記ソースプログラムをコンパイルして、該ソースプログラムの制御構造に対応する命令コードと連続データの要素へのアクセスを表す擬似命令とをオブジェクトコードとして出力するコンパイラと、
前記連続データが前記物理セグメントの境界を跨いで配置されるか否かを判断し、前記連続データが前記物理セグメントの境界を跨いで配置されると判断した場合に、アクセス先の前記セグメントを切り替える制御コードを前記オブジェクトコードに付加して、該オブジェクトコードを前記メモリの絶対アドレス空間にリンクするリンカとを含むことを特徴とするプログラム作成装置。 - 請求項3に記載の作成装置において、前記コンパイラは、一時レジスタを利用する擬似命令を用意し、
前記リンカは、前記一時レジスタを利用して前記セグメントのアドレスを計算することを特徴とするプログラム作成装置。 - メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成方法において、該方法は、
前記ソースプログラムをコンパイルして、該ソースプログラム中の処理の制御構造に対応する命令コードの先頭と末尾を表す擬似命令を含むオブジェクトコードを出力する第1の処理工程と、
前記命令コードが前記物理セグメントの境界を跨がないようにして該命令コードを配置し、前記制御構造の間にセグメントを切り替える分岐命令を挿入する第2の処理工程とを含むことを特徴とするプログラム作成方法。 - メモリが固定長の複数の物理セグメントに分割された中央処理装置向けのソースプログラムから実行イメージのプログラムを作成するプログラム作成装置において、該作成装置は、
前記ソースプログラムをコンパイルして、該ソースプログラム中の処理の制御構造に対応する命令コードの先頭と末尾を表す擬似命令を含むオブジェクトコードを出力するコンパイラと、
前記命令コードが前記物理セグメントの境界を跨がないようにして該命令コードを配置し、前記制御構造の間にセグメントを切り替える分岐命令を挿入するリンカとを含むことを特徴とするプログラム作成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008054801A JP2009211491A (ja) | 2008-03-05 | 2008-03-05 | プログラム作成方法およびその装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008054801A JP2009211491A (ja) | 2008-03-05 | 2008-03-05 | プログラム作成方法およびその装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009211491A true JP2009211491A (ja) | 2009-09-17 |
Family
ID=41184559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008054801A Pending JP2009211491A (ja) | 2008-03-05 | 2008-03-05 | プログラム作成方法およびその装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009211491A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112558975A (zh) * | 2020-12-17 | 2021-03-26 | 北京奇艺世纪科技有限公司 | 组件的代码切换方法、装置、电子设备及可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5344131A (en) * | 1976-10-05 | 1978-04-20 | Toshiba Corp | Segment transit system |
JPS6182241A (ja) * | 1984-08-29 | 1986-04-25 | Fujitsu Ltd | 手続区画の分割方式 |
JPH01295332A (ja) * | 1988-05-23 | 1989-11-29 | Nec Corp | プログラム配置方式 |
JPH01310437A (ja) * | 1988-06-08 | 1989-12-14 | Nec Corp | ロードモジュール生成方式 |
JPH0229830A (ja) * | 1988-07-20 | 1990-01-31 | Kobe Nippon Denki Software Kk | 配列のアドレス解決方式 |
JPH03248240A (ja) * | 1990-02-26 | 1991-11-06 | Nec Corp | マイクロコンピュータ |
JPH04181340A (ja) * | 1990-11-15 | 1992-06-29 | Nec Software Ltd | アドレス変換方式 |
JPH05324316A (ja) * | 1992-04-02 | 1993-12-07 | Nec Corp | マイクロプロセッサ |
JPH05341990A (ja) * | 1992-06-09 | 1993-12-24 | Seiko Epson Corp | 自動バンク値挿入方法およびソフトウェア開発支援装置 |
-
2008
- 2008-03-05 JP JP2008054801A patent/JP2009211491A/ja active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5344131A (en) * | 1976-10-05 | 1978-04-20 | Toshiba Corp | Segment transit system |
JPS6182241A (ja) * | 1984-08-29 | 1986-04-25 | Fujitsu Ltd | 手続区画の分割方式 |
JPH01295332A (ja) * | 1988-05-23 | 1989-11-29 | Nec Corp | プログラム配置方式 |
JPH01310437A (ja) * | 1988-06-08 | 1989-12-14 | Nec Corp | ロードモジュール生成方式 |
JPH0229830A (ja) * | 1988-07-20 | 1990-01-31 | Kobe Nippon Denki Software Kk | 配列のアドレス解決方式 |
JPH03248240A (ja) * | 1990-02-26 | 1991-11-06 | Nec Corp | マイクロコンピュータ |
JPH04181340A (ja) * | 1990-11-15 | 1992-06-29 | Nec Software Ltd | アドレス変換方式 |
JPH05324316A (ja) * | 1992-04-02 | 1993-12-07 | Nec Corp | マイクロプロセッサ |
JPH05341990A (ja) * | 1992-06-09 | 1993-12-24 | Seiko Epson Corp | 自動バンク値挿入方法およびソフトウェア開発支援装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112558975A (zh) * | 2020-12-17 | 2021-03-26 | 北京奇艺世纪科技有限公司 | 组件的代码切换方法、装置、电子设备及可读存储介质 |
CN112558975B (zh) * | 2020-12-17 | 2023-09-01 | 北京奇艺世纪科技有限公司 | 组件的代码切换方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5638107B2 (ja) | データ処理回路 | |
KR101731238B1 (ko) | 조건부 비교 명령 | |
JP4911022B2 (ja) | カウンタ制御回路、動的再構成回路およびループ処理制御方法 | |
JP2007293383A (ja) | プログラム開発支援装置及びプログラム開発支援装置の動作方法 | |
US5964861A (en) | Method for writing a program to control processors using any instructions selected from original instructions and defining the instructions used as a new instruction set | |
TW201737067A (zh) | 向量預測指令 | |
KR20180137521A (ko) | 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 | |
TW201830234A (zh) | 用於控制矢量記憶體存取之資料處理裝置及方法 | |
JP2011028648A (ja) | オブジェクトコード生成システム、及びオブジェクトコード生成方法 | |
JP2006107338A (ja) | プログラム処理装置 | |
KR102458467B1 (ko) | 벡터 생성 명령 | |
KR20200094771A (ko) | 벡터 자리올림이 있는 가산 명령 | |
US7660970B2 (en) | Register allocation method and system for program compiling | |
US6314564B1 (en) | Method for resolving arbitrarily complex expressions at link-time | |
JP2009211491A (ja) | プログラム作成方法およびその装置 | |
KR101670916B1 (ko) | 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치 | |
US5963725A (en) | Simulation system and method for microcomputer program | |
JP2020527797A (ja) | データ処理装置におけるベクトル・インタリーブ | |
JP6443125B2 (ja) | コンパイラプログラム、コンピュータプログラム及びコンパイラ装置 | |
JP2006065788A (ja) | リコンフィギュラブル回路を備えた処理装置 | |
JPH10320212A (ja) | キャッシュ向け最適化方法 | |
JP6295914B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ | |
JP6555005B2 (ja) | 最適化装置、方法およびプログラム | |
JP6974722B2 (ja) | コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置 | |
JPH09330219A (ja) | 命令解読器切替型プロセッサ及び翻訳装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20111207 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120110 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20120117 |
|
A02 | Decision of refusal |
Effective date: 20120508 Free format text: JAPANESE INTERMEDIATE CODE: A02 |