JPH08115221A - Cコンパイラ - Google Patents
CコンパイラInfo
- Publication number
- JPH08115221A JPH08115221A JP6273102A JP27310294A JPH08115221A JP H08115221 A JPH08115221 A JP H08115221A JP 6273102 A JP6273102 A JP 6273102A JP 27310294 A JP27310294 A JP 27310294A JP H08115221 A JPH08115221 A JP H08115221A
- Authority
- JP
- Japan
- Prior art keywords
- port
- function
- compiler
- interrupt
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
られる、プログラム開発効率の良いCコンパイラを得
る。 【構成】 Cのソースプログラムに記述することによ
り、I/OポートへデータをアクセスするCPU命令コードを
作成するI/Oポートアクセス用予約関数および指定した
レジスタのみの保存が行える割り込み処理手段を備え
る。
Description
要求される場合に用いられるCコンパイラに関する。
言語がある。低水準言語は機械語やアセンブラなどのマ
シンに近い言語であり、高水準言語はFORTRAN、COBOL、
PL/I、BASICなどの、人間の言葉あるいは表現法に近い
言語である。
をめざしたところから始まっている。機械語やアセンブ
ラは特別な訓練を受けたプログラミングのプロ向けの言
語あり、だれにでもすぐに使えるというものではなかっ
た。そこで数式に近い表現法でプログラミングが可能な
FORTRANが生まれ、英語の言葉をそのままプログラムの
表現手段として生まれたのがCOBOLである。
たのがPL/Iである。BASICは、ソースプログラムをその
まま実行できるように改良したインタープリタ言語で、
人間の表現がそのままプログラムとして実行する点で画
期的なものといいえる。しかし、記述の仕方はFORTRAN
に近く、また文字列の演算などはPL/Iの特徴を取り入れ
ている。このようにさまざまな高水準言語があるが、高
水準言語の基本はFORTRANとCOBOLから発生しているとい
ってよい。
飛躍的に向上した。しかし、高水準言語の弱点はハード
周りの記述に弱いということである。もともと高水準言
語はアプリケーションの開発のために開発された言語で
あるから、ハードウェアを直接ハンドリングする処理に
は向いていない。PL/Iなどではハードウェア部分に関す
る記述文も多く含まれているが、高水準言語は処理スピ
ードとメモリの節約という点で問題があり、実行速度が
要求される処理やメモリを重視する処理ではアセンブラ
が現在も使用されている。
システムを、アセンブラでは開発効率が低いということ
で開発された言語である。したがって、Cにはアセンブ
ラの色が随所に残っている。FORTRANやCOBOLを中心に扱
ってきたプログラマには、Cのアドレスに対する考え方
は理解しにくいところでもある。また命令が少なく、そ
の部分を多くの関数を用意してライブラリの形式でユー
ザーに提供している。とくにI/Oに関する命令はなく、
この部分も関数としてライブラリで提供されている。
ンドリングが行えることである。しかもアセンブラに比
べてプログラミングがしやすいことである。処理速度も
他の高水準言語に比べて速い。現時点ではこのような利
点が評価され多くの分野で使用されている。特に速度が
求められるゲームの分野でもアセンブラにかわって主な
言語の地位を占めている。
ンブラの代用が務まるかといえば、そうはいかない。ゲ
ーム機では、ゲーム画面の表示やジョイパットの操作な
どを行うときは、必ずI/Oポートとよばれる領域をアク
セス(読み書き)しなければならなかった。
へのアクセス機能(命令)が用意されていない。したが
って、この部分をアセンブラでプログラミングするか、
または別に用意されたライブラリを使用するかの、どち
らかの方法を選択するしかない。
する方法は、I/Oポートへのアクセス部分とその他のプ
ログラム部分を完全に分割しなければならないために、
非常に手間がかかり、またプログラムの管理がしにくい
という欠点がある。
した場合は、その呼び出しのオーバーヘッドに時間がか
かり、速度を求める処理では致命的な問題となることが
ある。たとえば、CプログラムからI/Oポートをアクセ
スできるようにするために、ライブラリを用意されてい
る場合、ライブラリには関数が登録されており、includ
e文でこの関数をCのソースプログラムに取り込む。
コントロールが渡るときにプロローグ処理がなされ、関
数から元の処理に戻るときにエピローグ処理がなされ
る。プロローグ処理ではパラメータリストの引き渡しや
レジスタの保存などが行われ、エピローグ処理ではリタ
ーンコードの設定やレジスタの戻しなどが行われる。要
するに、このエピローグ、プロローグ処理がオーバーヘ
ッドとして余分な時間を使うわけである。
とに割り込み処理がある。割り込みは、一つのプログラ
ム実行をハードウェア的手段で中断し、あとで再開でき
るようにして他のプログラムに移れることである。割り
込みには入出力装置の開始終了割り込み(I/O割り込
み)、内部割り込み、プログラム割り込み、外部割り込
み、機械チェック割り込みなどがある。割り込み処理が
重要なのは、どの時点で割り込みが発生するかわからな
いので、論理的な一連の記述では表現できない部分を、
特別のルーチンで処理できるからである。
ラーは、プログラミング時には予想のできない部分であ
る。エラーが発生すると、プログラムの実行はその時点
で停止する。しかし割り込み処理が記述してあれば、通
常の正常な処理は一時中断され、割り込みルーチンに飛
び込み、そこで何らかのエラーに対処した処理を施し、
元の正常なルーチンに戻すことができる。
の入力開始、終了が予想できる部分がるために、通常処
理で記述することもできるが、割り込みルーチンで処理
した方が記述しやすいという点がある。そのため、I/O
割り込みを割り込みルーチンで記述することが多い。こ
れはI/Oポートへのアクセスの場合も同様である。
されていない。したがってこの部分については、これま
ではアセンブラで記述するしか方法がなかった。これ
は、I/Oポートへのアクセスの場合と同様に、Cとアセ
ンブラを分離してプログラム作成しなければならず、手
間がかかるうえに、プログラム管理の面でも支障をきた
す。
意されているものもあるが、割り込み関数ですべてのレ
ジスタを保存するために、保存しなくてもよいレジスタ
までが保存するコードが生成され、むだな時間を要し、
ゲームなどの高速な処理が要求される目的には適してい
ない。
ウェアに関する記述ができないか、あるいは弱いという
面があり、Cで記述できない面をアセンブラでカバーし
てきた。しかしCとアセンブラの組み合わせは、プログ
ラミングする者にとっては手間のかかる作業であり、プ
ログラム開発効率を落としていた。本発明の目的は、ゲ
ーム等の高速処理が要求される場合に用いられる、プロ
グラム開発効率の良いCコンパイラを得ることである。
は、I/Oポートのアクセスに特殊な予約関数を用意し、
Cソースプログラムにこの関数を記述すると、本発明の
CコンパイラがI/OポートへデータをアクセスするCPU命
令コードを作成する。すなわち、ソースプログラムレベ
ルでは関数形式で記述がするが、オブジェクトプログラ
ムレベルでは直接I/Oポートをアクセスする命令の集合
体として表現される。
は __func(p); とする。ここでfuncは関数名(具体的な関数名は実施例
参照)、pはI/Oポートのデータを入出力する領域のアド
レスである。図3は従来のCコンパイラによるI/Oポー
トのアクセスの説明図で、ライブラリの関数を取り込む
形になる。図4は本発明のコンパイラの説明図で、直接
CPUの命令コードを生成する。
ローグ時のレジスタの復帰(戻し)は、これまで全レジ
スタに対して行われていた。しかし割り込み処理では高
速処理が要求されることが多いために、この処理をすこ
しでも速くしたい。そこで、本発明では、必要なレジス
タ(割り込み処理内で使われるレジスタ)のみを保存す
るようにする。このようにすればむだなレジスタ保存が
ないために処理速度が速くなり、また余分な保存エリア
を使うこともない。
拡張キーワードをinterruptとし、次の書式を用いる。
terruptを認識すると、割り込み処理関数として扱い、
通常の関数戻りとは異なるコードを生成する。このとき
ンパイラが認識すると、割り込み処理を生成する。また
拡張キーワードregsaveを認識すると、オペランドで指
定したレジスタのみを保存するコードを関数の実行前に
生成し、終了時に保存したレジスタを復帰するコードを
生成する。
殊関数__func()を用いるとしたが、具体的には本発明の
CコンパイラではI/Oポートからアクセスとデータ長に
よって読み込みは
ンパイラが認めているI/Oポートアクセル用特殊関数
で、バイト、ハーフワード(2バイト)、ワード(4バ
イト)単位で読み取る、または書き込むかによって、6
種類の関数が用意されている。
パイラを通すと、関数ではなく、直接CPUの命令コード
が生成される。たとえばI/Oポートからバイト単位でデ
ータを読み取るには、
ら1バイト単位でデータを読み、それを配列aに保存す
る処理である。ここで重要なことは、プログラムでの記
述は関数形式であるが、本発明のCコンパイラでは直接
CPUの命令コードに変換されるという点である。したが
って、関数コールではないから、関数を呼び出す際のオ
ーバーヘッドは一切ないことである。
起きるかわからない。そのため、通常の論理的ルーチン
から離れたところに独立して関数として記述することに
なる。しかし、割り込みによっては、どこで起きるかわ
かるものもある。たとえばI/Oの割り込みである。ファ
イルからのデータ入力は、すべてのデータを読み取って
もなお入力命令を出すと、エンドオブファイルのI/O割
り込みがかかる。割り込みがかかると、システム(BIO
S)は割り込みコードをセットする。
を読み取ることができなかった。本発明のコンパイラで
は、拡張キーワードinterruptを認識すると、この割り
込み処理を生成する。割り込みルーチン(関数)が指定
されていると、実行時に割り込みが発生する。その結
果、一連の処理を中断して割り込みルーチンに分岐す
る。本発明のコンパイラでは、指定したレジスタのみを
保存する。たとえば、
にコントロールが渡り、指定したレジスタr1、r2、r3が
関数にコントロールが渡った時点で保存され、コントロ
ールが元の処理に戻るときに復帰される。
ジスタr1、r2、r3が自由に使用できる。しかし他のレジ
スタは使用しないか、あるいは使用し内容が壊されても
問題のないレジスタということになる。その管理はプロ
グラマの責任においてなさなければならない。したがっ
て本発明は、よりアセンブラに近い考え方に基づいてい
る。それは、処理速度を重視しているからである。
るいはサポートされていないハード上の扱いをより高速
に処理すことを目的にして開発された。その一つが、開
発効率のアップである。いままではアセンブラで組んで
いた処理が、C上ですべて記述できるようになったから
である。
ームではプレイヤ(人間)と機械(ゲーム機)とのやり
取りを高速で処理しなければならない。その点、本発明
の“I/Oポートのアクセス”は、直接CPUの命令コードに
変換されるために、関数を用いた場合に比べはるかに速
い。しかも関数と同じ形式で記述できるから、プログラ
マに何の負担も与えない。
の説明図である。
形式でインクルードして使用する場合の開発手順の説明
図である。
スの説明図である。
それを配列aに保存する処理の説明図である。
Claims (2)
- 【請求項1】 Cのソースプログラムに記述することに
より、I/OポートへデータをアクセスするCPU命令コード
を作成するI/Oポートアクセス用予約関数を備えたこと
を特徴とするCコンパイラ。 - 【請求項2】 Cのソースプログラムに記述することに
より、I/OポートへデータをアクセスするCPU命令コード
を作成するI/Oポートアクセス用予約関数および指定し
たレジスタのみの保存が行える割り込み処理手段を備え
たCコンパイラ。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP6273102A JPH08115221A (ja) | 1994-10-13 | 1994-10-13 | Cコンパイラ |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP6273102A JPH08115221A (ja) | 1994-10-13 | 1994-10-13 | Cコンパイラ |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH08115221A true JPH08115221A (ja) | 1996-05-07 |
Family
ID=17523173
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP6273102A Pending JPH08115221A (ja) | 1994-10-13 | 1994-10-13 | Cコンパイラ |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH08115221A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20020030441A (ko) * | 2000-10-17 | 2002-04-25 | 최종호 | 리눅스 운영체제에서의 내장형 게임제작도구 시스템 및방법 |
-
1994
- 1994-10-13 JP JP6273102A patent/JPH08115221A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20020030441A (ko) * | 2000-10-17 | 2002-04-25 | 최종호 | 리눅스 운영체제에서의 내장형 게임제작도구 시스템 및방법 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5586328A (en) | Module dependency based incremental compiler and method | |
| JP2002508560A (ja) | マルチプル・クラスファイルのランタイムイメージへの結合 | |
| US6260191B1 (en) | User controlled relaxation of optimization constraints related to volatile memory references | |
| US6567910B2 (en) | Digital signal processing unit with emulation circuitry and debug interrupt enable register indicating serviceable time-critical interrupts during real-time emulation mode | |
| JPH01306923A (ja) | 異種言語間連絡方式 | |
| JP2008536240A (ja) | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス | |
| KR20040039412A (ko) | 가상 머신 해석기 가속 하드웨어용 소프트웨어 지원 | |
| JPH04266125A (ja) | ディジタルコンピュータの操作方法 | |
| JPS6124729B2 (ja) | ||
| JP2991242B2 (ja) | マルチプロセッサコンピュータシステム使用方法 | |
| JP2856663B2 (ja) | コンパイル・コードに可視境界を定義する最適化方法および装置 | |
| US5150474A (en) | Method for transferring arguments between object programs by switching address modes according to mode identifying flag | |
| JPS6212529B2 (ja) | ||
| US5826087A (en) | Method and apparatus for cross calling programs of different lexical scoping methodology | |
| JPH08115221A (ja) | Cコンパイラ | |
| JP2002182926A (ja) | コンパイル方法及びコンピュータ読み取り可能な記録媒体 | |
| US5671431A (en) | Method for processing user program on a parallel computer system by inserting a tag during compiling | |
| JP2002157115A (ja) | データ処理装置 | |
| US6029003A (en) | Method of assigning external variables to memories when compiling source program | |
| JPH02308330A (ja) | 知識情報処理装置 | |
| JP3011943U (ja) | コンパイルシステム装置 | |
| Lee | Object-Oriented Programming | |
| JPS63249206A (ja) | プログラマブルコントロ−ラ | |
| US7627859B2 (en) | Method for configuring non-script language library files to be run as scripts | |
| Syntax | Inline Assembly |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040113 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040315 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040413 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040611 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20040624 |
|
| A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20040723 |